Jeroen De Dauw has submitted this change and it was merged.
Change subject: Inject some Mocks in tests
......................................................................
Inject some Mocks in tests
Change-Id: I47ec0b6e299b5ebb3899a6ba9a14f96447a60668
---
M src/MediaWiki/MWTableBuilderBuilder.php
M src/MySQL/MySQLSchemaSqlBuilder.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
7 files changed, 103 insertions(+), 129 deletions(-)
Approvals:
Jeroen De Dauw: Looks good to me, approved
jenkins-bot: Verified
diff --git a/src/MediaWiki/MWTableBuilderBuilder.php
b/src/MediaWiki/MWTableBuilderBuilder.php
index b416980..ec7e160 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;
/**
@@ -65,14 +68,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->newEscaper(),
$this->newTableNameFormatter() )
);
}
diff --git a/src/MySQL/MySQLSchemaSqlBuilder.php
b/src/MySQL/MySQLSchemaSqlBuilder.php
index 06fc9c0..5b737ba 100644
--- a/src/MySQL/MySQLSchemaSqlBuilder.php
+++ b/src/MySQL/MySQLSchemaSqlBuilder.php
@@ -37,7 +37,7 @@
public function getRemoveFieldSql( $tableName, $fieldName ) {
$tableName = $this->tableNameFormatter->formatTableName(
$tableName );
$fieldName = $this->escaper->getEscapedIdentifier( $fieldName );
- return "ALTER TABLE {$tableName} DROP {$fieldName}"; //todo
escape $fieldName?
+ return "ALTER TABLE {$tableName} DROP {$fieldName}";
}
/**
diff --git a/src/MySQL/MySQLTableSqlBuilder.php
b/src/MySQL/MySQLTableSqlBuilder.php
index c32e488..b9bb24c 100644
--- a/src/MySQL/MySQLTableSqlBuilder.php
+++ b/src/MySQL/MySQLTableSqlBuilder.php
@@ -21,21 +21,20 @@
class MySQLTableSqlBuilder extends TableSqlBuilder {
protected $dbName;
- protected $escaper;
protected $tableNameFormatter;
protected $fieldSqlBuilder;
/**
* @param string $dbName
- * @param Escaper $fieldValueEscaper
+ * @param Escaper $escaper
* @param TableNameFormatter $tableNameFormatter
+ * @param MySQLFieldSqlBuilder $fieldSqlBuilder
*/
- public function __construct( $dbName, Escaper $fieldValueEscaper,
TableNameFormatter $tableNameFormatter ) {
+ public function __construct( $dbName, Escaper $escaper,
TableNameFormatter $tableNameFormatter, MySQLFieldSqlBuilder $fieldSqlBuilder )
{
$this->dbName = $dbName;
- $this->escaper = $fieldValueEscaper;
+ $this->escaper = $escaper;
$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 71378cc..51ca72c 100644
--- a/src/SQLite/SQLiteSchemaSqlBuilder.php
+++ b/src/SQLite/SQLiteSchemaSqlBuilder.php
@@ -7,7 +7,6 @@
use Wikibase\Database\Schema\Definitions\FieldDefinition;
use Wikibase\Database\Schema\Definitions\IndexDefinition;
use Wikibase\Database\Schema\SchemaModificationSqlBuilder;
-use Wikibase\Database\Schema\TableDefinitionReader;
use Wikibase\Database\TableNameFormatter;
/**
@@ -26,12 +25,17 @@
protected $tableDefinitionReader;
protected $tableSqlBuilder;
- public function __construct( Escaper $escaper, TableNameFormatter
$tableNameFormatter, TableDefinitionReader $definitionReader ) {
+ public function __construct( Escaper $escaper, TableNameFormatter
$tableNameFormatter, SQLiteTableDefinitionReader $definitionReader ) {
$this->escaper = $escaper;
$this->fieldSqlBuilder = new SQLiteFieldSqlBuilder( $escaper );
$this->tableNameFormatter = $tableNameFormatter;
$this->tableDefinitionReader = $definitionReader;
- $this->tableSqlBuilder = new SQLiteTableSqlBuilder( $escaper,
$tableNameFormatter );
+ //todo inject SQLiteTableSqlBuilder to make testing easier?
+ $this->tableSqlBuilder = new SQLiteTableSqlBuilder(
+ $tableNameFormatter,
+ new SQLiteFieldSqlBuilder( $escaper ),
+ new SQLiteIndexSqlBuilder( $escaper,
$tableNameFormatter )
+ );
}
/**
diff --git a/src/SQLite/SQLiteTableSqlBuilder.php
b/src/SQLite/SQLiteTableSqlBuilder.php
index 03d2b87..c089243 100644
--- a/src/SQLite/SQLiteTableSqlBuilder.php
+++ b/src/SQLite/SQLiteTableSqlBuilder.php
@@ -2,8 +2,6 @@
namespace Wikibase\Database\SQLite;
-use RuntimeException;
-use Wikibase\Database\Escaper;
use Wikibase\Database\Schema\Definitions\FieldDefinition;
use Wikibase\Database\Schema\Definitions\IndexDefinition;
use Wikibase\Database\Schema\Definitions\TableDefinition;
@@ -20,21 +18,19 @@
*/
class SQLiteTableSqlBuilder extends TableSqlBuilder {
- protected $escaper;
protected $tableNameFormatter;
protected $fieldSqlBuilder;
protected $indexSqlBuilder;
/**
- * @param Escaper $fieldValueEscaper
* @param TableNameFormatter $tableNameFormatter
+ * @param SQLiteFieldSqlBuilder $fieldBuilder
+ * @param SQLiteIndexSqlBuilder $indexBuilder
*/
- public function __construct( Escaper $fieldValueEscaper,
TableNameFormatter $tableNameFormatter ) {
- $this->escaper = $fieldValueEscaper;
+ public function __construct( TableNameFormatter $tableNameFormatter,
SQLiteFieldSqlBuilder $fieldBuilder, SQLiteIndexSqlBuilder $indexBuilder ) {
$this->tableNameFormatter = $tableNameFormatter;
- //TODO inject sqlbuilders
- $this->fieldSqlBuilder = new SQLiteFieldSqlBuilder(
$this->escaper );
- $this->indexSqlBuilder = new SQLiteIndexSqlBuilder(
$this->escaper, $tableNameFormatter );
+ $this->fieldSqlBuilder = $fieldBuilder;
+ $this->indexSqlBuilder = $indexBuilder;
}
/**
diff --git a/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php
b/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php
index fbbc73c..7562b83 100644
--- a/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php
+++ b/tests/phpunit/MySQL/MySQLTableSqlBuilderTest.php
@@ -29,18 +29,13 @@
}
protected function newInstance() {
-
$mockEscaper = $this->getMock( 'Wikibase\Database\Escaper' );
- $mockEscaper->expects( $this->any() )
- ->method( 'getEscapedValue' )
- ->will( $this->returnArgument(0) );
$mockEscaper->expects( $this->any() )
->method( 'getEscapedValue' )
- ->will( $this->returnCallback( function( $value ) {
- return '|' . $value . '|';
+ ->will( $this->returnCallback( function( $input ) {
+ return "|$input|";
} ) );
-
$mockEscaper->expects( $this->any() )
->method( 'getEscapedIdentifier' )
->will( $this->returnCallback( function( $value ) {
@@ -52,12 +47,18 @@
->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
);
}
@@ -72,72 +73,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
@@ -147,7 +129,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 61c0f96..4e6034a 100644
--- a/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php
+++ b/tests/phpunit/SQLite/SQLiteTableSqlBuilderTest.php
@@ -28,24 +28,30 @@
protected function newInstance() {
- $mockEscaper = $this->getMock( 'Wikibase\Database\Escaper' );
- $mockEscaper->expects( $this->any() )
- ->method( 'getEscapedValue' )
- ->will( $this->returnArgument(0) );
- $mockEscaper->expects( $this->any() )
- ->method( 'getEscapedIdentifier' )
- ->will( $this->returnCallback( function( $value ) {
- return '-' . $value . '-';
- } ) );
$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
);
}
@@ -60,75 +66,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: merged
Gerrit-Change-Id: I47ec0b6e299b5ebb3899a6ba9a14f96447a60668
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits