summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php348
1 files changed, 348 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php
new file mode 100644
index 00000000..084e4fcb
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/SQLStore/InstallerTest.php
@@ -0,0 +1,348 @@
+<?php
+
+namespace SMW\Tests\SQLStore;
+
+use Onoi\MessageReporter\MessageReporterFactory;
+use SMW\SQLStore\Installer;
+use SMW\Tests\TestEnvironment;
+
+/**
+ * @covers \SMW\SQLStore\Installer
+ * @group semantic-mediawiki
+ *
+ * @license GNU GPL v2+
+ * @since 2.5
+ *
+ * @author mwjames
+ */
+class InstallerTest extends \PHPUnit_Framework_TestCase {
+
+ private $spyMessageReporter;
+ private $testEnvironment;
+ private $tableSchemaManager;
+ private $tableBuilder;
+ private $tableIntegrityExaminer;
+ private $file;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->testEnvironment = new TestEnvironment();
+ $this->spyMessageReporter = MessageReporterFactory::getInstance()->newSpyMessageReporter();
+
+ $this->tableSchemaManager = $this->getMockBuilder( '\SMW\SQLStore\TableSchemaManager' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableIntegrityExaminer = $this->getMockBuilder( '\SMW\SQLStore\TableIntegrityExaminer' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->jobQueue = $this->getMockBuilder( '\SMW\MediaWiki\JobQueue' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->file = $this->getMockBuilder( '\SMW\Utils\File' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->testEnvironment->registerObject( 'JobQueue', $this->jobQueue );
+ }
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ Installer::class,
+ new Installer( $this->tableSchemaManager, $this->tableBuilder, $this->tableIntegrityExaminer )
+ );
+ }
+
+ public function testInstall() {
+
+ $table = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\Table' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableSchemaManager->expects( $this->atLeastOnce() )
+ ->method( 'getTables' )
+ ->will( $this->returnValue( [ $table ] ) );
+
+ $tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\TableBuilder' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'create' ] )
+ ->getMockForAbstractClass();
+
+ $tableBuilder->expects( $this->once() )
+ ->method( 'create' );
+
+ $this->tableIntegrityExaminer->expects( $this->once() )
+ ->method( 'checkOnPostCreation' );
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $instance->setMessageReporter( $this->spyMessageReporter );
+ $instance->setFile( $this->file );
+
+ $instance->setOptions(
+ [
+ Installer::OPT_SCHEMA_UPDATE => false
+ ]
+ );
+
+ $this->assertTrue(
+ $instance->install()
+ );
+ }
+
+ public function testInstallWithSupplementJobs() {
+
+ $this->jobQueue->expects( $this->exactly( 2 ) )
+ ->method( 'push' );
+
+ $table = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\Table' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableSchemaManager->expects( $this->atLeastOnce() )
+ ->method( 'getTables' )
+ ->will( $this->returnValue( [ $table ] ) );
+
+ $tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\TableBuilder' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'create' ] )
+ ->getMockForAbstractClass();
+
+ $tableBuilder->expects( $this->once() )
+ ->method( 'create' );
+
+ $this->tableIntegrityExaminer->expects( $this->once() )
+ ->method( 'checkOnPostCreation' );
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $instance->setMessageReporter( $this->spyMessageReporter );
+ $instance->setFile( $this->file );
+
+ $instance->setOptions(
+ [
+ Installer::OPT_SUPPLEMENT_JOBS => true
+ ]
+ );
+
+ $instance->install();
+ }
+
+ public function testInstallNonVerbose() {
+
+ $table = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\Table' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableSchemaManager->expects( $this->atLeastOnce() )
+ ->method( 'getTables' )
+ ->will( $this->returnValue( [ $table ] ) );
+
+ $tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\TableBuilder' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'create' ] )
+ ->getMockForAbstractClass();
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $instance->setMessageReporter( $this->spyMessageReporter );
+ $instance->setFile( $this->file );
+
+ $this->assertTrue(
+ $instance->install( false )
+ );
+ }
+
+ public function testUninstall() {
+
+ $table = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\Table' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->tableSchemaManager->expects( $this->once() )
+ ->method( 'getTables' )
+ ->will( $this->returnValue( [ $table ] ) );
+
+ $tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder\TableBuilder' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'drop' ] )
+ ->getMockForAbstractClass();
+
+ $tableBuilder->expects( $this->once() )
+ ->method( 'drop' );
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $instance->setMessageReporter( $this->spyMessageReporter );
+
+ $this->assertTrue(
+ $instance->uninstall()
+ );
+ }
+
+ public function testReportMessage() {
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $this->tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $callback = function() use( $instance ) {
+ $instance->reportMessage( 'Foo' );
+ };
+
+ $this->assertEquals(
+ 'Foo',
+ $this->testEnvironment->outputFromCallbackExec( $callback )
+ );
+ }
+
+ public function testIsGoodSchema() {
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $this->tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $this->assertInternalType(
+ 'boolean',
+ $instance->isGoodSchema()
+ );
+ }
+
+ public function testMakeUpgradeKey() {
+
+ $var1 = [
+ 'smwgUpgradeKey' => '',
+ 'smwgFixedProperties' => [ 'Foo', 'Bar' ],
+ 'smwgPageSpecialProperties' => [ 'Foo', 'Bar' ]
+ ];
+
+ $var2 = [
+ 'smwgUpgradeKey' => '',
+ 'smwgFixedProperties' => [ 'Bar', 'Foo' ],
+ 'smwgPageSpecialProperties' => [ 'Bar', 'Foo' ]
+ ];
+
+ $this->assertEquals(
+ Installer::makeUpgradeKey( $var1 ),
+ Installer::makeUpgradeKey( $var2 )
+ );
+ }
+
+ public function testMakeUpgradeKey_SpecialFixedProperties() {
+
+ $var1 = [
+ 'smwgUpgradeKey' => '',
+ 'smwgFixedProperties' => [ 'Foo', 'Bar' ],
+ 'smwgPageSpecialProperties' => [ 'Foo', 'Bar' ]
+ ];
+
+ $var2 = [
+ 'smwgUpgradeKey' => '',
+ 'smwgFixedProperties' => [ 'Bar', 'Foo' ],
+ 'smwgPageSpecialProperties' => [ 'Bar', '_MDAT' ]
+ ];
+
+ $this->assertNotEquals(
+ Installer::makeUpgradeKey( $var1 ),
+ Installer::makeUpgradeKey( $var2 )
+ );
+ }
+
+ public function testSetUpgradeKey() {
+
+ $file = $this->getMockBuilder( '\SMW\Utils\File' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $file->expects( $this->once() )
+ ->method( 'write' );
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $this->tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $vars = [
+ 'smwgConfigFileDir' => 'Foo/',
+ 'smwgIP' => '',
+ 'smwgUpgradeKey' => '',
+ 'smwgFixedProperties' => [],
+ 'smwgPageSpecialProperties' => []
+ ];
+
+ $instance->setUpgradeKey( $vars, $this->spyMessageReporter, $file );
+ }
+
+ public function testSetUpgradeFile() {
+
+ $expected = json_encode( [ \SMW\Site::id() => [ 'Foo' => 42 ] ], JSON_PRETTY_PRINT );
+
+ $file = $this->getMockBuilder( '\SMW\Utils\File' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $file->expects( $this->once() )
+ ->method( 'write' )
+ ->with(
+ $this->equalTo( 'Foo_dir/.smw.json' ),
+ $this->equalTo( $expected ) );
+
+ $instance = new Installer(
+ $this->tableSchemaManager,
+ $this->tableBuilder,
+ $this->tableIntegrityExaminer
+ );
+
+ $vars = [
+ 'smwgConfigFileDir' => 'Foo_dir'
+ ];
+
+ $instance->setUpgradeFile( $vars, [ 'Foo' => 42 ], $file );
+ }
+
+ public function testIncompleteTasks() {
+
+ $vars = [
+ 'smw.json' => [ \SMW\Site::id() => [ Installer::POPULATE_HASH_FIELD_COMPLETE => false ] ]
+ ];
+
+ $this->assertEquals(
+ [ 'smw-install-incomplete-populate-hash-field' ],
+ Installer::incompleteTasks( $vars )
+ );
+
+ $this->assertEquals(
+ [],
+ Installer::incompleteTasks( [] )
+ );
+ }
+
+}