Merge "Merge namespace aliases like we merge namespace names"
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiPageSetTest.php
1 <?php
2
3 /**
4 * @group API
5 * @group medium
6 * @group Database
7 */
8 class ApiPageSetTest extends ApiTestCase {
9 public static function provideRedirectMergePolicy() {
10 return array(
11 'By default nothing is merged' => array(
12 null,
13 array()
14 ),
15
16 'A simple merge policy adds the redirect data in' => array(
17 function( $current, $new ) {
18 if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) {
19 $current['index'] = $new['index'];
20 }
21 return $current;
22 },
23 array( 'index' => 1 ),
24 ),
25 );
26 }
27
28 /**
29 * @dataProvider provideRedirectMergePolicy
30 */
31 public function testRedirectMergePolicyWithArrayResult( $mergePolicy, $expect ) {
32 list( $target, $pageSet ) = $this->createPageSetWithRedirect();
33 $pageSet->setRedirectMergePolicy( $mergePolicy );
34 $result = array(
35 $target->getArticleID() => array()
36 );
37 $pageSet->populateGeneratorData( $result );
38 $this->assertEquals( $expect, $result[$target->getArticleID()] );
39 }
40
41 /**
42 * @dataProvider provideRedirectMergePolicy
43 */
44 public function testRedirectMergePolicyWithApiResult( $mergePolicy, $expect ) {
45 list( $target, $pageSet ) = $this->createPageSetWithRedirect();
46 $pageSet->setRedirectMergePolicy( $mergePolicy );
47 $result = new ApiResult( false );
48 $result->addValue( null, 'pages', array(
49 $target->getArticleID() => array()
50 ) );
51 $pageSet->populateGeneratorData( $result, array( 'pages' ) );
52 $this->assertEquals(
53 $expect,
54 $result->getResultData( array( 'pages', $target->getArticleID() ) )
55 );
56 }
57
58 protected function createPageSetWithRedirect() {
59 $target = Title::makeTitle( NS_MAIN, 'UTRedirectTarget' );
60 $sourceA = Title::makeTitle( NS_MAIN, 'UTRedirectSourceA' );
61 $sourceB = Title::makeTitle( NS_MAIN, 'UTRedirectSourceB' );
62 self::editPage( 'UTRedirectTarget', 'api page set test' );
63 self::editPage( 'UTRedirectSourceA', '#REDIRECT [[UTRedirectTarget]]' );
64 self::editPage( 'UTRedirectSourceB', '#REDIRECT [[UTRedirectTarget]]' );
65
66 $request = new FauxRequest( array( 'redirects' => 1 ) );
67 $context = new RequestContext();
68 $context->setRequest( $request );
69 $main = new ApiMain( $context );
70 $pageSet = new ApiPageSet( $main );
71
72 $pageSet->setGeneratorData( $sourceA, array( 'index' => 1 ) );
73 $pageSet->setGeneratorData( $sourceB, array( 'index' => 3 ) );
74 $pageSet->populateFromTitles( array( $sourceA, $sourceB ) );
75
76 return array( $target, $pageSet );
77 }
78 }