%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/tests/unit/Query/ |
| Current File : //www/varak.net/wiki.varak.net/extensions/CirrusSearch/tests/unit/Query/InCategoryFeatureTest.php |
<?php
namespace CirrusSearch\Query;
use LoadBalancer;
use IDatabase;
class InCategoryFeatureText extends BaseSimpleKeywordFeatureTest {
public function parseProvider() {
return [
'single category' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Zomg',
],
] ]
]
] ],
'incategory:Zomg'
],
'multiple categories' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Zomg',
],
] ],
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Wowzers',
],
] ]
]
] ],
'incategory:Zomg|Wowzers'
],
'resolves id: prefix' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Cat2',
],
] ],
]
] ],
'incategory:id:2',
],
'throws away invalid id: values' => [
null,
'incategory:id:qwerty',
],
'throws away unknown id: values' => [
null,
'incategory:id:7654321'
],
'allows mixing id: with names' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Cirrus',
],
] ],
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Cat2',
],
] ],
],
] ],
'incategory:Cirrus|id:2',
],
'applies supplied category limit' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'This',
],
] ],
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'That',
],
] ]
]
] ],
'incategory:This|That|Other',
],
'invalid id: counts towards category limit' => [
[ 'bool' => [
'should' => [
[ 'match' => [
'category.lowercase_keyword' => [
'query' => 'Test',
],
] ],
]
] ],
'incategory:id:qwerty|Test|Case',
],
];
}
/**
* @dataProvider parseProvider
*/
public function testParse( array $expected = null, $term ) {
$this->mockDB();
$context = $this->mockContextExpectingAddFilter( $expected );
$context->expects( $this->exactly(
$expected === null ? 1 : 0
) )
->method( 'setResultsPossible' )
->with( false );
$feature = new InCategoryFeature( new \HashConfig( [
'CirrusSearchMaxIncategoryOptions' => 2,
] ) );
$feature->apply( $context, $term );
}
/**
* Injects a database that knows about a fake page with id of 2
* for use in test cases.
*/
private function mockDB() {
$db = $this->getMock( IDatabase::class );
$db->expects( $this->any() )
->method( 'select' )
->with( 'page' )
->will( $this->returnCallback( function ( $table, $select, $where ) {
if ( isset( $where['page_id'] ) && $where['page_id'] === [ '2' ] ) {
return [ (object) [
'page_namespace' => NS_CATEGORY,
'page_title' => 'Cat2',
'page_id' => 2,
] ];
} else {
return [];
}
} ) );
$lb = $this->getMockBuilder( LoadBalancer::class )
->disableOriginalConstructor()
->getMock();
$lb->expects( $this->any() )
->method( 'getConnection' )
->will( $this->returnValue( $db ) );
$this->setService( 'DBLoadBalancer', $lb );
}
}