wiki.techinc.nl/tests/phpunit/includes/page/ArticleTest.php
Derick Alangi 40c1f56dcc page: Change visibility of some WikiPage members to protected
After surveying consumers of these members, apart from the WikiPage
class itself that uses it internally and FlagabbleWikiPage in the
FlaggedRevs ext which subclasses WikiPage, I don't see any other
consumers of this member.

So it can be safely marked as protected as we're sure nothing is
consuming this publicly.
See: https://codesearch.wmcloud.org/search/?q=%5C-%5C%3EmDataLoaded&i=nope&files=&excludeFiles=&repos=,
https://codesearch.wmcloud.org/search/?q=%5C-%5C%3EmPreparedEdit&i=nope&files=&excludeFiles=&repos=,
https://codesearch.wmcloud.org/search/?q=%5C-%5C%3EmLatest&i=nope&files=&excludeFiles=&repos=

NOTE: The tests in ArticleTest.php was removed as the WikiPage::mLatest
      is now a protected member and can't be accessed publicly.

TODO: The last of it's kind is WikiPage::mTitle which will be removed in
      a later patch and that one will be quite bit and tricky.

Change-Id: I78c5b4c31090fe2e01b4cc922ec77131be3223dc
2022-06-16 13:21:34 +01:00

126 lines
3.3 KiB
PHP

<?php
/**
* @group Database
*/
class ArticleTest extends \MediaWikiIntegrationTestCase {
/**
* @var Title
*/
private $title;
/**
* @var Article
*/
private $article;
/** creates a title object and its article object */
protected function setUp(): void {
parent::setUp();
$this->title = Title::makeTitle( NS_MAIN, 'SomePage' );
$this->article = new Article( $this->title );
}
/**
* @covers Article::__get
* @covers Article::__set
*/
public function testGetOrSetOnNewProperty() {
$this->filterDeprecated(
'/Accessing Article::\$ext_someNewProperty/'
);
$this->filterDeprecated(
'/Setting Article::\$ext_someNewProperty/'
);
$this->article->ext_someNewProperty = 12;
$this->assertEquals( 12, $this->article->ext_someNewProperty,
"Article get/set magic on new field" );
$this->assertEquals( 12, $this->article->getPage()->ext_someNewProperty,
"Article get/set magic on new field" );
$this->article->ext_someNewProperty = -8;
$this->assertEquals( -8, $this->article->ext_someNewProperty,
"Article get/set magic on update to new field" );
$this->assertEquals( -8, $this->article->getPage()->ext_someNewProperty,
"Article get/set magic on new field" );
}
/**
* @covers Article::__sleep
*/
public function testSerialization_fails() {
$this->expectException( LogicException::class );
serialize( $this->article );
}
/**
* Tests that missing article page shows parser contents
* of the well-known system message for NS_MEDIAWIKI pages
* @covers Article::showMissingArticle
*/
public function testMissingArticleMessage() {
// Use a well-known system message
$title = Title::makeTitle( NS_MEDIAWIKI, 'Uploadedimage' );
$article = new Article( $title, 0 );
$article->getContext()->getOutput()->setTitle( $title );
$article->showMissingArticle();
$output = $article->getContext()->getOutput();
$this->assertStringContainsString(
Message::newFromKey( 'uploadedimage' )->parse(),
$output->getHTML()
);
}
/**
* Test if patrol footer is possible to show
* @covers Article::showPatrolFooter
* @dataProvider provideShowPatrolFooter
*/
public function testShowPatrolFooter( $group, $title, $editPageText, $isEditedBySameUser, $expectedResult ) {
$context = new RequestContext();
$article = new Article( $title );
$user1 = $this->getTestUser( $group )->getUser();
$user2 = $this->getTestUser()->getUser();
$context->setUser( $user1 );
$article->setContext( $context );
if ( $editPageText !== null ) {
$editedUser = $isEditedBySameUser ? $user1 : $user2;
$editIsGood = $this->editPage( $article->getPage(), $editPageText, '', NS_MAIN, $editedUser )->isGood();
$this->assertTrue( $editIsGood, 'edited a page' );
}
$this->assertSame( $expectedResult, $article->showPatrolFooter() );
}
public function provideShowPatrolFooter() {
yield 'UserAllowedRevExist' => [
'sysop',
Title::makeTitle( NS_MAIN, 'Page1' ),
'EditPage1',
false,
true
];
yield 'UserNotAllowedRevExist' => [
null,
Title::makeTitle( NS_MAIN, 'Page2' ),
'EditPage2',
false,
false
];
yield 'UserAllowedNoRev' => [
'sysop',
Title::makeTitle( NS_MAIN, 'Page3' ),
null,
false,
false
];
yield 'UserAllowedRevExistBySameUser' => [
'sysop',
Title::makeTitle( NS_MAIN, 'Page4' ),
'EditPage4',
true,
false
];
}
}