composer: * mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0 The following sniffs now pass and were enabled: * Generic.ControlStructures.InlineControlStructure * MediaWiki.PHPUnit.AssertCount.NotUsed npm: * svgo: 2.3.0 → 2.3.1 * https://npmjs.com/advisories/1754 (CVE-2021-33587) Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
145 lines
3.9 KiB
PHP
145 lines
3.9 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
|
|
*/
|
|
public function testImplementsGetMagic() {
|
|
$this->filterDeprecated( '/Accessing Article::\$mLatest/' );
|
|
$this->assertFalse( $this->article->mLatest, "Article __get magic" );
|
|
}
|
|
|
|
/**
|
|
* @depends testImplementsGetMagic
|
|
* @covers Article::__set
|
|
*/
|
|
public function testImplementsSetMagic() {
|
|
$this->filterDeprecated( '/Accessing Article::\$mLatest/' );
|
|
$this->filterDeprecated( '/Setting Article::\$mLatest/' );
|
|
$this->article->mLatest = 2;
|
|
$this->assertEquals( 2, $this->article->mLatest, "Article __set magic" );
|
|
}
|
|
|
|
/**
|
|
* @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, 'Sanity: 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
|
|
];
|
|
}
|
|
}
|