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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits