jenkins-bot has submitted this change and it was merged.

Change subject: Implementation work in SimpleTableSchemaUpdater
......................................................................


Implementation work in SimpleTableSchemaUpdater

Change-Id: Ib09615ca096f678d5a9c857b1eea0cec5930eacb
---
M src/Schema/SimpleTableSchemaUpdater.php
M tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
2 files changed, 101 insertions(+), 10 deletions(-)

Approvals:
  Addshore: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/Schema/SimpleTableSchemaUpdater.php 
b/src/Schema/SimpleTableSchemaUpdater.php
index c6abc5c..041bf35 100644
--- a/src/Schema/SimpleTableSchemaUpdater.php
+++ b/src/Schema/SimpleTableSchemaUpdater.php
@@ -2,6 +2,7 @@
 
 namespace Wikibase\Database\Schema;
 
+use Wikibase\Database\Schema\Definitions\FieldDefinition;
 use Wikibase\Database\Schema\Definitions\TableDefinition;
 
 /**
@@ -26,13 +27,62 @@
         * @throws SchemaUpdateFailedException
         */
        public function updateTable( TableDefinition $currentTable, 
TableDefinition $newTable ) {
-               $this->removeRemovedFields( $currentTable, $newTable );
-               // TODO
-       }
+               // TODO: assert same table
 
-       protected function removeRemovedFields( TableDefinition $currentTable, 
TableDefinition $newTable ) {
-               $removedFields = array_diff_key( $currentTable->getFields(), 
$newTable->getFields() );
-               // TODO
+               $updater = new PrivateTableUpdate( $this->schemaModifier, 
$currentTable, $newTable );
+               $updater->updateTable();
        }
 
 }
+
+class PrivateTableUpdate {
+
+       protected $schemaModifier;
+       protected $currentTable;
+       protected $newTable;
+
+       public function __construct( SchemaModifier $schemaModifier,
+               TableDefinition $currentTable, TableDefinition $newTable ) {
+
+               $this->schemaModifier = $schemaModifier;
+               $this->currentTable = $currentTable;
+               $this->newTable = $newTable;
+       }
+
+       public function updateTable() {
+               $this->removeFields(
+                       array_diff_key(
+                               $this->currentTable->getFields(),
+                               $this->newTable->getFields()
+                       )
+               );
+
+               $this->addFields(
+                       array_diff_key(
+                               $this->newTable->getFields(),
+                               $this->currentTable->getFields()
+                       )
+               );
+
+               // TODO
+       }
+
+       /**
+        * @param FieldDefinition[] $fields
+        */
+       protected function removeFields( array $fields ) {
+               foreach ( $fields as $field ) {
+                       $this->schemaModifier->removeField( 
$this->currentTable->getName(), $field->getName() );
+               }
+       }
+
+       /**
+        * @param FieldDefinition[] $fields
+        */
+       protected function addFields( array $fields ) {
+               foreach ( $fields as $field ) {
+                       $this->schemaModifier->addField( 
$this->currentTable->getName(), $field );
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php 
b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
index 8f61985..20a4257 100644
--- a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
+++ b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
@@ -30,10 +30,7 @@
                $schema = $this->getMock( 
'Wikibase\Database\Schema\SchemaModifier' );
 
                $schema->expects( $this->never() )
-                       ->method( 'removeField' );
-
-               $schema->expects( $this->never() )
-                       ->method( 'addField' );
+                       ->method( $this->anything() );
 
                $updater = new SimpleTableSchemaUpdater( $schema );
 
@@ -90,4 +87,48 @@
                return array_map( function( $definition ) { return array( 
$definition ); }, $definitions );
        }
 
+       /**
+        * @dataProvider tableDefinitionProvider
+        */
+       public function testNewFieldsGetAdded( TableDefinition $tableDefinition 
) {
+               $schema = $this->getMock( 
'Wikibase\Database\Schema\SchemaModifier' );
+
+               $fields = $tableDefinition->getFields();
+
+               $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+                       ->method( 'addField' );
+
+               $schema->expects( $this->never() )
+                       ->method( $this->logicalNot( $this->equalTo( 'addField' 
) ) );
+
+               $updater = new SimpleTableSchemaUpdater( $schema );
+
+               $updater->updateTable(
+                       $tableDefinition->mutateFields( array( reset( $fields ) 
) ),
+                       $tableDefinition
+               );
+       }
+
+       /**
+        * @dataProvider tableDefinitionProvider
+        */
+       public function testRemovedFieldsGetRemoved( TableDefinition 
$tableDefinition ) {
+               $schema = $this->getMock( 
'Wikibase\Database\Schema\SchemaModifier' );
+
+               $fields = $tableDefinition->getFields();
+
+               $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+                       ->method( 'removeField' );
+
+               $schema->expects( $this->never() )
+                       ->method( $this->logicalNot( $this->equalTo( 
'removeField' ) ) );
+
+               $updater = new SimpleTableSchemaUpdater( $schema );
+
+               $updater->updateTable(
+                       $tableDefinition,
+                       $tableDefinition->mutateFields( array( reset( $fields ) 
) )
+               );
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/83815
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib09615ca096f678d5a9c857b1eea0cec5930eacb
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Daniel Werner <daniel.wer...@wikimedia.de>
Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to