|
- <?php
- /**
- * PhpUnderControl_PhalApiDBNotORM_Test
- *
- * 针对 ../../PhalApi/DB/NotORM.php PhalApi_DB_NotORM 类的PHPUnit单元测试
- *
- * @author: dogstar 20141122
- */
-
- require_once dirname(__FILE__) . '/../test_env.php';
-
- if (!class_exists('PhalApi_DB_NotORM')) {
- require dirname(__FILE__) . '/../../PhalApi/DB/NotORM.php';
- }
-
- $_GET['__sql__'] = 1;
-
- class PhpUnderControl_PhalApiDBNotORM_Test extends PHPUnit_Framework_TestCase
- {
- public $notorm;
-
- protected function setUp()
- {
- parent::setUp();
-
- $this->notorm = new PhalApi_DB_NotORM(DI()->config->get('dbs')/** , true **/);
- }
-
- protected function tearDown()
- {
- }
-
- /**
- * @dataProvider provideTable
- */
- public function testHere($table)
- {
- $demo = $this->notorm->$table;
- $this->assertNotNull($demo);
- //var_dump($demo);
-
- $rs = $demo->fetchAll();
- //var_dump($rs);
- $this->assertNotEmpty($rs);
- }
-
- public function provideTable()
- {
- return array(
- array('demo'),
- array('demo_0'),
- array('demo_1'),
- array('demo_3'),
- );
- }
-
- /**
- * @expectedException PhalApi_Exception
- */
- public function testNoMap()
- {
- $notorm = new PhalApi_DB_NotORM(array());
- $rs = $notorm->demo->fetchAll();
- }
-
- public function testNoDbRouter()
- {
- $rs = $this->notorm->demo->fetchAll();
- $this->assertNotEmpty($rs);
- }
-
- public function testUseDefaultDbKey()
- {
- $rs = $this->notorm->demo_10->fetchAll();
- $this->assertNotEmpty($rs);
- }
-
- public function testMultiSet()
- {
- $this->notorm->debug = true;
- $this->notorm->debug = false;
- }
-
- public function testTransactionCommit()
- {
- //Step 1: 开启事务
- $this->notorm->beginTransaction('DB_A');
-
- //Step 2: 数据库操作
- $this->notorm->demo->insert(array('name' => 'commit at ' . $_SERVER['REQUEST_TIME']));
- $this->notorm->demo->insert(array('name' => 'commit again at ' . $_SERVER['REQUEST_TIME']));
-
- //Step 3: 提交事务
- $this->notorm->commit('DB_A');
-
- }
-
- public function testTransactionRollback()
- {
- //Step 1: 开启事务
- $this->notorm->beginTransaction('DB_A');
-
- //Step 2: 数据库操作
- $this->notorm->demo->insert(array('name' => 'test rollback'));
-
- //Step 3: 回滚事务
- $this->notorm->rollback('DB_A');
-
- $rs = $this->notorm->demo->where('name', 'test rollback')->fetchRow();
- $this->assertEmpty($rs);
- }
-
- /**
- * @expectedException PhalApi_Exception_InternalServerError
- */
- public function testTransactionException()
- {
- $this->notorm->beginTransaction('NO_THIS_DB');
- }
-
- public function testFetchPairs()
- {
-
- $rs = $this->notorm->demo->limit(3)->fetchPairs('id', 'name');
- //var_dump($rs);
- foreach ($rs as $key => $row) {
- $this->assertTrue(is_string($row));
- }
-
- $rs = $this->notorm->demo->select('name')->limit(3)->fetchPairs('id');
- //var_dump($rs);
- foreach ($rs as $key => $row) {
- $this->assertTrue(is_array($row));
- $this->assertArrayHasKey('name', $row);
- }
- }
-
- public function testAllAggreation()
- {
- $rs = $this->notorm->demo->where('id > 10')->count('id');
- //var_dump($rs);
- $this->assertTrue(is_numeric($rs));
-
- $rs = $this->notorm->demo->where('id > 10')->min('id');
- $this->assertTrue(is_numeric($rs));
-
- $rs = $this->notorm->demo->where('id > 10')->max('id');
- //var_dump($rs);
- $this->assertTrue(is_numeric($rs));
-
- $rs = $this->notorm->demo->where('id > 10')->sum('id');
- //var_dump($rs);
- $this->assertTrue(is_numeric($rs));
- }
-
- public function testLimit()
- {
- $rs1 = $this->notorm->demo->limit(1, 2)->fetchAll();
- $rs2 = $this->notorm->demo->limit('1', 2)->fetchAll();
- $rs3 = $this->notorm->demo->limit(1, '2')->fetchAll();
- $rs4 = $this->notorm->demo->limit('1', '2')->fetchAll();
- //var_dump($rs1);
-
- $this->assertEquals($rs1, $rs2);
- $this->assertEquals($rs2, $rs3);
- $this->assertEquals($rs3, $rs4);
- }
-
- public function testLimitInQueryRows()
- {
- //int
- $sql = 'SELECT * FROM tbl_demo LIMIT :start, :len';
- $params = array(':start' => 1, ':len' => 2);
- $rows = $this->notorm->demo->queryRows($sql, $params);
- //var_dump($rows);
- $this->assertNotEmpty($rows);
-
- //not support yet
- return;
-
- //string
- $params = array(':start' => '1', ':len' => '2');
- $rows = $this->notorm->demo->queryRows($sql, $params);
- //var_dump($rows);
-
- //int and string
- $params = array(':start' => '1', ':len' => 2);
- $rows = $this->notorm->demo->queryRows($sql, $params);
- //var_dump($rows);
- }
-
- public function testHereAgain()
- {
- $rs = $this->notorm->demo->select('name')->where('id', 1)->fetchRows();
- $this->assertNotEmpty($rs);
-
- $rs = $this->notorm->demo->select('name')->where('id = ?', 1)->fetchRows();
- $this->assertNotEmpty($rs);
- }
-
- public function testQueryRowsWithBoundValuesAndInputOnly()
- {
- $sql = 'SELECT * FROM tbl_demo WHERE id = ? OR id = ?';
- $params = array(1, 2);
- $rows1 = $this->notorm->demo->queryRows($sql, $params);
- //var_dump($rows1);
-
- $sql = 'SELECT * FROM tbl_demo WHERE id = :id1 OR id = :id2';
- $params = array(':id2' => 2, ':id1' => 1);
- $rows2 = $this->notorm->demo->queryRows($sql, $params);
-
- $this->assertEquals($rows1, $rows2);
-
- //兼容不连续的下标
- $sql = 'SELECT * FROM tbl_demo WHERE id = ? OR id = ?';
- $params = array(5 => 1, 9 => 2);
- $rows3 = $this->notorm->demo->queryRows($sql, $params);
- $this->assertEquals($rows1, $rows3);
-
- //should not use in this way
- $sql = 'SELECT * FROM tbl_demo WHERE id = ? OR id = :id';
- $params = array(1, ':id' => 2);
- //$rows = $this->notorm->demo->queryRows($sql, $params);
- }
-
- public function testParametersMixed()
- {
- $sql = "SELECT * FROM tbl_user WHERE name LIKE ? AND create_date >= '2015-10-1 10:00:00' AND create_date < '2015-12-31 10:00:00'";
- $params = array('%a%');
- $rows = $this->notorm->demo->queryRows($sql, $params);
- $this->assertNotEmpty($rows);
- }
-
- public function testNoKeyIndexAgain()
- {
- $notorm = new PhalApi_DB_NotORM(DI()->config->get('dbs')/** , true **/);
- $rs = $notorm->demo->order('id DESC')->limit(1, 2)->fetchAll();
- //var_dump($rs);
- //echo (json_encode($rs)), "\n\n";
- $keys = array_keys($rs);
- $this->assertEquals(0, $keys[0]);
-
- $notorm = new PhalApi_DB_NotORM(DI()->config->get('dbs')/** , true **/);
- $notorm->keepPrimaryKeyIndex();
- $rs = $notorm->demo->order('id DESC')->limit(1, 2)->fetchAll();
- //var_dump($rs);
- //echo (json_encode($rs)), "\n\n";
- $keys = array_keys($keys);
- $this->assertGreaterThan($keys[0], $keys[1]);
- $this->assertEquals(0, $keys[0]);
- $this->assertEquals(1, $keys[1]);
- }
-
- public function testInsertMulti()
- {
- $rows = array(
- array('name' => 'A君', 'age' => 12, 'note' => 'AA'),
- array('name' => 'B君', 'age' => 14, 'note' => 'BB'),
- array('name' => 'C君', 'age' => 16, 'note' => 'CC'),
- );
- $rs = $this->notorm->user->insert_multi($rows);
- }
-
- public function testFetchNothing()
- {
- $rs = $this->notorm->user->where('id', 4040404)->fetch();
- $this->assertFalse($rs);
-
- $rs = $this->notorm->user->where('id', 4040404)->fetchOne();
- $this->assertFalse($rs);
-
- $rs = $this->notorm->user->where('id', 4040404)->fetchAll();
- $this->assertEquals(array(), $rs);
- }
-
- public function testDisConnect()
- {
- // first, none to disconnect
- $this->notorm->disconnect();
-
- // second, disconnect after some query
- $rs = $this->notorm->user->where('id', 4040404)->fetch();
- $this->notorm->disconnect();
-
- // again
- $rs = $this->notorm->user->where('id', 4040404)->fetch();
- $this->notorm->disconnect();
-
- $this->notorm->disconnect();
- }
- }
|