Addshore has uploaded a new change for review. https://gerrit.wikimedia.org/r/89530
Change subject: Inject Mocks in tests ...................................................................... Inject Mocks in tests Change-Id: I47ec0b6e299b5ebb3899a6ba9a14f96447a60668 --- M src/MediaWiki/MWTableBuilderBuilder.php M src/MySQL/MySQLTableSqlBuilder.php M src/SQLite/SQLiteSchemaSqlBuilder.php M src/SQLite/SQLiteTableSqlBuilder.php M tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php M tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php 6 files changed, 101 insertions(+), 119 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseDatabase refs/changes/30/89530/1 diff --git a/src/MediaWiki/MWTableBuilderBuilder.php b/src/MediaWiki/MWTableBuilderBuilder.php index b416980..f098304 100644 --- a/src/MediaWiki/MWTableBuilderBuilder.php +++ b/src/MediaWiki/MWTableBuilderBuilder.php @@ -5,8 +5,11 @@ use DatabaseBase; use RuntimeException; use Wikibase\Database\DBConnectionProvider; +use Wikibase\Database\MySQL\MySQLFieldSqlBuilder; use Wikibase\Database\MySQL\MySQLTableSqlBuilder; use Wikibase\Database\Schema\TableBuilder; +use Wikibase\Database\SQLite\SQLiteFieldSqlBuilder; +use Wikibase\Database\SQLite\SQLiteIndexSqlBuilder; use Wikibase\Database\SQLite\SQLiteTableSqlBuilder; /** @@ -64,15 +67,16 @@ return new MySQLTableSqlBuilder( $this->connectionProvider->getConnection()->getDBname(), - $this->newEscaper(), - $this->newTableNameFormatter() + $this->newTableNameFormatter(), + new MySQLFieldSqlBuilder( $this->newEscaper() ) ); } protected function newSQLiteTableSqlBuilder() { return new SQLiteTableSqlBuilder( - $this->newEscaper(), - $this->newTableNameFormatter() + $this->newTableNameFormatter(), + new SQLiteFieldSqlBuilder( $this->newEscaper() ), + new SQLiteIndexSqlBuilder( $this->newTableNameFormatter() ) ); } diff --git a/src/MySQL/MySQLTableSqlBuilder.php b/src/MySQL/MySQLTableSqlBuilder.php index 41d3818..96d9e86 100644 --- a/src/MySQL/MySQLTableSqlBuilder.php +++ b/src/MySQL/MySQLTableSqlBuilder.php @@ -7,6 +7,7 @@ use Wikibase\Database\Schema\Definitions\FieldDefinition; use Wikibase\Database\Schema\Definitions\IndexDefinition; use Wikibase\Database\Schema\Definitions\TableDefinition; +use Wikibase\Database\Schema\FieldSqlBuilder; use Wikibase\Database\Schema\TableSqlBuilder; use Wikibase\Database\TableNameFormatter; @@ -21,21 +22,18 @@ class MySQLTableSqlBuilder extends TableSqlBuilder { protected $dbName; - protected $escaper; protected $tableNameFormatter; protected $fieldSqlBuilder; /** * @param string $dbName - * @param Escaper $fieldValueEscaper * @param TableNameFormatter $tableNameFormatter + * @param FieldSqlBuilder $fieldSqlBuilder */ - public function __construct( $dbName, Escaper $fieldValueEscaper, TableNameFormatter $tableNameFormatter ) { + public function __construct( $dbName, TableNameFormatter $tableNameFormatter, FieldSqlBuilder $fieldSqlBuilder ) { $this->dbName = $dbName; - $this->escaper = $fieldValueEscaper; $this->tableNameFormatter = $tableNameFormatter; - //TODO inject sqlbuilder - $this->fieldSqlBuilder = new MySQLFieldSqlBuilder( $this->escaper ); + $this->fieldSqlBuilder = $fieldSqlBuilder; } /** diff --git a/src/SQLite/SQLiteSchemaSqlBuilder.php b/src/SQLite/SQLiteSchemaSqlBuilder.php index 2c9d14c..0ad57fa 100644 --- a/src/SQLite/SQLiteSchemaSqlBuilder.php +++ b/src/SQLite/SQLiteSchemaSqlBuilder.php @@ -29,7 +29,12 @@ $this->fieldSqlBuilder = new SQLiteFieldSqlBuilder( $fieldValueEscaper ); $this->tableNameFormatter = $tableNameFormatter; $this->tableDefinitionReader = $definitionReader; - $this->tableSqlBuilder = new SQLiteTableSqlBuilder( $fieldValueEscaper, $tableNameFormatter ); + //todo inject tableSqlBuilder to make testing easier? + $this->tableSqlBuilder = new SQLiteTableSqlBuilder( + $tableNameFormatter, + new SQLiteFieldSqlBuilder( $fieldValueEscaper ), + new SQLiteIndexSqlBuilder( $tableNameFormatter ) + ); } /** diff --git a/src/SQLite/SQLiteTableSqlBuilder.php b/src/SQLite/SQLiteTableSqlBuilder.php index a382b96..9a39da4 100644 --- a/src/SQLite/SQLiteTableSqlBuilder.php +++ b/src/SQLite/SQLiteTableSqlBuilder.php @@ -7,6 +7,8 @@ use Wikibase\Database\Schema\Definitions\FieldDefinition; use Wikibase\Database\Schema\Definitions\IndexDefinition; use Wikibase\Database\Schema\Definitions\TableDefinition; +use Wikibase\Database\Schema\FieldSqlBuilder; +use Wikibase\Database\Schema\IndexSqlBuilder; use Wikibase\Database\TableNameFormatter; use Wikibase\Database\Schema\TableSqlBuilder; @@ -20,21 +22,19 @@ */ class SQLiteTableSqlBuilder extends TableSqlBuilder { - protected $escaper; protected $tableNameFormatter; protected $fieldSqlBuilder; protected $indexSqlBuilder; /** - * @param Escaper $fieldValueEscaper * @param TableNameFormatter $tableNameFormatter + * @param FieldSqlBuilder $fieldBuilder + * @param IndexSqlBuilder $indexBuilder */ - public function __construct( Escaper $fieldValueEscaper, TableNameFormatter $tableNameFormatter ) { - $this->escaper = $fieldValueEscaper; + public function __construct( TableNameFormatter $tableNameFormatter, FieldSqlBuilder $fieldBuilder, IndexSqlBuilder $indexBuilder ) { $this->tableNameFormatter = $tableNameFormatter; - //TODO inject sqlbuilders - $this->fieldSqlBuilder = new SQLiteFieldSqlBuilder( $this->escaper ); - $this->indexSqlBuilder = new SQLiteIndexSqlBuilder( $tableNameFormatter ); + $this->fieldSqlBuilder = $fieldBuilder; + $this->indexSqlBuilder = $indexBuilder; } /** diff --git a/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php b/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php index 67032ab..6ecda2d 100644 --- a/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php +++ b/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php @@ -29,20 +29,22 @@ protected function newInstance() { - $mockEscaper = $this->getMock( 'Wikibase\Database\Escaper' ); - $mockEscaper->expects( $this->any() ) - ->method( 'getEscapedValue' ) - ->will( $this->returnArgument(0) ); - $mockTableNameFormatter = $this->getMock( 'Wikibase\Database\TableNameFormatter' ); $mockTableNameFormatter->expects( $this->any() ) ->method( 'formatTableName' ) ->will( $this->returnArgument(0) ); + $mockFieldSqlBuilder = $this->getMockBuilder( 'Wikibase\Database\MySQL\MySQLFieldSqlBuilder' ) + ->disableOriginalConstructor() + ->getMock(); + $mockFieldSqlBuilder->expects( $this->any() ) + ->method( 'getFieldSql' ) + ->will( $this->returnValue( '<FIELDSQL>' ) ); + return new MySQLTableSqlBuilder( self::DB_NAME, - $mockEscaper, - $mockTableNameFormatter + $mockTableNameFormatter, + $mockFieldSqlBuilder ); } @@ -57,72 +59,53 @@ $this->assertEquals( $expectedSQL, $actualSQL ); } + public function newMockField( $name ){ + $mockFieldDefinition = $this->getMockBuilder( 'Wikibase\Database\Schema\Definitions\FieldDefinition' ) + ->disableOriginalConstructor() + ->getMock(); + $mockFieldDefinition->expects( $this->any() ) + ->method( 'getName' ) + ->will( $this->returnValue( $name ) ); + return $mockFieldDefinition; + } + public function tableAndSqlProvider() { $argLists = array(); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( 'fieldName', FieldDefinition::TYPE_INTEGER ) - ) + array( $this->newMockField( 'foo' ) ) ), - 'CREATE TABLE `dbName`.tableName (fieldName INT NULL) ENGINE=InnoDB, DEFAULT CHARSET=binary;' + 'CREATE TABLE `dbName`.tableName (<FIELDSQL>) ENGINE=InnoDB, DEFAULT CHARSET=binary;' ); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( - 'primaryField', FieldDefinition::TYPE_INTEGER, FieldDefinition::NOT_NULL, FieldDefinition::NO_DEFAULT, FieldDefinition::NO_ATTRIB - ), - new FieldDefinition( - 'textField', FieldDefinition::TYPE_TEXT - ), - new FieldDefinition( - 'intField', FieldDefinition::TYPE_INTEGER, FieldDefinition::NOT_NULL, 42 - ), - ) + array( $this->newMockField( 'foo' ), $this->newMockField( 'bar' ), $this->newMockField( 'baz' ) ) ), - 'CREATE TABLE `dbName`.tableName (primaryField INT NOT NULL, textField BLOB NULL, intField INT DEFAULT 42 NOT NULL) ENGINE=InnoDB, DEFAULT CHARSET=binary;' + 'CREATE TABLE `dbName`.tableName (<FIELDSQL>, <FIELDSQL>, <FIELDSQL>) ENGINE=InnoDB, DEFAULT CHARSET=binary;' ); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( - 'textField', FieldDefinition::TYPE_TEXT - ), - new FieldDefinition( - 'intField', FieldDefinition::TYPE_INTEGER, FieldDefinition::NOT_NULL, 42 - ), - ), + array( $this->newMockField( 'foo' ), $this->newMockField( 'bar' ) ), array( new IndexDefinition( 'indexName', array( 'textField' => 0, 'intField' => 0 ), IndexDefinition::TYPE_INDEX ), ) ), - 'CREATE TABLE `dbName`.tableName (textField BLOB NULL, intField INT DEFAULT 42 NOT NULL, INDEX `indexName` (`textField`,`intField`)) ENGINE=InnoDB, DEFAULT CHARSET=binary;' + 'CREATE TABLE `dbName`.tableName (<FIELDSQL>, <FIELDSQL>, INDEX `indexName` (`textField`,`intField`)) ENGINE=InnoDB, DEFAULT CHARSET=binary;' ); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( - 'textField', FieldDefinition::TYPE_TEXT - ), - new FieldDefinition( - 'intField', FieldDefinition::TYPE_INTEGER, FieldDefinition::NOT_NULL, 42 - ), - new FieldDefinition( - 'textField2', FieldDefinition::TYPE_TEXT - ), - ), + array( $this->newMockField( 'foo' ), $this->newMockField( 'bar' ), $this->newMockField( 'baz' ) ), array( new IndexDefinition( 'indexName', array( 'intField' => 0 ), IndexDefinition::TYPE_INDEX @@ -132,7 +115,7 @@ ), ) ), - 'CREATE TABLE `dbName`.tableName (textField BLOB NULL, intField INT DEFAULT 42 NOT NULL, textField2 BLOB NULL, INDEX `indexName` (`intField`), UNIQUE INDEX `uniqueIndexName` (`textField2`)) ENGINE=InnoDB, DEFAULT CHARSET=binary;' + 'CREATE TABLE `dbName`.tableName (<FIELDSQL>, <FIELDSQL>, <FIELDSQL>, INDEX `indexName` (`intField`), UNIQUE INDEX `uniqueIndexName` (`textField2`)) ENGINE=InnoDB, DEFAULT CHARSET=binary;' ); return $argLists; diff --git a/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php b/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php index a6fee0e..5a3bf10 100644 --- a/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php +++ b/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php @@ -27,19 +27,29 @@ protected function newInstance() { - $mockEscaper = $this->getMock( 'Wikibase\Database\Escaper' ); - $mockEscaper->expects( $this->any() ) - ->method( 'getEscapedValue' ) - ->will( $this->returnArgument(0) ); - $mockTableNameFormatter = $this->getMock( 'Wikibase\Database\TableNameFormatter' ); $mockTableNameFormatter->expects( $this->any() ) ->method( 'formatTableName' ) ->will( $this->returnArgument(0) ); + $mockFieldSqlBuilder = $this->getMockBuilder( 'Wikibase\Database\SQLite\SQLiteFieldSqlBuilder' ) + ->disableOriginalConstructor() + ->getMock(); + $mockFieldSqlBuilder->expects( $this->any() ) + ->method( 'getFieldSql' ) + ->will( $this->returnValue( '<FIELDSQL>' ) ); + + $mockIndexSqlBuilder = $this->getMockBuilder( 'Wikibase\Database\SQLite\SQLiteIndexSqlBuilder' ) + ->disableOriginalConstructor() + ->getMock(); + $mockIndexSqlBuilder->expects( $this->any() ) + ->method( 'getIndexSql' ) + ->will( $this->returnValue( '<INDEXSQL>' ) ); + return new SQLiteTableSqlBuilder( - $mockEscaper, - $mockTableNameFormatter + $mockTableNameFormatter, + $mockFieldSqlBuilder, + $mockIndexSqlBuilder ); } @@ -54,75 +64,57 @@ $this->assertEquals( $expectedSQL, $actualSQL ); } + + public function newMockField( $name ){ + $mockFieldDefinition = $this->getMockBuilder( 'Wikibase\Database\Schema\Definitions\FieldDefinition' ) + ->disableOriginalConstructor() + ->getMock(); + $mockFieldDefinition->expects( $this->any() ) + ->method( 'getName' ) + ->will( $this->returnValue( $name ) ); + return $mockFieldDefinition; + } + + public function newMockIndex( $name ){ + $mockIndexDefinition = $this->getMockBuilder( 'Wikibase\Database\Schema\Definitions\IndexDefinition' ) + ->disableOriginalConstructor() + ->getMock(); + $mockIndexDefinition->expects( $this->any() ) + ->method( 'getName' ) + ->will( $this->returnValue( $name ) ); + return $mockIndexDefinition; + } + public function tableAndSqlProvider() { $argLists = array(); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( 'fieldName', FieldDefinition::TYPE_INTEGER ) - ) + array( $this->newMockField( 'foo' ) ) ), - 'CREATE TABLE tableName (fieldName INTEGER NULL);' + 'CREATE TABLE tableName (<FIELDSQL>);' ); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( - 'primaryField', - FieldDefinition::TYPE_INTEGER, - FieldDefinition::NOT_NULL, - FieldDefinition::NO_DEFAULT, - FieldDefinition::NO_ATTRIB - ), - new FieldDefinition( - 'textField', - FieldDefinition::TYPE_TEXT - ), - new FieldDefinition( - 'intField', - FieldDefinition::TYPE_INTEGER, - FieldDefinition::NOT_NULL, 42 - ), - ) + array( $this->newMockField( 'foo' ), $this->newMockField( 'bar' ), $this->newMockField( 'baz' ) ), + array( $this->newMockIndex( 'ham' ) ) ), - 'CREATE TABLE tableName (primaryField INTEGER NOT NULL, textField BLOB NULL, intField INTEGER DEFAULT 42 NOT NULL);' + 'CREATE TABLE tableName (<FIELDSQL>, <FIELDSQL>, <FIELDSQL>);' . PHP_EOL + . '<INDEXSQL>' ); $argLists[] = array( new TableDefinition( 'tableName', - array( - new FieldDefinition( - 'primaryField', - FieldDefinition::TYPE_INTEGER, - FieldDefinition::NOT_NULL, - FieldDefinition::NO_DEFAULT, - FieldDefinition::NO_ATTRIB - ), - new FieldDefinition( - 'textField', - FieldDefinition::TYPE_TEXT - ), - new FieldDefinition( - 'intField', - FieldDefinition::TYPE_INTEGER, - FieldDefinition::NOT_NULL, 42 - ), - ), - array( - new IndexDefinition( - 'indexName', - array( 'intField' => 0, 'textField' => 0 ), - IndexDefinition::TYPE_INDEX - ), - ) + array( $this->newMockField( 'foo' ), $this->newMockField( 'bar' ), $this->newMockField( 'baz' ) ), + array( $this->newMockIndex( 'ham' ), $this->newMockIndex( 'egg' ) ) ), - 'CREATE TABLE tableName (primaryField INTEGER NOT NULL, textField BLOB NULL, intField INTEGER DEFAULT 42 NOT NULL);' . PHP_EOL - . 'CREATE INDEX indexName ON tableName (intField,textField);' + 'CREATE TABLE tableName (<FIELDSQL>, <FIELDSQL>, <FIELDSQL>);' . PHP_EOL + . '<INDEXSQL>' . PHP_EOL + . '<INDEXSQL>' ); return $argLists; -- To view, visit https://gerrit.wikimedia.org/r/89530 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I47ec0b6e299b5ebb3899a6ba9a14f96447a60668 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseDatabase Gerrit-Branch: master Gerrit-Owner: Addshore <addshorew...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits