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 <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Daniel Werner <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits