<?php
 
 
class DbAdapterClass extends A_Db_Adapter
 
{
 
 
    const DEFAULT_DB = null;
 
    const CONNECTION = 'xyz';
 
    
 
    public $test_config = array();
 
    public $db = self::DEFAULT_DB;
 
    
 
    public function _connect()
 
    {
 
        $this->test_config = $this->_config;
 
        $this->_connection = self::CONNECTION;
 
    }
 
    
 
    protected function _close()
 
    {}
 
    
 
    protected function _query($sql)
 
    {}
 
    
 
    protected function _lastId()
 
    {}
 
 
    protected function _selectDb($database)
 
    {
 
        $this->db = $database;
 
    }
 
 
    public function limit($sql, $count, $offset='')
 
    {}
 
    
 
    // testing methods
 
    
 
    public function getCurrentDatabase()
 
    {
 
        return $this->_currentDatabase;
 
    }
 
 
}
 
 
class Db_AdapterTest extends UnitTestCase
 
{
 
 
    const ALT_DB = 'foo';
 
    const ALT_USER = 'bar';
 
    const ALT_CONNECTION = 'baz';
 
    
 
    protected $config;
 
    
 
    function setUp()
 
    {
 
        $this->config = array(
 
            
 
            // not meant to be a real connection, no connection actually made
 
            'SINGLE' => array(
 
                'phptype' => 'mysql',
 
                'hostspec' => 'localhost',
 
                'database' => 'single',
 
                'username' => 'single',
 
                'password' => 'single',
 
            ),
 
        );
 
    }
 
    
 
    public function testDb_AdapterConstructConfiguration()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->test_config['database'], $this->config['SINGLE']['database']);
 
    }
 
    
 
    public function testDb_AdapterConfig()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        $Db_Adapter->config(array('username' => self::ALT_USER));
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->test_config['database'], $this->config['SINGLE']['database'], '\'database\' must NOT be overwritten/deleted');
 
        $this->assertEqual($Db_Adapter->test_config['username'], self::ALT_USER, '\'username\' index must be overwritten');
 
    }
 
    
 
    public function testDb_AdapterConstructConnection()
 
    {
 
        $config = $this->config['SINGLE'];
 
        $config['connection'] = self::ALT_CONNECTION;
 
        $Db_Adapter = new DbAdapterClass($config);
 
        
 
        $this->assertEqual($Db_Adapter->getConnection(), self::ALT_CONNECTION);
 
    }
 
    
 
    public function testDb_AdapterAutoconnect()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        
 
        $this->assertIdentical($Db_Adapter->getConnection(), false);
 
        $Db_Adapter->query('dudquery');
 
        $this->assertEqual($Db_Adapter->getConnection(), DbAdapterClass::CONNECTION);
 
    }
 
    
 
    public function testDb_AdapterAutoSelectDb()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        
 
        $this->assertIdentical($Db_Adapter->getCurrentDatabase(), null, 'Initial status of database must be null');
 
        $this->assertEqual($Db_Adapter->db, DbAdapterClass::DEFAULT_DB, 'Database must not be called before connect()');
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->db, $this->config['SINGLE']['database'], 'Database not passed correct name, or not called at all');
 
        $this->assertEqual($Db_Adapter->getCurrentDatabase(), $this->config['SINGLE']['database'], 'Current database not updated properly');
 
    }
 
    
 
    public function testDb_AdapterSelectDbDefault()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        $Db_Adapter->connect();
 
        $Db_Adapter->config(array('database' => self::ALT_DB));
 
        $Db_Adapter->selectDb();
 
        
 
        $this->assertNotEqual($Db_Adapter->db, $this->config['SINGLE']['database'], 'New schema not selected');
 
        $this->assertEqual($Db_Adapter->db, self::ALT_DB, 'Schema not changed properly');
 
        $this->assertEqual($Db_Adapter->getCurrentDatabase(), self::ALT_DB, 'Current database not updated properly');
 
    }
 
    
 
    public function testDb_AdapterSelectDbPreConnect()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        $Db_Adapter->selectDb(self::ALT_DB);
 
        $this->assertEqual($Db_Adapter->db, DbAdapterClass::DEFAULT_DB, 'Database must not be called before connect()');
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->db, self::ALT_DB, 'Database not passed correct name, or not called at all');
 
        $this->assertEqual($Db_Adapter->getCurrentDatabase(), self::ALT_DB, 'Current database not updated properly');
 
    }
 
    
 
    public function testDb_AdapterSelectDbPostConnect()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->db, $this->config['SINGLE']['database'], 'Database not passed correct name, or not called at all');
 
        $this->assertEqual($Db_Adapter->getCurrentDatabase(), $this->config['SINGLE']['database'], 'Current database not updated properly');
 
        $Db_Adapter->selectDb(self::ALT_DB);
 
        $this->assertEqual($Db_Adapter->db, self::ALT_DB, 'Secondary database select not executed');
 
        $this->assertEqual($Db_Adapter->getCurrentDatabase(), self::ALT_DB, 'Current database not updated properly');
 
    }
 
    
 
    public function testDb_AdapterSelectDbConservative()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        $Db_Adapter->connect();
 
        // reset mock database to detect changes
 
        $Db_Adapter->db = DbAdapterClass::DEFAULT_DB;
 
        $Db_Adapter->selectDb($this->config['SINGLE']['database']);
 
        $this->assertIdentical($Db_Adapter->db, DbAdapterClass::DEFAULT_DB, 'Database called when correct database was already selected');
 
    }
 
    
 
    public function testDb_AdapterGetConnection()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        
 
        $this->assertIdentical($Db_Adapter->getConnection(), false);
 
        $Db_Adapter->connect();
 
        $this->assertEqual($Db_Adapter->getConnection(), DbAdapterClass::CONNECTION);
 
    }
 
    
 
    public function testDb_AdapterIsConnected()
 
    {
 
        $Db_Adapter = $this->createSingle();
 
        
 
        $this->assertIdentical($Db_Adapter->isConnected(), false, 'Connection already being made somehow, or registering a false positive');
 
        $Db_Adapter->connect();
 
        $this->assertIdentical($Db_Adapter->isConnected(), true, 'Connection not recognized');
 
    }
 
    
 
    private function createSingle()
 
    {
 
        return new DbAdapterClass($this->config['SINGLE']);
 
    }
 
 
}
 
 
 
 |