gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/MediaWiki/Hooks/EditPageFormTest.php

203 lines
4.4 KiB
PHP

<?php
namespace SMW\Tests\MediaWiki\Hooks;
use MediaWiki\Title\Title;
use SMW\MediaWiki\Hooks\EditPageForm;
use SMW\Tests\PHPUnitCompat;
/**
* @covers \SMW\MediaWiki\Hooks\EditPageForm
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 2.1
*
* @author mwjames
*/
class EditPageFormTest extends \PHPUnit\Framework\TestCase {
use PHPUnitCompat;
private $namespaceExaminer;
private $permissionExaminer;
private $preferenceExaminer;
private $messageLocalizer;
protected function setUp(): void {
parent::setUp();
$this->namespaceExaminer = $this->getMockBuilder( '\SMW\NamespaceExaminer' )
->disableOriginalConstructor()
->getMock();
$this->permissionExaminer = $this->getMockBuilder( '\SMW\MediaWiki\Permission\PermissionExaminer' )
->disableOriginalConstructor()
->getMock();
$this->preferenceExaminer = $this->getMockBuilder( '\SMW\MediaWiki\Preference\PreferenceExaminer' )
->disableOriginalConstructor()
->getMock();
$this->messageLocalizer = $this->getMockBuilder( '\SMW\Localizer\MessageLocalizer' )
->disableOriginalConstructor()
->getMock();
}
public function testCanConstruct() {
$this->assertInstanceOf(
EditPageForm::class,
new EditPageForm( $this->namespaceExaminer, $this->permissionExaminer, $this->preferenceExaminer )
);
}
public function testDisabledHelp() {
$editPage = $this->getMockBuilder( '\EditPage' )
->disableOriginalConstructor()
->getMock();
$instance = new EditPageForm(
$this->namespaceExaminer,
$this->permissionExaminer,
$this->preferenceExaminer
);
$instance->setOptions(
[
'smwgEnabledEditPageHelp' => false
]
);
$this->assertTrue(
$instance->process( $editPage )
);
}
public function testDisabledOnUserPreference() {
$this->permissionExaminer->expects( $this->once() )
->method( 'hasPermissionOf' )
->willReturn( true );
$this->preferenceExaminer->expects( $this->at( 0 ) )
->method( 'hasPreferenceOf' )
->with( 'smw-prefs-general-options-disable-editpage-info' )
->willReturn( true );
$editPage = $this->getMockBuilder( '\EditPage' )
->disableOriginalConstructor()
->getMock();
$instance = new EditPageForm(
$this->namespaceExaminer,
$this->permissionExaminer,
$this->preferenceExaminer
);
$instance->setOptions(
[
'smwgEnabledEditPageHelp' => true
]
);
$editPage->editFormPageTop = '';
$instance->process( $editPage );
$this->assertEmpty(
$editPage->editFormPageTop
);
}
/**
* @dataProvider titleProvider
*/
public function testExtendEditFormPageTop( $title, $namespaces, $isSemanticEnabled, $expected ) {
$this->permissionExaminer->expects( $this->once() )
->method( 'hasPermissionOf' )
->willReturn( true );
$this->preferenceExaminer->expects( $this->at( 0 ) )
->method( 'hasPreferenceOf' )
->with( 'smw-prefs-general-options-disable-editpage-info' )
->willReturn( false );
$this->namespaceExaminer->expects( $this->any() )
->method( 'isSemanticEnabled' )
->with( $namespaces )
->willReturn( $isSemanticEnabled );
$editPage = $this->getMockBuilder( '\EditPage' )
->disableOriginalConstructor()
->getMock();
$editPage->expects( $this->any() )
->method( 'getTitle' )
->willReturn( $title );
$editPage->editFormPageTop = '';
$instance = new EditPageForm(
$this->namespaceExaminer,
$this->permissionExaminer,
$this->preferenceExaminer
);
$instance->setMessageLocalizer(
$this->messageLocalizer
);
$instance->setOptions(
[
'smwgEnabledEditPageHelp' => true
]
);
$instance->process( $editPage );
$this->assertContains(
$expected,
$editPage->editFormPageTop
);
}
public function titleProvider() {
$provider[] = [
Title::newFromText( 'Foo', SMW_NS_PROPERTY ),
SMW_NS_PROPERTY,
true,
'smw-editpage-property-annotation-enabled'
];
$provider[] = [
Title::newFromText( 'Modification date', SMW_NS_PROPERTY ),
SMW_NS_PROPERTY,
true,
'smw-editpage-property-annotation-disabled'
];
$provider[] = [
Title::newFromText( 'Foo', SMW_NS_CONCEPT ),
SMW_NS_CONCEPT,
true,
'smw-editpage-concept-annotation-enabled'
];
$provider[] = [
Title::newFromText( 'Foo', NS_MAIN ),
NS_MAIN,
true,
'smw-editpage-annotation-enabled'
];
$provider[] = [
Title::newFromText( 'Foo', NS_MAIN ),
NS_MAIN,
false,
'smw-editpage-annotation-disabled'
];
return $provider;
}
}