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