From 47db6258329f98a22bffb461c470d8ae72b494e4 Mon Sep 17 00:00:00 2001 From: addshore Date: Mon, 4 Dec 2017 13:11:26 +0100 Subject: [PATCH] Test for WikiPage::updateRedirectOn Bug: T180989 Change-Id: I798ded72142503e52395b45fe9ec71a215d5ab92 --- .../includes/page/WikiPageDbTestBase.php | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/phpunit/includes/page/WikiPageDbTestBase.php b/tests/phpunit/includes/page/WikiPageDbTestBase.php index 64ad6441da..fa48fb4792 100644 --- a/tests/phpunit/includes/page/WikiPageDbTestBase.php +++ b/tests/phpunit/includes/page/WikiPageDbTestBase.php @@ -11,6 +11,7 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase { $this->tablesUsed, [ 'page', 'revision', + 'redirect', 'archive', 'category', 'ip_changes', @@ -1183,4 +1184,55 @@ more stuff $this->assertEquals( 1, Category::newFromName( 'C' )->getPageCount() ); } + public function provideUpdateRedirectOn() { + yield [ '#REDIRECT [[Foo]]', true, null, true, true, 0 ]; + yield [ '#REDIRECT [[Foo]]', true, 'Foo', true, false, 1 ]; + yield [ 'SomeText', false, null, false, true, 0 ]; + yield [ 'SomeText', false, 'Foo', false, false, 1 ]; + } + + /** + * @dataProvider provideUpdateRedirectOn + * @covers WikiPage::updateRedirectOn + * + * @param string $initialText + * @param bool $initialRedirectState + * @param string|null $redirectTitle + * @param bool|null $lastRevIsRedirect + * @param bool $expectedSuccess + * @param int $expectedRowCount + */ + public function testUpdateRedirectOn( + $initialText, + $initialRedirectState, + $redirectTitle, + $lastRevIsRedirect, + $expectedSuccess, + $expectedRowCount + ) { + static $pageCounter = 0; + $pageCounter++; + + $page = $this->createPage( Title::newFromText( __METHOD__ . $pageCounter ), $initialText ); + $this->assertSame( $initialRedirectState, $page->isRedirect() ); + + $redirectTitle = is_string( $redirectTitle ) + ? Title::newFromText( $redirectTitle ) + : $redirectTitle; + + $success = $page->updateRedirectOn( $this->db, $redirectTitle, $lastRevIsRedirect ); + $this->assertSame( $expectedSuccess, $success, 'Success assertion' ); + /** + * updateRedirectOn explicitly updates the redirect table (and not the page table). + * Most of core checks the page table for redirect status, so we have to be ugly and + * assert a select from the table here. + */ + $this->assertSelect( + 'redirect', + 'COUNT(*)', + [ 'rd_from' => $page->getId() ], + [ [ strval( $expectedRowCount ) ] ] + ); + } + } -- 2.20.1