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

Reply via email to