jenkins-bot has submitted this change and it was merged.
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(-)
Approvals:
Addshore: Looks good to me, approved
jenkins-bot: Verified
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: merged
Gerrit-Change-Id: Ic7b427c70d1b477f37971d42e5cf3b899c9f33bb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits