X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FOutputPageTest.php;h=ef8766a966fb6e0d75e64b67e98fa2fbeeba0c7d;hb=8f1d9e171891a5f1613ae4819dbb140261333f83;hp=00a08a719d7a1a45db4f384ae45e3639b28abfc2;hpb=c51b4f607d702c768608f2df059ef5606471e589;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index 00a08a719d..ef8766a966 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -12,6 +12,14 @@ class OutputPageTest extends MediaWikiTestCase { const SCREEN_MEDIA_QUERY = 'screen and (min-width: 982px)'; const SCREEN_ONLY_MEDIA_QUERY = 'only screen and (min-width: 982px)'; + // @codingStandardsIgnoreStart Generic.Files.LineLength + const RSS_RC_LINK = ''; + const ATOM_RC_LINK = ''; + + const RSS_TEST_LINK = ''; + const ATOM_TEST_LINK = ''; + // @codingStandardsIgnoreEnd + // Ensure that we don't affect the global ResourceLoader state. protected function setUp() { parent::setUp(); @@ -51,6 +59,64 @@ class OutputPageTest extends MediaWikiTestCase { ]; } + private function setupFeedLinks( $feed, $types ) { + $outputPage = $this->newInstance( [ + 'AdvertisedFeedTypes' => $types, + 'Feed' => $feed, + 'OverrideSiteFeed' => false, + 'Script' => '/w', + 'Sitename' => false, + ] ); + $outputPage->setTitle( Title::makeTitle( NS_MAIN, 'Test' ) ); + $this->setMwGlobals( [ + 'wgScript' => '/w/index.php', + ] ); + return $outputPage; + } + + private function assertFeedLinks( $outputPage, $message, $present, $non_present ) { + $links = $outputPage->getHeadLinksArray(); + foreach ( $present as $link ) { + $this->assertContains( $link, $links, $message ); + } + foreach ( $non_present as $link ) { + $this->assertNotContains( $link, $links, $message ); + } + } + + private function assertFeedUILinks( $outputPage, $ui_links ) { + if ( $ui_links ) { + $this->assertTrue( $outputPage->isSyndicated(), 'Syndication should be offered' ); + $this->assertGreaterThan( 0, count( $outputPage->getSyndicationLinks() ), + 'Some syndication links should be there' ); + } else { + $this->assertFalse( $outputPage->isSyndicated(), 'No syndication should be offered' ); + $this->assertEquals( 0, count( $outputPage->getSyndicationLinks() ), + 'No syndication links should be there' ); + } + } + + public static function provideFeedLinkData() { + return [ + [ + true, [ 'rss' ], 'Only RSS RC link should be offerred', + [ self::RSS_RC_LINK ], [ self::ATOM_RC_LINK ] + ], + [ + true, [ 'atom' ], 'Only Atom RC link should be offerred', + [ self::ATOM_RC_LINK ], [ self::RSS_RC_LINK ] + ], + [ + true, [], 'No RC feed formats should be offerred', + [], [ self::ATOM_RC_LINK, self::RSS_RC_LINK ] + ], + [ + false, [ 'atom' ], 'No RC feeds should be offerred', + [], [ self::ATOM_RC_LINK, self::RSS_RC_LINK ] + ], + ]; + } + /** * @covers OutputPage::setCopyrightUrl * @covers OutputPage::getHeadLinksArray @@ -65,6 +131,67 @@ class OutputPageTest extends MediaWikiTestCase { ); } + /** + * @dataProvider provideFeedLinkData + * @covers OutputPage::getHeadLinksArray + */ + public function testRecentChangesFeed( $feed, $advertised_feed_types, + $message, $present, $non_present ) { + $outputPage = $this->setupFeedLinks( $feed, $advertised_feed_types ); + $this->assertFeedLinks( $outputPage, $message, $present, $non_present ); + } + + public static function provideAdditionalFeedData() { + return [ + [ + true, [ 'atom' ], 'Additional Atom feed should be offered', + 'atom', + [ self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + [ self::RSS_TEST_LINK, self::RSS_RC_LINK ], + true, + ], + [ + true, [ 'rss' ], 'Additional RSS feed should be offered', + 'rss', + [ self::RSS_TEST_LINK, self::RSS_RC_LINK ], + [ self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + true, + ], + [ + true, [ 'rss' ], 'Additional Atom feed should NOT be offered with RSS enabled', + 'atom', + [ self::RSS_RC_LINK ], + [ self::RSS_TEST_LINK, self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + false, + ], + [ + false, [ 'atom' ], 'Additional Atom feed should NOT be offered, all feeds disabled', + 'atom', + [], + [ + self::RSS_TEST_LINK, self::ATOM_TEST_LINK, + self::ATOM_RC_LINK, self::ATOM_RC_LINK, + ], + false, + ], + ]; + } + + /** + * @dataProvider provideAdditionalFeedData + * @covers OutputPage::getHeadLinksArray + * @covers OutputPage::addFeedLink + * @covers OutputPage::getSyndicationLinks + * @covers OutputPage::isSyndicated + */ + public function testAdditionalFeeds( $feed, $advertised_feed_types, $message, + $additional_feed_type, $present, $non_present, $any_ui_links ) { + $outputPage = $this->setupFeedLinks( $feed, $advertised_feed_types ); + $outputPage->addFeedLink( $additional_feed_type, 'fake-link' ); + $this->assertFeedLinks( $outputPage, $message, $present, $non_present ); + $this->assertFeedUILinks( $outputPage, $any_ui_links ); + } + // @todo How to test setStatusCode? /** @@ -797,7 +924,7 @@ class OutputPageTest extends MediaWikiTestCase { * @covers OutputPage::isSyndicated */ public function testSetSyndicated() { - $op = $this->newInstance(); + $op = $this->newInstance( [ 'Feed' => true ] ); $this->assertFalse( $op->isSyndicated() ); $op->setSyndicated(); @@ -805,6 +932,12 @@ class OutputPageTest extends MediaWikiTestCase { $op->setSyndicated( false ); $this->assertFalse( $op->isSyndicated() ); + + $op = $this->newInstance(); // Feed => false by default + $this->assertFalse( $op->isSyndicated() ); + + $op->setSyndicated(); + $this->assertFalse( $op->isSyndicated() ); } /** @@ -814,7 +947,7 @@ class OutputPageTest extends MediaWikiTestCase { * @covers OutputPage::getSyndicationLinks() */ public function testFeedLinks() { - $op = $this->newInstance(); + $op = $this->newInstance( [ 'Feed' => true ] ); $this->assertSame( [], $op->getSyndicationLinks() ); $op->addFeedLink( 'not a supported format', 'abc' ); @@ -839,6 +972,13 @@ class OutputPageTest extends MediaWikiTestCase { $expected[$type] = $op->getTitle()->getLocalURL( "feed=$type&apples=oranges" ); } $this->assertSame( $expected, $op->getSyndicationLinks() ); + + $op = $this->newInstance(); // Feed => false by default + $this->assertSame( [], $op->getSyndicationLinks() ); + + $op->addFeedLink( $feedTypes[0], 'def' ); + $this->assertFalse( $op->isSyndicated() ); + $this->assertSame( [], $op->getSyndicationLinks() ); } /** @@ -912,7 +1052,7 @@ class OutputPageTest extends MediaWikiTestCase { * @param array $args Array of form [ category name => sort key ] * @param array $fakeResults Array of form [ category name => value to return from mocked * LinkBatch ] - * @param callback $variantLinkCallback Callback to replace findVariantLink() call + * @param callable $variantLinkCallback Callback to replace findVariantLink() call * @param array $expectedNormal Expected return value of getCategoryLinks['normal'] * @param array $expectedHidden Expected return value of getCategoryLinks['hidden'] */ @@ -1486,7 +1626,7 @@ class OutputPageTest extends MediaWikiTestCase { "
Bold\n
", ], 'No section edit links' => [ [ '== Title ==' ], - "* Not a list
', ], 'No section edit links' => [ [ '== Title ==' ], - "\nMy message" ], - '
' . "\nMy message\n
" + '' . "\nMy message
" ], 'List at start' => [ [ '* List' ], - "* Not a list
', @@ -1546,7 +1686,7 @@ class OutputPageTest extends MediaWikiTestCase { "* Some page
", ], 'EditPage' => [ [ "text\n
text
text
wrappers' => [ [ 'two classes', "1\n\n2\n\n3" ], "
1\n
2\n
3\n