From 70df3a4bc7cbbe1abd542a53761b3755a2295853 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 5 Jun 2019 22:25:46 +0100 Subject: [PATCH] Remove DatabaseSqliteMock unit test class in favor of mocking Change-Id: Id22233359df25920c335e4945e606c6c3283f2a1 --- .../includes/db/DatabaseSqliteTest.php | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/tests/phpunit/includes/db/DatabaseSqliteTest.php b/tests/phpunit/includes/db/DatabaseSqliteTest.php index 63b24dc688..857988c899 100644 --- a/tests/phpunit/includes/db/DatabaseSqliteTest.php +++ b/tests/phpunit/includes/db/DatabaseSqliteTest.php @@ -1,9 +1,12 @@ markTestSkipped( 'No SQLite support detected' ); } - $this->db = DatabaseSqliteMock::newInstance(); + $this->db = $this->getMockBuilder( DatabaseSqlite::class ) + ->setConstructorArgs( [ [ + 'dbFilePath' => ':memory:', + 'schema' => false, + 'host' => false, + 'user' => false, + 'password' => false, + 'tablePrefix' => '', + 'cliMode' => true, + 'agent' => 'unit-tests', + 'flags' => DBO_DEFAULT, + 'variables' => [], + 'profiler' => null, + 'trxProfiler' => new TransactionProfiler(), + 'connLogger' => new NullLogger(), + 'queryLogger' => new NullLogger(), + 'errorLogger' => null, + 'deprecationLogger' => null, + ] ] )->setMethods( [ 'query' ] ) + ->getMock(); + $this->db->initConnection(); + $this->db->method( 'query' )->willReturn( true ); if ( version_compare( $this->db->getServerVersion(), '3.6.0', '<' ) ) { $this->markTestSkipped( "SQLite at least 3.6 required, {$this->db->getServerVersion()} found" ); } } + /** + * @param $sql + * @return string|string[]|null + */ private function replaceVars( $sql ) { + $wrapper = TestingAccessWrapper::newFromObject( $this->db ); // normalize spacing to hide implementation details - return preg_replace( '/\s+/', ' ', $this->db->replaceVars( $sql ) ); + return preg_replace( '/\s+/', ' ', $wrapper->replaceVars( $sql ) ); } private function assertResultIs( $expected, $res ) { @@ -105,7 +134,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase { $this->assertEquals( "CREATE TABLE /**/foo (foo_key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " - . "foo_bar TEXT, foo_name TEXT NOT NULL DEFAULT '', foo_int INTEGER, foo_int2 INTEGER );", + . "foo_bar TEXT, foo_name TEXT NOT NULL DEFAULT '', foo_int INTEGER, foo_int2 INTEGER );", $this->replaceVars( "CREATE TABLE /**/foo (foo_key int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, " . "foo_bar char(13), foo_name varchar(255) binary NOT NULL DEFAULT '', " @@ -240,24 +269,24 @@ class DatabaseSqliteTest extends MediaWikiTestCase { $db->query( 'CREATE TABLE a (a_1)', __METHOD__ ); $db->query( 'CREATE TABLE b (b_1, b_2)', __METHOD__ ); $db->insert( 'a', [ - [ 'a_1' => 1 ], - [ 'a_1' => 2 ], - [ 'a_1' => 3 ], - ], + [ 'a_1' => 1 ], + [ 'a_1' => 2 ], + [ 'a_1' => 3 ], + ], __METHOD__ ); $db->insert( 'b', [ - [ 'b_1' => 2, 'b_2' => 'a' ], - [ 'b_1' => 3, 'b_2' => 'b' ], - ], + [ 'b_1' => 2, 'b_2' => 'a' ], + [ 'b_1' => 3, 'b_2' => 'b' ], + ], __METHOD__ ); $db->deleteJoin( 'a', 'b', 'a_1', 'b_1', [ 'b_2' => 'a' ], __METHOD__ ); $res = $db->query( "SELECT * FROM a", __METHOD__ ); $this->assertResultIs( [ - [ 'a_1' => 1 ], - [ 'a_1' => 3 ], - ], + [ 'a_1' => 1 ], + [ 'a_1' => 3 ], + ], $res ); } @@ -522,23 +551,3 @@ class DatabaseSqliteTest extends MediaWikiTestCase { $this->assertTrue( $attributes[Database::ATTR_DB_LEVEL_LOCKING] ); } } - -class DatabaseSqliteMock extends DatabaseSqlite { - public static function newInstance( array $p = [] ) { - $p['dbFilePath'] = ':memory:'; - $p['schema'] = false; - - return Database::factory( 'SqliteMock', $p ); - } - - function query( $sql, $fname = '', $flags = 0 ) { - return true; - } - - /** - * Override parent visibility to public - */ - public function replaceVars( $s ) { - return parent::replaceVars( $s ); - } -} -- 2.20.1