wiki.techinc.nl/tests/phpunit/includes/api/ApiPageSetTest.php
Erik Bernhardson 1ded833de1 Implement ApiPageSet::setRedirectMergePolicy()
This allows generator implementations to define how generator data
about a redirect gets merged into the redirect destination.  This
does not change any defaults, only modules that explicitly set a
merge policy will have a change in their results.

This functionality is initially used for the search api modules to
retain search positions within the final result set.

Bug: T92796
Change-Id: If2f49e0fc3176288c95e870240754ee320a6bf91
2015-10-08 11:36:02 -07:00

78 lines
2.4 KiB
PHP

<?php
/**
* @group API
* @group medium
* @group Database
*/
class ApiPageSetTest extends ApiTestCase {
public static function provideRedirectMergePolicy() {
return array(
'By default nothing is merged' => array(
null,
array()
),
'A simple merge policy adds the redirect data in' => array(
function( $current, $new ) {
if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) {
$current['index'] = $new['index'];
}
return $current;
},
array( 'index' => 1 ),
),
);
}
/**
* @dataProvider provideRedirectMergePolicy
*/
public function testRedirectMergePolicyWithArrayResult( $mergePolicy, $expect ) {
list( $target, $pageSet ) = $this->createPageSetWithRedirect();
$pageSet->setRedirectMergePolicy( $mergePolicy );
$result = array(
$target->getArticleID() => array()
);
$pageSet->populateGeneratorData( $result );
$this->assertEquals( $expect, $result[$target->getArticleID()] );
}
/**
* @dataProvider provideRedirectMergePolicy
*/
public function testRedirectMergePolicyWithApiResult( $mergePolicy, $expect ) {
list( $target, $pageSet ) = $this->createPageSetWithRedirect();
$pageSet->setRedirectMergePolicy( $mergePolicy );
$result = new ApiResult( false );
$result->addValue( null, 'pages', array(
$target->getArticleID() => array()
) );
$pageSet->populateGeneratorData( $result, array( 'pages' ) );
$this->assertEquals(
$expect,
$result->getResultData( array( 'pages', $target->getArticleID() ) )
);
}
protected function createPageSetWithRedirect() {
$target = Title::makeTitle( NS_MAIN, 'UTRedirectTarget' );
$sourceA = Title::makeTitle( NS_MAIN, 'UTRedirectSourceA' );
$sourceB = Title::makeTitle( NS_MAIN, 'UTRedirectSourceB' );
self::editPage( 'UTRedirectTarget', 'api page set test' );
self::editPage( 'UTRedirectSourceA', '#REDIRECT [[UTRedirectTarget]]' );
self::editPage( 'UTRedirectSourceB', '#REDIRECT [[UTRedirectTarget]]' );
$request = new FauxRequest( array( 'redirects' => 1 ) );
$context = new RequestContext();
$context->setRequest( $request );
$main = new ApiMain( $context );
$pageSet = new ApiPageSet( $main );
$pageSet->setGeneratorData( $sourceA, array( 'index' => 1 ) );
$pageSet->setGeneratorData( $sourceB, array( 'index' => 3 ) );
$pageSet->populateFromTitles( array( $sourceA, $sourceB ) );
return array( $target, $pageSet );
}
}