mirror of
				https://github.com/brmlab/brmsklad.git
				synced 2025-10-31 00:03:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			345 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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']));
 | |
| 	}
 | |
| }
 | 
