Ticket #36: db_tests.patch
-
TestConfiguration.php.dist
old new 30 30 31 31 32 32 /** 33 * @todo Pgsql, Mssql, etc. 33 * Zend_Db_Adapter_Pdo_Mssql 34 34 */ 35 define('TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_ENABLED', false); 36 define('TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_HOSTNAME', '127.0.0.1'); 37 define('TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_USERNAME', null); 38 define('TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_PASSWORD', null); 39 define('TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_DATABASE', 'test'); 35 40 36 41 37 42 /** 43 * @todo Pgsql, etc. 44 */ 45 46 47 /** 38 48 * Zend_HttpClient 39 49 * 40 50 * IMPORTANT: If this option is enabled, the Zend_HttpClient test suite -
Zend/AllTests.php
old new 15 15 require_once 'Zend/Pdf/AllTests.php'; 16 16 require_once 'Zend/UriTest.php'; 17 17 require_once 'Zend/Uri/AllTests.php'; 18 require_once 'Zend/Db/AllTests.php'; 18 19 19 20 class Zend_AllTests 20 21 { … … 36 37 $suite->addTestSuite('Zend_UriTest'); 37 38 $suite->addTest(Zend_Uri_AllTests::suite()); 38 39 40 $suite->addTestSuite('Zend_DbTest'); 41 $suite->addTest(Zend_Db_AllTests::suite()); 42 39 43 return $suite; 40 44 } 41 45 } -
Zend/Db/Adapter/Pdo/MssqlTest.php
old new 1 <?php 2 /** 3 * @package Zend_Db 4 * @subpackage UnitTests 5 */ 6 7 /** 8 * Common class is DB independant 9 */ 10 require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Common.php'; 11 12 13 /** 14 * @package Zend_Db_Adapter_Pdo_MssqlTest 15 * @subpackage UnitTests 16 */ 17 class Zend_Db_Adapter_Pdo_MssqlTest extends Zend_Db_Adapter_Pdo_Common 18 { 19 20 function getCreatTableSQL() 21 { 22 return 'CREATE TABLE '. self::TableName . ' 23 (id int IDENTITY, title varchar(100), subTitle varchar (100), body text, date_created datetime)'; 24 } 25 26 function getDriver() 27 { 28 return 'pdoMssql'; 29 } 30 31 function getParams() 32 { 33 $params = array ('host' => TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_HOSTNAME, 34 'username' => TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_USERNAME, 35 'password' => TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_PASSWORD, 36 'dbname' => TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_DATABASE); 37 38 return $params; 39 } 40 41 42 public function testQuote() 43 { 44 // test double quotes are fine 45 $value = $this->_db->quote('St John"s Wort'); 46 $this->assertEquals("'St John\"s Wort'", $value); 47 48 // test that single quotes are escaped with another single quote 49 $value = $this->_db->quote('St John\'s Wort'); 50 $this->assertEquals("'St John''s Wort'", $value); 51 52 // quote an array 53 $value = $this->_db->quote(array("it's", 'all', 'right!')); 54 $this->assertEquals("'it''s', 'all', 'right!'", $value); 55 } 56 57 public function testQuoteInto() 58 { 59 // test double quotes are fine 60 $value = $this->_db->quoteInto('id=?', 'St John"s Wort'); 61 $this->assertEquals("id='St John\"s Wort'", $value); 62 63 // test that single quotes are escaped with another single quote 64 $value = $this->_db->quoteInto('id = ?', 'St John\'s Wort'); 65 $this->assertEquals("id = 'St John''s Wort'", $value); 66 } 67 68 public function testQuoteIdentifier() 69 { 70 $value = $this->_db->quoteIdentifier('table_name'); 71 $this->assertEquals("[table_name]", $value); 72 73 $value = $this->_db->quoteIdentifier('table_[]_name'); 74 $this->assertEquals("[table_[]]_name]", $value); 75 } 76 77 } -
Zend/Db/Adapter/Pdo/MysqlTest.php
old new 1 <?php 2 /** 3 * @package Zend_Db 4 * @subpackage UnitTests 5 */ 6 7 /** 8 * Common class is DB independant 9 */ 10 require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Common.php'; 11 12 13 /** 14 * @package Zend_Db_Adapter_Pdo_MysqlTest 15 * @subpackage UnitTests 16 */ 17 class Zend_Db_Adapter_Pdo_MysqlTest extends Zend_Db_Adapter_Pdo_Common 18 { 19 20 function getCreatTableSQL() 21 { 22 return 'CREATE TABLE '. self::TableName . ' 23 (id int IDENTITY, title varchar(100), subTitle varchar (100), body text, date_created datetime)'; 24 } 25 26 function getDriver() 27 { 28 return 'pdoMysql'; 29 } 30 31 function getParams() 32 { 33 $params = array ('host' => TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_HOSTNAME, 34 'username' => TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_USERNAME, 35 'password' => TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_PASSWORD, 36 'dbname' => TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_DATABASE); 37 38 return $params; 39 } 40 41 42 public function testQuote() 43 { 44 // test double quotes are fine 45 $value = $this->_db->quote('St John"s Wort'); 46 $this->assertEquals("'St John\"s Wort'", $value); 47 48 // test that single quotes are escaped with another single quote 49 $value = $this->_db->quote('St John\'s Wort'); 50 $this->assertEquals("'St John''s Wort'", $value); 51 52 // quote an array 53 $value = $this->_db->quote(array("it's", 'all', 'right!')); 54 $this->assertEquals("'it''s', 'all', 'right!'", $value); 55 } 56 57 public function testQuoteInto() 58 { 59 // test double quotes are fine 60 $value = $this->_db->quoteInto('id=?', 'St John"s Wort'); 61 $this->assertEquals("id='St John\"s Wort'", $value); 62 63 // test that single quotes are escaped with another single quote 64 $value = $this->_db->quoteInto('id = ?', 'St John\'s Wort'); 65 $this->assertEquals("id = 'St John''s Wort'", $value); 66 } 67 68 public function testQuoteIdentifier() 69 { 70 $value = $this->_db->quoteIdentifier('table_name'); 71 $this->assertEquals("[table_name]", $value); 72 73 $value = $this->_db->quoteIdentifier('table_[]_name'); 74 $this->assertEquals("[table_[]]_name]", $value); 75 } 76 77 } -
Zend/Db/Adapter/Pdo/Common.php
old new 1 <?php 2 /** 3 * @package Zend_Db 4 * @subpackage UnitTests 5 */ 6 7 /** 8 * Common class is DB independant 9 */ 10 require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Common.php'; 11 12 13 14 15 /** 16 * @package Zend_Db_Adapter_Pdo_Common 17 * @subpackage UnitTests 18 */ 19 abstract class Zend_Db_Adapter_Pdo_Common extends Zend_Db_Adapter_Common 20 { 21 } -
Zend/Db/Adapter/Common.php
old new 1 <?php 2 /** 3 * @package Zend_Db 4 * @subpackage UnitTests 5 */ 6 7 /** 8 * Zend_Db 9 */ 10 require_once 'Zend/Db.php'; 11 12 /** 13 * PHPUnit2 test case 14 */ 15 require_once 'PHPUnit2/Framework/TestCase.php'; 16 17 18 /** 19 * @package Zend_Db_Adapter_Pdo_Common 20 * @subpackage UnitTests 21 */ 22 abstract class Zend_Db_Adapter_Common extends PHPUnit2_Framework_TestCase 23 { 24 const TableName = 'zf_test_table'; 25 26 27 abstract function getCreatTableSQL(); 28 abstract function getParams(); 29 abstract function getDriver(); 30 31 /** 32 * @var Zend_Db_Adapter_Pdo_Abstract 33 */ 34 protected $_db; 35 36 protected function getDropTableSQL() 37 { 38 return 'DROP TABLE ' . self::TableName; 39 } 40 41 protected function createTestTable() 42 { 43 $this->_db->query($this->getCreatTableSQL()); 44 45 $sql = 'INSERT INTO ' . self::TableName . " (title, subTitle, body, date_created) 46 VALUES ('News Item 1', 'Sub title 1', 'This is body 1', '2006-05-01 11:11:11')"; 47 $this->_db->query($sql); 48 49 $sql = 'INSERT INTO ' . self::TableName . " (title, subTitle, body, date_created) 50 VALUES ('News Item 2', 'Sub title 2', 'This is body 2', '2006-05-02 12:12:12')"; 51 $this->_db->query($sql); 52 } 53 54 function setUp() 55 { 56 // open a new connection 57 $this->_db = Zend_Db::factory('pdoMssql', $this->getParams()); 58 59 // create a test table and populate it 60 $this->createTestTable(); 61 } 62 63 function tearDown() 64 { 65 // drop test table 66 $this->_db->query($this->getDropTableSQL()); 67 68 // close the PDO connection 69 $connection = $this->_db->getConnection(); 70 $connection = null; 71 $this->_db = null; 72 } 73 74 75 function testFetchAll() 76 { 77 $result = $this->_db->query('SELECT * FROM ' . self::TableName . ' WHERE date_created > :placeholder', 78 array('placeholder' => '2006-01-01') 79 ); 80 81 $rows = $result->fetchAll(); 82 $this->assertEquals(2, count($rows)); 83 $this->assertEquals('1', $rows[0]['id']); 84 } 85 86 function testFieldNamesAreLowercase() 87 { 88 $result = $this->_db->query('SELECT * FROM ' . self::TableName . ' WHERE date_created > :placeholder', 89 array('placeholder' => '2006-01-01') 90 ); 91 92 // use the PDOStatement $result to fetch all rows as an array 93 $row = $result->fetch(); 94 95 $this->assertEquals(5, count($row)); // correct number of fields 96 $this->assertEquals('1', $row['id']); // correct data 97 $this->assertTrue(array_key_exists('subtitle', $row)); // "subTitle" is now "subtitle" 98 $this->assertFalse(array_key_exists('subTitle', $row)); // "subTitle" is not a key 99 100 } 101 102 function testInsert() 103 { 104 $row = array ( 105 'title' => 'News Item 3', 106 'subTitle' => 'Sub title 3', 107 'body' => 'This is body 1', 108 'date_created' => '2006-05-03 13:13:13' 109 ); 110 $rows_affected = $this->_db->insert(self::TableName, $row); 111 $last_insert_id = $this->_db->lastInsertId(); 112 $this->assertEquals(3, $last_insert_id); // correct id has been set 113 } 114 115 } -
Zend/Db/AllTests.php
old new 1 <?php 2 if (!defined('PHPUnit2_MAIN_METHOD')) { 3 define('PHPUnit2_MAIN_METHOD', 'Zend_Db_AllTests::main'); 4 } 5 6 require_once 'PHPUnit2/Framework/TestSuite.php'; 7 //require_once 'PHPUnit2/TextUI/TestRunner.php'; 8 9 if(TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_ENABLED == true) { 10 require_once 'Zend/Db/Adapter/Pdo/MssqlTest.php'; 11 } 12 if(TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_ENABLED == true) { 13 require_once 'Zend/Db/Adapter/Pdo/MysqlTest.php'; 14 } 15 16 class Zend_Db_AllTests 17 { 18 public static function main() 19 { 20 PHPUnit2_TextUI_TestRunner::run(self::suite()); 21 } 22 23 public static function suite() 24 { 25 $suite = new PHPUnit2_Framework_TestSuite('Zend Framework - Zend_Db'); 26 27 if(TESTS_ZEND_DB_ADAPTER_PDO_MSSQL_ENABLED == true) { 28 $suite->addTestSuite('Zend_Db_Adapter_Pdo_MssqlTest'); 29 } 30 if(TESTS_ZEND_DB_ADAPTER_PDO_MYSQL_ENABLED == true) { 31 $suite->addTestSuite('Zend_Db_Adapter_Pdo_MysqlTest'); 32 } 33 34 return $suite; 35 } 36 } 37 38 if (PHPUnit2_MAIN_METHOD == 'Zend_Db_AllTests::main') { 39 Zend_Db_AllTests::main(); 40 }