318 lines
6.8 KiB
PHP
318 lines
6.8 KiB
PHP
<?php
|
|
|
|
namespace SMW\Tests;
|
|
|
|
use SMW\Setup;
|
|
|
|
/**
|
|
* @covers \SMW\Setup
|
|
* @group semantic-mediawiki
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
* @since 1.9
|
|
*
|
|
* @author mwjames
|
|
*/
|
|
class SetupTest extends \PHPUnit\Framework\TestCase {
|
|
|
|
private $testEnvironment;
|
|
private $defaultConfig;
|
|
private $hookDispatcher;
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->hookDispatcher = $this->getMockBuilder( '\SMW\MediaWiki\HookDispatcher' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$store->expects( $this->any() )
|
|
->method( 'getProperties' )
|
|
->willReturn( [] );
|
|
|
|
$store->expects( $this->any() )
|
|
->method( 'getInProperties' )
|
|
->willReturn( [] );
|
|
|
|
$language = $this->getMockBuilder( '\MediaWiki\Language\Language' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->defaultConfig = [
|
|
'smwgMainCacheType' => CACHE_NONE,
|
|
'smwgNamespacesWithSemanticLinks' => [],
|
|
'smwgEnableUpdateJobs' => false,
|
|
'wgNamespacesWithSubpages' => [],
|
|
'wgExtensionAssetsPath' => false,
|
|
'smwgResourceLoaderDefFiles' => $GLOBALS['smwgResourceLoaderDefFiles'],
|
|
'wgResourceModules' => [],
|
|
'wgScriptPath' => '/Foo',
|
|
'wgServer' => 'http://example.org',
|
|
'wgLanguageCode' => 'en',
|
|
'wgLang' => $language,
|
|
'IP' => 'Foo',
|
|
'smwgConfigFileDir' => '',
|
|
'smwgUpgradeKey' => '',
|
|
'smwgIgnoreUpgradeKeyCheck' => true
|
|
];
|
|
|
|
$this->testEnvironment = new TestEnvironment( $this->defaultConfig );
|
|
$this->testEnvironment->registerObject( 'Store', $store );
|
|
}
|
|
|
|
protected function tearDown(): void {
|
|
$this->testEnvironment->tearDown();
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function testCanConstruct() {
|
|
$this->assertInstanceOf(
|
|
Setup::class,
|
|
new Setup()
|
|
);
|
|
}
|
|
|
|
public function testRegisterExtensionCheck() {
|
|
$vars = [
|
|
'smwgIgnoreExtensionRegistrationCheck' => true
|
|
];
|
|
|
|
Setup::registerExtensionCheck( $vars );
|
|
|
|
$this->assertCount(
|
|
1,
|
|
$vars
|
|
);
|
|
|
|
$vars = [
|
|
'smwgIgnoreExtensionRegistrationCheck' => false
|
|
];
|
|
|
|
Setup::registerExtensionCheck( $vars );
|
|
|
|
$this->assertCount(
|
|
2,
|
|
$vars
|
|
);
|
|
}
|
|
|
|
public function testResourceModules() {
|
|
$config = $this->defaultConfig;
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$config = $instance->init( $config, '' );
|
|
|
|
$this->assertNotEmpty(
|
|
$config['wgResourceModules']
|
|
);
|
|
}
|
|
|
|
public function testHookRunOnSetupAfterInitializationComplete() {
|
|
$this->hookDispatcher->expects( $this->once() )
|
|
->method( 'onSetupAfterInitializationComplete' );
|
|
|
|
$config = $this->defaultConfig;
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$instance->init( $config, '' );
|
|
}
|
|
|
|
/**
|
|
* @dataProvider jobClassesDataProvider
|
|
*/
|
|
public function testRegisterJobClasses( $jobEntry, $setup ) {
|
|
$this->assertArrayEntryExists( 'wgJobClasses', $jobEntry, $setup );
|
|
}
|
|
|
|
public function testRegisterDefaultRightsUserGroupPermissions() {
|
|
$config = $this->defaultConfig;
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$config = $instance->init( $config, 'Foo' );
|
|
|
|
$this->assertNotEmpty(
|
|
$config['wgAvailableRights']
|
|
);
|
|
|
|
$this->assertTrue(
|
|
$config['wgGroupPermissions']['smwcurator']['smw-patternedit']
|
|
);
|
|
|
|
$this->assertTrue(
|
|
$config['wgGroupPermissions']['smwcurator']['smw-pageedit']
|
|
);
|
|
|
|
$this->assertTrue(
|
|
$config['wgGroupPermissions']['smwadministrator']['smw-admin']
|
|
);
|
|
}
|
|
|
|
public function testNoResetOfAlreadyRegisteredGroupPermissions() {
|
|
// Avoid re-setting permissions, refs #1137
|
|
$localConfig['wgGroupPermissions']['sysop']['smw-admin'] = false;
|
|
$localConfig['wgGroupPermissions']['smwadministrator']['smw-admin'] = false;
|
|
|
|
$localConfig = array_merge(
|
|
$this->defaultConfig,
|
|
$localConfig
|
|
);
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$localConfig = $instance->init( $localConfig, 'Foo' );
|
|
|
|
$this->assertFalse(
|
|
$localConfig['wgGroupPermissions']['sysop']['smw-admin']
|
|
);
|
|
|
|
$this->assertFalse(
|
|
$localConfig['wgGroupPermissions']['smwadministrator']['smw-admin']
|
|
);
|
|
}
|
|
|
|
public function testRegisterParamDefinitions() {
|
|
$config = $this->defaultConfig;
|
|
|
|
$config['wgParamDefinitions']['smwformat'] = '';
|
|
|
|
$this->assertEmpty(
|
|
$config['wgParamDefinitions']['smwformat']
|
|
);
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$config = $instance->init( $config, 'Foo' );
|
|
|
|
$this->assertNotEmpty(
|
|
$config['wgParamDefinitions']['smwformat']
|
|
);
|
|
}
|
|
|
|
public function testRegisterFooterIcon() {
|
|
$config = $this->defaultConfig;
|
|
|
|
$config['wgFooterIcons']['poweredbysmw'] = [];
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$config = $instance->init( $config, 'Foo' );
|
|
|
|
$this->assertNotEmpty(
|
|
$config['wgFooterIcons']['poweredbysmw']['semanticmediawiki']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function jobClassesDataProvider() {
|
|
$jobs = [
|
|
|
|
'smw.update',
|
|
'smw.refresh',
|
|
'smw.updateDispatcher',
|
|
'smw.fulltextSearchTableUpdate',
|
|
'smw.entityIdDisposer',
|
|
'smw.propertyStatisticsRebuild',
|
|
'smw.fulltextSearchTableRebuild',
|
|
'smw.changePropagationDispatch',
|
|
'smw.changePropagationUpdate',
|
|
'smw.changePropagationClassUpdate',
|
|
'smw.elasticIndexerRecovery',
|
|
'smw.elasticFileIngest',
|
|
|
|
// Legacy
|
|
'SMW\UpdateJob',
|
|
'SMW\RefreshJob',
|
|
'SMW\UpdateDispatcherJob',
|
|
'SMW\FulltextSearchTableUpdateJob',
|
|
'SMW\EntityIdDisposerJob',
|
|
'SMW\PropertyStatisticsRebuildJob',
|
|
'SMW\FulltextSearchTableRebuildJob',
|
|
'SMW\ChangePropagationDispatchJob',
|
|
'SMW\ChangePropagationUpdateJob',
|
|
'SMW\ChangePropagationClassUpdateJob',
|
|
'SMWUpdateJob',
|
|
'SMWRefreshJob',
|
|
];
|
|
|
|
return $this->buildDataProvider( 'wgJobClasses', $jobs, '' );
|
|
}
|
|
|
|
private function assertArrayEntryExists( $target, $entry, $config, $type = 'class' ) {
|
|
$config = $config + $this->defaultConfig;
|
|
|
|
$this->assertEmpty(
|
|
$config[$target][$entry],
|
|
"Asserts that {$entry} is empty"
|
|
);
|
|
|
|
$instance = new Setup();
|
|
|
|
$instance->setHookDispatcher(
|
|
$this->hookDispatcher
|
|
);
|
|
|
|
$config = $instance->init( $config, 'Foo' );
|
|
|
|
$this->assertNotEmpty( $config[$target][$entry] );
|
|
|
|
switch ( $type ) {
|
|
case 'class':
|
|
$this->assertTrue( class_exists( $config[$target][$entry] ) );
|
|
break;
|
|
case 'file':
|
|
$this->assertTrue( file_exists( $config[$target][$entry] ) );
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
private function buildDataProvider( $id, $definitions, $default ) {
|
|
$provider = [];
|
|
|
|
foreach ( $definitions as $definition ) {
|
|
$provider[] = [
|
|
$definition,
|
|
[ $id => [ $definition => $default ] ],
|
|
];
|
|
}
|
|
|
|
return $provider;
|
|
}
|
|
|
|
}
|