From fb111e6d958fdf56352db66e144134241abbacf8 Mon Sep 17 00:00:00 2001 From: Klaus Weidenbach Date: Sun, 10 Dec 2017 01:29:49 +0100 Subject: :white_check_mark: Unit Test for dba_pdo driver class. --- tests/phpunit-pgsql.xml | 10 ++ tests/phpunit.xml.dist | 10 ++ tests/travis/prepare_mysql.sh | 4 +- tests/travis/prepare_pgsql.sh | 9 +- tests/unit/DatabaseTestCase.php | 68 ++++++++++++ tests/unit/includes/dba/_files/account.yml | 9 ++ tests/unit/includes/dba/dba_pdoTest.php | 167 +++++++++++++++++++++++++++++ 7 files changed, 273 insertions(+), 4 deletions(-) create mode 100644 tests/unit/DatabaseTestCase.php create mode 100644 tests/unit/includes/dba/_files/account.yml create mode 100644 tests/unit/includes/dba/dba_pdoTest.php diff --git a/tests/phpunit-pgsql.xml b/tests/phpunit-pgsql.xml index ec4a6fc2d..d95c4897b 100644 --- a/tests/phpunit-pgsql.xml +++ b/tests/phpunit-pgsql.xml @@ -32,4 +32,14 @@ highLowerBound="70"/> + + + + + + + + + diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist index a22317b08..7b9c1d563 100644 --- a/tests/phpunit.xml.dist +++ b/tests/phpunit.xml.dist @@ -35,4 +35,14 @@ highLowerBound="70"/> + + + + + + + + + diff --git a/tests/travis/prepare_mysql.sh b/tests/travis/prepare_mysql.sh index 095ad7e25..9fd79c1ab 100755 --- a/tests/travis/prepare_mysql.sh +++ b/tests/travis/prepare_mysql.sh @@ -42,8 +42,8 @@ mysql $PROTO -e "SELECT @@sql_mode;" # Create Hubzilla database mysql $PROTO -u root -e "CREATE DATABASE IF NOT EXISTS hubzilla;"; -mysql $PROTO -u root -e "CREATE USER 'hubzilla'@'localhost' IDENTIFIED BY 'hubzilla';" -mysql $PROTO -u root -e "GRANT ALL ON hubzilla.* TO 'hubzilla'@'localhost';" +mysql $PROTO -u root -e "CREATE USER 'hubzilla'@'%' IDENTIFIED BY 'hubzilla';" +mysql $PROTO -u root -e "GRANT ALL ON hubzilla.* TO 'hubzilla'@'%';" # Import table structure mysql $PROTO -u root hubzilla < ./install/schema_mysql.sql diff --git a/tests/travis/prepare_pgsql.sh b/tests/travis/prepare_pgsql.sh index 63c7388cb..3c38ef60c 100755 --- a/tests/travis/prepare_pgsql.sh +++ b/tests/travis/prepare_pgsql.sh @@ -34,10 +34,15 @@ psql -U postgres -c "SELECT VERSION();" # Create Hubzilla database psql -U postgres -c "DROP DATABASE IF EXISTS hubzilla;" -psql -U postgres -c "CREATE DATABASE hubzilla;" +psql -U postgres -v ON_ERROR_STOP=1 <<-EOSQL + CREATE USER hubzilla WITH PASSWORD 'hubzilla'; + CREATE DATABASE hubzilla; + ALTER DATABASE hubzilla OWNER TO hubzilla; + GRANT ALL PRIVILEGES ON DATABASE hubzilla TO hubzilla; +EOSQL # Import table structure -psql -U postgres -v ON_ERROR_STOP=1 hubzilla < ./install/schema_postgres.sql +psql -U hubzilla -v ON_ERROR_STOP=1 hubzilla < ./install/schema_postgres.sql # Show databases and tables psql -U postgres -l diff --git a/tests/unit/DatabaseTestCase.php b/tests/unit/DatabaseTestCase.php new file mode 100644 index 000000000..18c1cfb17 --- /dev/null +++ b/tests/unit/DatabaseTestCase.php @@ -0,0 +1,68 @@ +conn === null) { + if (self::$pdo === null) { + $dsn = \getenv('hz_db_scheme') . ':host=' . \getenv('hz_db_server') + . ';port=' . \getenv('hz_db_port') . ';dbname=' . \getenv('hz_db_database'); + + self::$pdo = new \PDO($dsn, \getenv('hz_db_user'), \getenv('hz_db_pass')); + } + $this->conn = $this->createDefaultDBConnection(self::$pdo, \getenv('hz_db_database')); + } + + return $this->conn; + } +} diff --git a/tests/unit/includes/dba/_files/account.yml b/tests/unit/includes/dba/_files/account.yml new file mode 100644 index 000000000..344bdb799 --- /dev/null +++ b/tests/unit/includes/dba/_files/account.yml @@ -0,0 +1,9 @@ +account: + - + account_id: 42 + account_email: "hubzilla@example.com" + account_language: "no" + - + account_id: 43 + account_email: "hubzilla@example.org" + account_language: "de" diff --git a/tests/unit/includes/dba/dba_pdoTest.php b/tests/unit/includes/dba/dba_pdoTest.php new file mode 100644 index 000000000..ce6e1ffd6 --- /dev/null +++ b/tests/unit/includes/dba/dba_pdoTest.php @@ -0,0 +1,167 @@ +dba = new \dba_pdo( + \getenv('hz_db_server'), + \getenv('hz_db_scheme'), + \getenv('hz_db_port'), + \getenv('hz_db_user'), + \getenv('hz_db_pass'), + \getenv('hz_db_database') + ); + } + protected function assertPreConditions() { + $this->assertSame('pdo', $this->dba->getdriver(), "Driver is expected to be 'pdo'."); + $this->assertInstanceOf('dba_driver', $this->dba); + $this->assertTrue($this->dba->connected, 'Pre condition failed, DB is not connected.'); + $this->assertInstanceOf('PDO', $this->dba->db); + } + protected function tearDown() { + $this->dba = null; + } + + + /** + * @group mysql + */ + public function testQuoteintervalOnMysql() { + $this->assertSame('value', $this->dba->quote_interval('value')); + } + /** + * @group postgresql + */ + public function testQuoteintervalOnPostgresql() { + $this->assertSame("'value'", $this->dba->quote_interval('value')); + } + + /** + * @group mysql + */ + public function testGenerateMysqlConcatSql() { + $this->assertSame('GROUP_CONCAT(DISTINCT field SEPARATOR \';\')', $this->dba->concat('field', ';')); + $this->assertSame('GROUP_CONCAT(DISTINCT field2 SEPARATOR \' \')', $this->dba->concat('field2', ' ')); + } + /** + * @group postgresql + */ + public function testGeneratePostgresqlConcatSql() { + $this->assertSame('string_agg(field,\';\')', $this->dba->concat('field', ';')); + $this->assertSame('string_agg(field2,\' \')', $this->dba->concat('field2', ' ')); + } + + + public function testConnectToSqlServer() { + // connect() is done in dba_pdo constructor which is called in setUp() + $this->assertTrue($this->dba->connected); + } + + /** + * @depends testConnectToSqlServer + */ + public function testCloseSqlServerConnection() { + $this->dba->close(); + + $this->assertNull($this->dba->db); + $this->assertFalse($this->dba->connected); + } + + /** + * @depends testConnectToSqlServer + */ + public function testSelectQueryShouldReturnArray() { + $ret = $this->dba->q('SELECT * FROM account'); + + $this->assertTrue(is_array($ret)); + } + + /** + * @depends testConnectToSqlServer + */ + public function testInsertQueryShouldReturnPdostatement() { + // Fixture account.yml adds two entries to account table + $this->assertEquals(2, $this->getConnection()->getRowCount('account'), 'Pre-Condition'); + + $ret = $this->dba->q('INSERT INTO account + (account_id, account_email, account_language) + VALUES (100, \'insert@example.com\', \'de\') + '); + $this->assertInstanceOf('PDOStatement', $ret); + + $this->assertEquals(3, $this->getConnection()->getRowCount('account'), 'Inserting failed'); + } + + + public function testConnectToWrongSqlServer() { + $nodba = new \dba_pdo('wrongserver', + \getenv('hz_db_scheme'), \getenv('hz_db_port'), + \getenv('hz_db_user'), \getenv('hz_db_pass'), + \getenv('hz_db_database') + ); + + $this->assertSame('pdo', $nodba->getdriver()); + $this->assertInstanceOf('dba_pdo', $nodba); + $this->assertFalse($nodba->connected); + $this->assertNull($nodba->db); + + $this->assertFalse($nodba->q('SELECT * FROM account')); + } + +} -- cgit v1.2.3