Jeroen De Dauw has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/83815


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, 76 insertions(+), 4 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseDatabase 
refs/changes/15/83815/1

diff --git a/src/Schema/SimpleTableSchemaUpdater.php 
b/src/Schema/SimpleTableSchemaUpdater.php
index c6abc5c..e815167 100644
--- a/src/Schema/SimpleTableSchemaUpdater.php
+++ b/src/Schema/SimpleTableSchemaUpdater.php
@@ -13,6 +13,16 @@
 
        protected $schemaModifier;
 
+       /**
+        * @var TableDefinition
+        */
+       protected $currentTable;
+
+       /**
+        * @var TableDefinition
+        */
+       protected $newTable;
+
        public function __construct( SchemaModifier $schemaModifier ) {
                $this->schemaModifier = $schemaModifier;
        }
@@ -26,13 +36,31 @@
         * @throws SchemaUpdateFailedException
         */
        public function updateTable( TableDefinition $currentTable, 
TableDefinition $newTable ) {
-               $this->removeRemovedFields( $currentTable, $newTable );
+               // TODO: assert same table
+
+               $this->currentTable = $currentTable;
+               $this->newTable = $newTable;
+
+               $this->removeRemovedFields();
+               $this->addAddedFields();
+
                // TODO
        }
 
-       protected function removeRemovedFields( TableDefinition $currentTable, 
TableDefinition $newTable ) {
-               $removedFields = array_diff_key( $currentTable->getFields(), 
$newTable->getFields() );
-               // TODO
+       protected function removeRemovedFields() {
+               $removedFields = array_diff_key( 
$this->currentTable->getFields(), $this->newTable->getFields() );
+
+               foreach ( $removedFields as $removedField ) {
+                       $this->schemaModifier->removeField( 
$this->currentTable->getName(), $removedField->getName() );
+               }
+       }
+
+       protected function addAddedFields() {
+               $addedFields = array_diff_key( $this->newTable->getFields(), 
$this->currentTable->getFields() );
+
+               foreach ( $addedFields as $addedField ) {
+                       $this->schemaModifier->addField( 
$this->currentTable->getName(), $addedField );
+               }
        }
 
 }
diff --git a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php 
b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
index 8f61985..efbf840 100644
--- a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
+++ b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
@@ -90,4 +90,48 @@
                return array_map( function( $definition ) { return array( 
$definition ); }, $definitions );
        }
 
+       /**
+        * @dataProvider tableDefinitionProvider
+        */
+       public function testNewFieldsGetAdded( TableDefinition $tableDefinition 
) {
+               $schema = $this->getMock( 
'Wikibase\Database\Schema\SchemaModifier' );
+
+               $schema->expects( $this->never() )
+                       ->method( 'removeField' );
+
+               $fields = $tableDefinition->getFields();
+
+               $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+                       ->method( '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' );
+
+               $schema->expects( $this->never() )
+                       ->method( 'addField' );
+
+               $fields = $tableDefinition->getFields();
+
+               $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+                       ->method( '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: newchange
Gerrit-Change-Id: Ib09615ca096f678d5a9c857b1eea0cec5930eacb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to