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

Reply via email to