Blame | Last modification | View Log | RSS feed
<?php/*** Connection Manager tests** Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)** Licensed under The MIT License* For full copyright and license information, please see the LICENSE.txt* Redistributions of files must retain the above copyright notice** @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests* @package Cake.Test.Case.Model* @since CakePHP(tm) v 1.2.0.5550* @license http://www.opensource.org/licenses/mit-license.php MIT License*/App::uses('ConnectionManager', 'Model');/*** ConnectionManagerTest** @package Cake.Test.Case.Model*/class ConnectionManagerTest extends CakeTestCase {/*** tearDown method** @return void*/public function tearDown() {parent::tearDown();CakePlugin::unload();}/*** testEnumConnectionObjects method** @return void*/public function testEnumConnectionObjects() {$sources = ConnectionManager::enumConnectionObjects();$this->assertTrue(count($sources) >= 1);$connections = array('default', 'test', 'test');$this->assertTrue(count(array_intersect(array_keys($sources), $connections)) >= 1);}/*** testGetDataSource method** @return void*/public function testGetDataSource() {App::build(array('Model/Datasource' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS)));$name = 'test_get_datasource';$config = array('datasource' => 'Test2Source');ConnectionManager::create($name, $config);$connections = ConnectionManager::enumConnectionObjects();$this->assertTrue((bool)(count(array_keys($connections) >= 1)));$source = ConnectionManager::getDataSource('test_get_datasource');$this->assertTrue(is_object($source));ConnectionManager::drop('test_get_datasource');}/*** testGetDataSourceException() method** @return void* @expectedException MissingDatasourceConfigException*/public function testGetDataSourceException() {ConnectionManager::getDataSource('non_existent_source');}/*** testGetPluginDataSource method** @return void*/public function testGetPluginDataSource() {App::build(array('Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)), App::RESET);CakePlugin::load('TestPlugin');$name = 'test_source';$config = array('datasource' => 'TestPlugin.TestSource');$connection = ConnectionManager::create($name, $config);$this->assertTrue(class_exists('TestSource'));$this->assertEquals($connection->configKeyName, $name);$this->assertEquals($connection->config, $config);ConnectionManager::drop($name);}/*** testGetPluginDataSourceAndPluginDriver method** @return void*/public function testGetPluginDataSourceAndPluginDriver() {App::build(array('Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)), App::RESET);CakePlugin::load('TestPlugin');$name = 'test_plugin_source_and_driver';$config = array('datasource' => 'TestPlugin.Database/TestDriver');$connection = ConnectionManager::create($name, $config);$this->assertTrue(class_exists('TestSource'));$this->assertTrue(class_exists('TestDriver'));$this->assertEquals($connection->configKeyName, $name);$this->assertEquals($connection->config, $config);ConnectionManager::drop($name);}/*** testGetLocalDataSourceAndPluginDriver method** @return void*/public function testGetLocalDataSourceAndPluginDriver() {App::build(array('Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)));CakePlugin::load('TestPlugin');$name = 'test_local_source_and_plugin_driver';$config = array('datasource' => 'TestPlugin.Database/DboDummy');$connection = ConnectionManager::create($name, $config);$this->assertTrue(class_exists('DboSource'));$this->assertTrue(class_exists('DboDummy'));$this->assertEquals($connection->configKeyName, $name);ConnectionManager::drop($name);}/*** testGetPluginDataSourceAndLocalDriver method** @return void*/public function testGetPluginDataSourceAndLocalDriver() {App::build(array('Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS),'Model/Datasource/Database' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS . 'Database' . DS)));$name = 'test_plugin_source_and_local_driver';$config = array('datasource' => 'Database/TestLocalDriver');$connection = ConnectionManager::create($name, $config);$this->assertTrue(class_exists('TestSource'));$this->assertTrue(class_exists('TestLocalDriver'));$this->assertEquals($connection->configKeyName, $name);$this->assertEquals($connection->config, $config);ConnectionManager::drop($name);}/*** testSourceList method** @return void*/public function testSourceList() {ConnectionManager::getDataSource('test');$sources = ConnectionManager::sourceList();$this->assertTrue(count($sources) >= 1);$this->assertTrue(in_array('test', array_keys($sources)));}/*** testGetSourceName method** @return void*/public function testGetSourceName() {$source = ConnectionManager::getDataSource('test');$result = ConnectionManager::getSourceName($source);$this->assertEquals('test', $result);$source = new StdClass();$result = ConnectionManager::getSourceName($source);$this->assertNull($result);}/*** testLoadDataSource method** @return void*/public function testLoadDataSource() {$connections = array(array('classname' => 'Mysql', 'filename' => 'Mysql', 'package' => 'Database'),array('classname' => 'Postgres', 'filename' => 'Postgres', 'package' => 'Database'),array('classname' => 'Sqlite', 'filename' => 'Sqlite', 'package' => 'Database'),);foreach ($connections as $connection) {$exists = class_exists($connection['classname']);$loaded = ConnectionManager::loadDataSource($connection);$this->assertEquals($loaded, !$exists, "Failed loading the {$connection['classname']} datasource");}}/*** testLoadDataSourceException() method** @return void* @expectedException MissingDatasourceException*/public function testLoadDataSourceException() {$connection = array('classname' => 'NonExistentDataSource', 'filename' => 'non_existent');ConnectionManager::loadDataSource($connection);}/*** testCreateDataSource method** @return void*/public function testCreateDataSourceWithIntegrationTests() {$name = 'test_created_connection';$connections = ConnectionManager::enumConnectionObjects();$this->assertTrue((bool)(count(array_keys($connections) >= 1)));$source = ConnectionManager::getDataSource('test');$this->assertTrue(is_object($source));$config = $source->config;$connection = ConnectionManager::create($name, $config);$this->assertTrue(is_object($connection));$this->assertEquals($name, $connection->configKeyName);$this->assertEquals($name, ConnectionManager::getSourceName($connection));$source = ConnectionManager::create(null, array());$this->assertEquals(null, $source);$source = ConnectionManager::create('another_test', array());$this->assertEquals(null, $source);$config = array('classname' => 'DboMysql', 'filename' => 'dbo' . DS . 'dbo_mysql');$source = ConnectionManager::create(null, $config);$this->assertEquals(null, $source);}/*** testConnectionData method** @return void*/public function testConnectionData() {App::build(array('Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS),'Model/Datasource' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS)), App::RESET);CakePlugin::load(array('TestPlugin', 'TestPluginTwo'));$expected = array('datasource' => 'Test2Source');ConnectionManager::create('connection1', array('datasource' => 'Test2Source'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals($expected, $connections['connection1']);ConnectionManager::drop('connection1');ConnectionManager::create('connection2', array('datasource' => 'Test2Source'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals($expected, $connections['connection2']);ConnectionManager::drop('connection2');ConnectionManager::create('connection3', array('datasource' => 'TestPlugin.TestSource'));$connections = ConnectionManager::enumConnectionObjects();$expected['datasource'] = 'TestPlugin.TestSource';$this->assertEquals($expected, $connections['connection3']);ConnectionManager::drop('connection3');ConnectionManager::create('connection4', array('datasource' => 'TestPlugin.TestSource'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals($expected, $connections['connection4']);ConnectionManager::drop('connection4');ConnectionManager::create('connection5', array('datasource' => 'Test2OtherSource'));$connections = ConnectionManager::enumConnectionObjects();$expected['datasource'] = 'Test2OtherSource';$this->assertEquals($expected, $connections['connection5']);ConnectionManager::drop('connection5');ConnectionManager::create('connection6', array('datasource' => 'Test2OtherSource'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals($expected, $connections['connection6']);ConnectionManager::drop('connection6');ConnectionManager::create('connection7', array('datasource' => 'TestPlugin.TestOtherSource'));$connections = ConnectionManager::enumConnectionObjects();$expected['datasource'] = 'TestPlugin.TestOtherSource';$this->assertEquals($expected, $connections['connection7']);ConnectionManager::drop('connection7');ConnectionManager::create('connection8', array('datasource' => 'TestPlugin.TestOtherSource'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals($expected, $connections['connection8']);ConnectionManager::drop('connection8');}/*** Tests that a connection configuration can be deleted in runtime** @return void*/public function testDrop() {App::build(array('Model/Datasource' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS)));ConnectionManager::create('droppable', array('datasource' => 'Test2Source'));$connections = ConnectionManager::enumConnectionObjects();$this->assertEquals(array('datasource' => 'Test2Source'), $connections['droppable']);$this->assertTrue(ConnectionManager::drop('droppable'));$connections = ConnectionManager::enumConnectionObjects();$this->assertFalse(isset($connections['droppable']));}}