You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
7.7 KiB
206 lines
7.7 KiB
<?php
|
|
|
|
/*
|
|
* @copyright NetMonsters <team@netmonsters.ru>
|
|
* @link http://netmonsters.ru
|
|
* @package Majestic
|
|
* @subpackage UnitTests
|
|
* @since 2011-11-7
|
|
*
|
|
* Unit tests for MySQLiDriver class
|
|
*/
|
|
|
|
require_once dirname(__FILE__) . '/../../model/Db.php';
|
|
require_once dirname(__FILE__) . '/../../model/DbStatement.php';
|
|
require_once dirname(__FILE__) . '/../../model/MySQLiStatement.php';
|
|
require_once dirname(__FILE__) . '/../../model/DbDriver.php';
|
|
require_once dirname(__FILE__) . '/../../model/SqlDbDriver.php';
|
|
require_once dirname(__FILE__) . '/../../model/MySQLiDriver.php';
|
|
require_once dirname(__FILE__) . '/../../exception/GeneralException.php';
|
|
|
|
class MySQLiDriverTest extends PHPUnit_Extensions_Database_TestCase
|
|
{
|
|
static private $pdo = null;
|
|
|
|
private $conn = null;
|
|
|
|
private $conf = array();
|
|
|
|
|
|
|
|
protected function getConnection()
|
|
{
|
|
if ($this->conn === null) {
|
|
if (self::$pdo == null) {
|
|
self::$pdo = new PDO($GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD']);
|
|
}
|
|
$this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
|
|
}
|
|
|
|
$this->conf = array('hostname' => 'localhost', 'database' => $GLOBALS['DB_DBNAME'], 'username' => $GLOBALS['DB_USER'], 'password' => $GLOBALS['DB_PASSWD']);
|
|
|
|
return $this->conn;
|
|
}
|
|
|
|
protected function getDataSet()
|
|
{
|
|
return $this->createFlatXMLDataSet(dirname(__FILE__) . '/testData.xml');
|
|
}
|
|
|
|
public function run(PHPUnit_Framework_TestResult $result = NULL)
|
|
{
|
|
$this->setPreserveGlobalState(false);
|
|
return parent::run($result);
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testDriver()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$queryTable = $this->getConnection()->createQueryTable(
|
|
'table', 'SELECT * FROM `table`'
|
|
);
|
|
$expectedTable = $this->createFlatXmlDataSet(dirname(__FILE__) . '/testData.xml')
|
|
->getTable("table");
|
|
$this->assertTablesEqual($expectedTable, $queryTable);
|
|
|
|
$this->assertSame(1, $driver->insert('table', array('id' => 3, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20')));
|
|
$this->assertSame(3, $this->getConnection()->getRowCount('table'));
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testGetConnection()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
$this->assertInstanceOf('mysqli', $driver->getConnection());
|
|
$this->assertTrue($driver->isConnected());
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testGetConnectionWrongConfig()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
$this->conf['database'] = 'nodb';
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$this->setExpectedException('GeneralException', 'Unknown database \'nodb\'');
|
|
|
|
$this->assertNull('mysqli', $driver->getConnection());
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testDisconnect()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$driver->disconnect();
|
|
$this->assertAttributeEquals(null, 'connection', $driver);
|
|
|
|
$this->assertInstanceOf('mysqli', $driver->getConnection());
|
|
$this->assertAttributeInstanceOf('mysqli', 'connection', $driver);
|
|
$driver->disconnect();
|
|
$this->assertAttributeEquals(null, 'connection', $driver);
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testInsert()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$this->assertSame(1, $driver->insert('table', array('id' => 3, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20')));
|
|
$this->assertSame(3, $driver->getInsertId());
|
|
$this->assertSame(1, $driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20')));
|
|
$this->assertSame(4, $driver->getInsertId());
|
|
$this->assertSame(1, $driver->insert('table', array('id' => null, 'user' => true, 'content' => 'some test content', 'created' => '2011-11-07 11:35:20')));
|
|
$this->assertSame(5, $driver->getInsertId());
|
|
$this->assertSame(2, $driver->insert('table', array('id' => '5', 'user' => true, 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'), array('id' => 8)));
|
|
$this->assertSame(8, $driver->getInsertId());
|
|
}
|
|
|
|
/**
|
|
* @TODO: DbDriver::getInsertId($table = null, $key = null) - params not used
|
|
* @group MySQL
|
|
*/
|
|
public function testGetInsertId()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$this->assertSame(1, $driver->insert('table', array('id' => 3, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20')));
|
|
$this->assertSame(3, $driver->getInsertId());
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testTransaction()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$queryTable = $this->getConnection()->createQueryTable(
|
|
'table', 'SELECT * FROM `table`'
|
|
);
|
|
$expectedTable = $this->createFlatXmlDataSet(dirname(__FILE__) . '/testData.xml')
|
|
->getTable("table");
|
|
$this->assertTablesEqual($expectedTable, $queryTable);
|
|
|
|
$driver->getConnection();
|
|
$driver->beginTransaction();
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
|
|
$queryTable = $this->getConnection()->createQueryTable(
|
|
'table', 'SELECT * FROM `table`'
|
|
);
|
|
$driver->commit();
|
|
$expectedTable = $this->createFlatXmlDataSet(dirname(__FILE__) . '/testDataAfterCommit.xml')
|
|
->getTable("table");
|
|
$this->assertTablesEqual($expectedTable, $queryTable);
|
|
}
|
|
/**
|
|
* @group MySQL
|
|
*/
|
|
public function testRollback()
|
|
{
|
|
Config::set('DEBUG', false);
|
|
|
|
$driver = new MySQLiDriver($this->conf);
|
|
|
|
$queryTable = $this->getConnection()->createQueryTable(
|
|
'table', 'SELECT * FROM `table`'
|
|
);
|
|
$expectedTable = $this->createFlatXmlDataSet(dirname(__FILE__) . '/testData.xml')
|
|
->getTable("table");
|
|
$this->assertTablesEqual($expectedTable, $queryTable);
|
|
|
|
$driver->getConnection();
|
|
$driver->beginTransaction();
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->insert('table', array('id' => null, 'user' => 'tony', 'content' => 'some test content', 'created' => '2011-11-07 11:35:20'));
|
|
$driver->rollback();
|
|
$queryTable = $this->getConnection()->createQueryTable(
|
|
'table', 'SELECT * FROM `table`'
|
|
);
|
|
$this->assertTablesEqual($expectedTable, $queryTable);
|
|
}
|
|
}
|