/cake/tests/cases/libs/model/connection_manager.test.php

https://github.com/mcgrue/pingpawn · PHP · 279 lines · 131 code · 46 blank · 102 comment · 0 complexity · dc778466b5144d15811a77a9fb49b773 MD5 · raw file

  1. <?php
  2. /**
  3. * Connection Manager tests
  4. *
  5. *
  6. * PHP versions 4 and 5
  7. *
  8. * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
  9. *
  10. * Licensed under The Open Group Test Suite License
  11. * Redistributions of files must retain the above copyright notice.
  12. *
  13. * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
  14. * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
  15. * @package cake
  16. * @subpackage cake.tests.cases.libs
  17. * @since CakePHP(tm) v 1.2.0.5550
  18. * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  19. */
  20. App::import('Core', 'ConnectionManager');
  21. /**
  22. * ConnectionManagerTest
  23. *
  24. * @package cake
  25. * @subpackage cake.tests.cases.models
  26. */
  27. class ConnectionManagerTest extends CakeTestCase {
  28. /**
  29. * setUp method
  30. *
  31. * @access public
  32. * @return void
  33. */
  34. function setUp() {
  35. $this->ConnectionManager =& ConnectionManager::getInstance();
  36. }
  37. /**
  38. * tearDown method
  39. *
  40. * @access public
  41. * @return void
  42. */
  43. function tearDown() {
  44. unset($this->ConnectionManager);
  45. }
  46. /**
  47. * testInstantiation method
  48. *
  49. * @access public
  50. * @return void
  51. */
  52. function testInstantiation() {
  53. $this->assertTrue(is_a($this->ConnectionManager, 'ConnectionManager'));
  54. }
  55. /**
  56. * testEnumConnectionObjects method
  57. *
  58. * @access public
  59. * @return void
  60. */
  61. function testEnumConnectionObjects() {
  62. $sources = ConnectionManager::enumConnectionObjects();
  63. $this->assertTrue(count($sources) >= 1);
  64. $connections = array('default', 'test', 'test_suite');
  65. $this->assertTrue(count(array_intersect(array_keys($sources), $connections)) >= 1);
  66. }
  67. /**
  68. * testGetDataSource method
  69. *
  70. * @access public
  71. * @return void
  72. */
  73. function testGetDataSource() {
  74. $connections = ConnectionManager::enumConnectionObjects();
  75. $this->assertTrue(count(array_keys($connections) >= 1));
  76. $source = ConnectionManager::getDataSource(key($connections));
  77. $this->assertTrue(is_object($source));
  78. $this->expectError(new PatternExpectation('/Non-existent data source/i'));
  79. $source = ConnectionManager::getDataSource('non_existent_source');
  80. $this->assertEqual($source, null);
  81. }
  82. /**
  83. * testGetPluginDataSource method
  84. *
  85. * @access public
  86. * @return void
  87. */
  88. function testGetPluginDataSource() {
  89. App::build(array(
  90. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
  91. ));
  92. $name = 'test_source';
  93. $config = array('datasource' => 'TestPlugin.TestSource');
  94. $connection = ConnectionManager::create($name, $config);
  95. $this->assertTrue(class_exists('TestSource'));
  96. $this->assertEqual($connection->configKeyName, $name);
  97. $this->assertEqual($connection->config, $config);
  98. App::build();
  99. }
  100. /**
  101. * testGetPluginDataSourceAndPluginDriver method
  102. *
  103. * @access public
  104. * @return void
  105. */
  106. function testGetPluginDataSourceAndPluginDriver() {
  107. App::build(array(
  108. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
  109. ));
  110. $name = 'test_plugin_source_and_driver';
  111. $config = array('datasource' => 'TestPlugin.TestSource', 'driver' => 'TestPlugin.TestDriver');
  112. $connection = ConnectionManager::create($name, $config);
  113. $this->assertTrue(class_exists('TestSource'));
  114. $this->assertTrue(class_exists('TestDriver'));
  115. $this->assertEqual($connection->configKeyName, $name);
  116. $this->assertEqual($connection->config, $config);
  117. App::build();
  118. }
  119. /**
  120. * testGetLocalDataSourceAndPluginDriver method
  121. *
  122. * @access public
  123. * @return void
  124. */
  125. function testGetLocalDataSourceAndPluginDriver() {
  126. App::build(array(
  127. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
  128. ));
  129. $name = 'test_local_source_and_plugin_driver';
  130. $config = array('datasource' => 'dbo', 'driver' => 'TestPlugin.DboDummy');
  131. $connection = ConnectionManager::create($name, $config);
  132. $this->assertTrue(class_exists('DboSource'));
  133. $this->assertTrue(class_exists('DboDummy'));
  134. $this->assertEqual($connection->configKeyName, $name);
  135. App::build();
  136. }
  137. /**
  138. * testGetPluginDataSourceAndLocalDriver method
  139. *
  140. * @access public
  141. * @return void
  142. */
  143. function testGetPluginDataSourceAndLocalDriver() {
  144. App::build(array(
  145. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
  146. 'datasources' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS . 'datasources' . DS)
  147. ));
  148. $name = 'test_plugin_source_and_local_driver';
  149. $config = array('datasource' => 'TestPlugin.TestSource', 'driver' => 'local_driver');
  150. $connection = ConnectionManager::create($name, $config);
  151. $this->assertTrue(class_exists('TestSource'));
  152. $this->assertTrue(class_exists('TestLocalDriver'));
  153. $this->assertEqual($connection->configKeyName, $name);
  154. $this->assertEqual($connection->config, $config);
  155. App::build();
  156. }
  157. /**
  158. * testSourceList method
  159. *
  160. * @access public
  161. * @return void
  162. */
  163. function testSourceList() {
  164. $sources = ConnectionManager::sourceList();
  165. $this->assertTrue(count($sources) >= 1);
  166. $connections = array('default', 'test', 'test_suite');
  167. $this->assertTrue(count(array_intersect($sources, $connections)) >= 1);
  168. }
  169. /**
  170. * testGetSourceName method
  171. *
  172. * @access public
  173. * @return void
  174. */
  175. function testGetSourceName() {
  176. $connections = ConnectionManager::enumConnectionObjects();
  177. $name = key($connections);
  178. $source = ConnectionManager::getDataSource($name);
  179. $result = ConnectionManager::getSourceName($source);
  180. $this->assertEqual($result, $name);
  181. $source =& new StdClass();
  182. $result = ConnectionManager::getSourceName($source);
  183. $this->assertEqual($result, null);
  184. }
  185. /**
  186. * testLoadDataSource method
  187. *
  188. * @access public
  189. * @return void
  190. */
  191. function testLoadDataSource() {
  192. $connections = array(
  193. array('classname' => 'DboMysql', 'filename' => 'dbo' . DS . 'dbo_mysql'),
  194. array('classname' => 'DboMysqli', 'filename' => 'dbo' . DS . 'dbo_mysqli'),
  195. array('classname' => 'DboMssql', 'filename' => 'dbo' . DS . 'dbo_mssql'),
  196. array('classname' => 'DboOracle', 'filename' => 'dbo' . DS . 'dbo_oracle'),
  197. );
  198. foreach ($connections as $connection) {
  199. $exists = class_exists($connection['classname']);
  200. $loaded = ConnectionManager::loadDataSource($connection);
  201. $this->assertEqual($loaded, !$exists, "%s Failed loading the {$connection['classname']} datasource");
  202. }
  203. $connection = array('classname' => 'NonExistentDataSource', 'filename' => 'non_existent');
  204. $this->expectError(new PatternExpectation('/Unable to import DataSource class/i'));
  205. $loaded = ConnectionManager::loadDataSource($connection);
  206. $this->assertEqual($loaded, null);
  207. }
  208. /**
  209. * testCreateDataSource method
  210. *
  211. * @access public
  212. * @return void
  213. */
  214. function testCreateDataSourceWithIntegrationTests() {
  215. $name = 'test_created_connection';
  216. $connections = ConnectionManager::enumConnectionObjects();
  217. $this->assertTrue(count(array_keys($connections) >= 1));
  218. $source = ConnectionManager::getDataSource(key($connections));
  219. $this->assertTrue(is_object($source));
  220. $config = $source->config;
  221. $connection = ConnectionManager::create($name, $config);
  222. $this->assertTrue(is_object($connection));
  223. $this->assertEqual($name, $connection->configKeyName);
  224. $this->assertEqual($name, ConnectionManager::getSourceName($connection));
  225. $source = ConnectionManager::create(null, array());
  226. $this->assertEqual($source, null);
  227. $source = ConnectionManager::create('another_test', array());
  228. $this->assertEqual($source, null);
  229. $config = array('classname' => 'DboMysql', 'filename' => 'dbo' . DS . 'dbo_mysql');
  230. $source = ConnectionManager::create(null, $config);
  231. $this->assertEqual($source, null);
  232. }
  233. }