Jeroen De Dauw has uploaded a new change for review.

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


Change subject: Implemented MediaWikiSchemaModifier
......................................................................

Implemented MediaWikiSchemaModifier

Change-Id: Ic7b427c70d1b477f37971d42e5cf3b899c9f33bb
---
M src/MediaWiki/MediaWikiSchemaModifier.php
A tests/phpunit/MediaWiki/MediaWikiSchemaModifierTest.php
2 files changed, 150 insertions(+), 7 deletions(-)


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

diff --git a/src/MediaWiki/MediaWikiSchemaModifier.php 
b/src/MediaWiki/MediaWikiSchemaModifier.php
index 054b00d..b4eb273 100644
--- a/src/MediaWiki/MediaWikiSchemaModifier.php
+++ b/src/MediaWiki/MediaWikiSchemaModifier.php
@@ -5,6 +5,8 @@
 use DatabaseBase;
 use Wikibase\Database\DBConnectionProvider;
 use Wikibase\Database\Schema\Definitions\FieldDefinition;
+use Wikibase\Database\Schema\FieldAdditionFailedException;
+use Wikibase\Database\Schema\FieldRemovalFailedException;
 use Wikibase\Database\Schema\SchemaModificationSqlBuilder;
 use Wikibase\Database\Schema\SchemaModifier;
 
@@ -42,11 +44,21 @@
         * @param string $tableName
         * @param string $fieldName
         *
-        * TODO: document throws
+        * @throws FieldRemovalFailedException
         */
        public function removeField( $tableName, $fieldName ) {
-               // TODO
-               // $this->getDB()->query( $this->sqlBuilder->getRemoveFieldSql( 
$tableName, $fieldName ) );
+               $success = $this->getDB()->query(
+                       $this->sqlBuilder->getRemoveFieldSql( $tableName, 
$fieldName ),
+                       __METHOD__
+               );
+
+               if ( $success === false ) {
+                       throw new FieldRemovalFailedException(
+                               $tableName,
+                               $fieldName,
+                               $this->getDB()->lastQuery()
+                       );
+               }
        }
 
        /**
@@ -55,12 +67,21 @@
         * @param string $tableName
         * @param FieldDefinition $field
         *
-        * TODO: document throws
+        * @throws FieldAdditionFailedException
         */
        public function addField( $tableName, FieldDefinition $field ) {
-               // TODO
+               $success = $this->getDB()->query(
+                       $this->sqlBuilder->getAddFieldSql( $tableName, $field ),
+                       __METHOD__
+               );
+
+               if ( $success === false ) {
+                       throw new FieldAdditionFailedException(
+                               $tableName,
+                               $field,
+                               $this->getDB()->lastQuery()
+                       );
+               }
        }
 
 }
-
-
diff --git a/tests/phpunit/MediaWiki/MediaWikiSchemaModifierTest.php 
b/tests/phpunit/MediaWiki/MediaWikiSchemaModifierTest.php
new file mode 100644
index 0000000..59c1bd3
--- /dev/null
+++ b/tests/phpunit/MediaWiki/MediaWikiSchemaModifierTest.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Wikibase\Database\Tests\MediaWiki;
+
+use Wikibase\Database\MediaWiki\MediaWikiSchemaModifier;
+
+/**
+ * @covers Wikibase\Database\MediaWiki\MediaWikiSchemaModifier
+ *
+ * @group Wikibase
+ * @group WikibaseDatabase
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ */
+class MediaWikiSchemaModifierTest extends \PHPUnit_Framework_TestCase {
+
+       protected function getMockConnectionProvider( $connection ) {
+               $connectionProvider = $this->getMock( 
'Wikibase\Database\DBConnectionProvider' );
+
+               $connectionProvider->expects( $this->any() )
+                       ->method( 'getConnection' )
+                       ->will( $this->returnValue( $connection ) );
+
+               return $connectionProvider;
+       }
+
+       public function testRemoveField() {
+               $tableName = 'tableName';
+               $fieldName = 'fieldName';
+               $sql = 'foo bar baz';
+
+               $sqlBuilder = $this->getMock( 
'Wikibase\Database\Schema\SchemaModificationSqlBuilder' );
+               $sqlBuilder->expects( $this->once() )
+                       ->method( 'getRemoveFieldSql' )
+                       ->with(
+                               $this->equalTo( $tableName ),
+                               $this->equalTo( $fieldName )
+                       )
+                       ->will( $this->returnValue( $sql ) );
+
+               $connection = $this->getMock( 'DatabaseMysql' );
+
+               $connection->expects( $this->once() )
+                       ->method( 'query' )
+                       ->with( $this->equalTo( $sql ) )
+                       ->will( $this->returnValue( true ) );
+
+               $connectionProvider = $this->getMockConnectionProvider( 
$connection );
+
+               $modifier = new MediaWikiSchemaModifier( $connectionProvider, 
$sqlBuilder );
+
+               $modifier->removeField( $tableName, $fieldName );
+       }
+
+       public function testAddField() {
+               $tableName = 'fieldName';
+               $field = $this->getMockBuilder( 
'Wikibase\Database\Schema\Definitions\FieldDefinition' )
+                       ->disableOriginalConstructor()->getMock();
+               $sql = 'foo bar baz';
+
+               $sqlBuilder = $this->getMock( 
'Wikibase\Database\Schema\SchemaModificationSqlBuilder' );
+               $sqlBuilder->expects( $this->once() )
+                       ->method( 'getAddFieldSql' )
+                       ->with(
+                               $this->equalTo( $tableName ),
+                               $this->equalTo( $field )
+                       )
+                       ->will( $this->returnValue( $sql ) );
+
+               $connection = $this->getMock( 'DatabaseMysql' );
+
+               $connection->expects( $this->once() )
+                       ->method( 'query' )
+                       ->with( $this->equalTo( $sql ) )
+                       ->will( $this->returnValue( true ) );
+
+               $connectionProvider = $this->getMockConnectionProvider( 
$connection );
+
+               $modifier = new MediaWikiSchemaModifier( $connectionProvider, 
$sqlBuilder );
+
+               $modifier->addField( $tableName, $field );
+       }
+
+       public function testRemoveFieldThrowsExceptionOnQueryFailure() {
+               $sqlBuilder = $this->getMock( 
'Wikibase\Database\Schema\SchemaModificationSqlBuilder' );
+
+               $connection = $this->getMock( 'DatabaseMysql' );
+
+               $connection->expects( $this->once() )
+                       ->method( 'query' )
+                       ->will( $this->returnValue( false ) );
+
+               $connectionProvider = $this->getMockConnectionProvider( 
$connection );
+
+               $modifier = new MediaWikiSchemaModifier( $connectionProvider, 
$sqlBuilder );
+
+               $this->setExpectedException( 
'Wikibase\Database\Schema\FieldRemovalFailedException' );
+               $modifier->removeField( 'foo', 'bar' );
+       }
+
+       public function testAddFieldThrowsExceptionOnQueryFailure() {
+               $sqlBuilder = $this->getMock( 
'Wikibase\Database\Schema\SchemaModificationSqlBuilder' );
+
+               $connection = $this->getMock( 'DatabaseMysql' );
+
+               $connection->expects( $this->once() )
+                       ->method( 'query' )
+                       ->will( $this->returnValue( false ) );
+
+               $connectionProvider = $this->getMockConnectionProvider( 
$connection );
+
+               $modifier = new MediaWikiSchemaModifier( $connectionProvider, 
$sqlBuilder );
+
+               $field = $this->getMockBuilder( 
'Wikibase\Database\Schema\Definitions\FieldDefinition' )
+                       ->disableOriginalConstructor()->getMock();
+
+               $this->setExpectedException( 
'Wikibase\Database\Schema\FieldAdditionFailedException' );
+               $modifier->addField( 'foo', $field );
+       }
+
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic7b427c70d1b477f37971d42e5cf3b899c9f33bb
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