mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-12-01 09:16:34 +00:00
572ffdf25a
SkinMinerva cached the ContentHandler object for better performance. In the future the ContentHandler will be also used in the Menu, for better readability, store ContentHandler as Service. MediaWikiServices will initialize service on first access and cache it for future needs. Same applies to SkinUserPageHelper, Bug: T216152 Change-Id: Ia98dc860862360a68556272714669f0c3a13eb1e
190 lines
5.2 KiB
PHP
190 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\MediaWiki\Minerva;
|
|
|
|
use SkinMinerva;
|
|
use MediaWikiTestCase;
|
|
use Title;
|
|
use RequestContext;
|
|
use MediaWiki\Minerva\SkinUserPageHelper;
|
|
|
|
// FIXME: That this class exists is an indicator that at least SkinMinerva#isAllowedPageAction
|
|
// should be extracted from SkinMinerva.
|
|
// phpcs:ignore MediaWiki.Files.ClassMatchesFilename.NotMatch
|
|
class TestSkinMinerva extends SkinMinerva {
|
|
|
|
public function isAllowedPageAction( $action ) {
|
|
return parent::isAllowedPageAction( $action );
|
|
}
|
|
|
|
public function setDoesPageHaveLanguages( $doesPageHaveLanguages ) {
|
|
$this->doesPageHaveLanguages = $doesPageHaveLanguages;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @group MinervaNeue
|
|
*/
|
|
class SkinMinervaPageActionsTest extends MediaWikiTestCase {
|
|
|
|
/**
|
|
* @var TestSkinMinerva
|
|
*/
|
|
private $skin;
|
|
|
|
protected function setUp() {
|
|
parent::setUp();
|
|
|
|
$this->skin = $this->getSkin( Title::newFromText( 'SkinMinervaPageActionsTest' ) );
|
|
}
|
|
|
|
/**
|
|
* @param Title $title
|
|
* @return TestSkinMinerva
|
|
*/
|
|
private function getSkin( Title $title ) {
|
|
$requestContext = RequestContext::getMain();
|
|
$requestContext->setTitle( $title );
|
|
|
|
$result = new TestSkinMinerva();
|
|
$result->setContext( $requestContext );
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function test_page_actions_arent_allowed_when_on_the_main_page() {
|
|
$skin = $this->getSkin( Title::newMainPage() );
|
|
|
|
$this->assertFalse( $skin->isAllowedPageAction( 'watch' ) );
|
|
$this->assertFalse( $skin->isAllowedPageAction( 'edit' ) );
|
|
|
|
// Check to make sure 'talk' and 'switch-language' are enabled on the Main page.
|
|
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
|
|
$this->assertTrue( $skin->isAllowedPageAction( 'switch-language' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function test_invalid_page_actions_arent_allowed() {
|
|
$this->setMwGlobals( 'wgMinervaPageActions', [] );
|
|
|
|
// By default, the "talk" and "watch" page actions are allowed but are now deemed invalid.
|
|
$this->assertFalse( $this->skin->isAllowedPageAction( 'talk' ) );
|
|
$this->assertFalse( $this->skin->isAllowedPageAction( 'watch' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function test_valid_page_actions_are_allowed() {
|
|
$this->assertTrue( $this->skin->isAllowedPageAction( 'talk' ) );
|
|
$this->assertTrue( $this->skin->isAllowedPageAction( 'watch' ) );
|
|
}
|
|
|
|
public static function editPageActionProvider() {
|
|
return [
|
|
[ false, false, false ],
|
|
[ true, false, false ],
|
|
[ true, true, true ]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* The "edit" page action is allowed when the page doesn't support direct editing via the API.
|
|
*
|
|
* @dataProvider editPageActionProvider
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function test_edit_page_action(
|
|
$supportsDirectEditing,
|
|
$supportsDirectApiEditing,
|
|
$expected
|
|
) {
|
|
$contentHandler = $this->getMockBuilder( 'ContentHandler' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$contentHandler->method( 'supportsDirectEditing' )
|
|
->will( $this->returnValue( $supportsDirectEditing ) );
|
|
|
|
$contentHandler->method( 'supportsDirectApiEditing' )
|
|
->will( $this->returnValue( $supportsDirectApiEditing ) );
|
|
|
|
$this->setService( 'Minerva.ContentHandler', $contentHandler );
|
|
|
|
$this->assertEquals( $expected, $this->skin->isAllowedPageAction( 'edit' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function testPageActionsWhenOnUserPage() {
|
|
$userPageHelper = $this->getMockBuilder( SkinUserPageHelper::class )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$userPageHelper->expects( $this->once() )
|
|
->method( 'isUserPage' )
|
|
->willReturn( true );
|
|
|
|
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
|
|
|
|
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
|
|
|
|
$this->assertFalse( $skin->isAllowedPageAction( 'talk' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function testPageActionsWhenNotOnUserPage() {
|
|
$userPageHelper = $this->getMockBuilder( SkinUserPageHelper::class )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$userPageHelper->expects( $this->once() )
|
|
->method( 'isUserPage' )
|
|
->willReturn( false );
|
|
|
|
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
|
|
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
|
|
|
|
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
|
|
}
|
|
|
|
public static function switchLanguagePageActionProvider() {
|
|
return [
|
|
[ true, false, true ],
|
|
[ false, true, true ],
|
|
[ false, false, false ],
|
|
[ true, false, true ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* The "switch-language" page action is allowed when: v2 of the page action bar is enabled and
|
|
* if the page has interlanguage links or if the <code>$wgMinervaAlwaysShowLanguageButton</code>
|
|
* configuration variable is set to truthy.
|
|
*
|
|
* @dataProvider switchLanguagePageActionProvider
|
|
* @covers SkinMinerva::isAllowedPageAction
|
|
*/
|
|
public function test_switch_language_page_action(
|
|
$doesPageHaveLanguages,
|
|
$minervaAlwaysShowLanguageButton,
|
|
$expected
|
|
) {
|
|
$this->skin->setDoesPageHaveLanguages( $doesPageHaveLanguages );
|
|
$this->setMwGlobals( [
|
|
'wgMinervaAlwaysShowLanguageButton' => $minervaAlwaysShowLanguageButton,
|
|
] );
|
|
|
|
$this->assertEquals( $expected, $this->skin->isAllowedPageAction( 'switch-language' ) );
|
|
}
|
|
}
|