/tests/ZendTest/Db/Adapter/AdapterTest.php

https://github.com/zmicier/zf2 · PHP · 301 lines · 175 code · 42 blank · 84 comment · 4 complexity · d20c7c0e839e1600a2dff4c8bf81c5a4 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Db
  9. */
  10. namespace ZendTest\Db\Adapter;
  11. use Zend\Db\Adapter\Adapter;
  12. use Zend\Db\Adapter\Profiler;
  13. class AdapterTest extends \PHPUnit_Framework_TestCase
  14. {
  15. /**
  16. * @var \PHPUnit_Framework_MockObject_MockObject
  17. */
  18. protected $mockDriver = null;
  19. /**
  20. * @var \PHPUnit_Framework_MockObject_MockObject
  21. */
  22. protected $mockPlatform = null;
  23. /**
  24. * @var \PHPUnit_Framework_MockObject_MockObject
  25. */
  26. protected $mockConnection = null;
  27. /**
  28. * @var \PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $mockStatement = null;
  31. /**
  32. * @var Adapter
  33. */
  34. protected $adapter;
  35. protected function setUp()
  36. {
  37. $this->mockDriver = $this->getMock('Zend\Db\Adapter\Driver\DriverInterface');
  38. $this->mockConnection = $this->getMock('Zend\Db\Adapter\Driver\ConnectionInterface');
  39. $this->mockDriver->expects($this->any())->method('checkEnvironment')->will($this->returnValue(true));
  40. $this->mockDriver->expects($this->any())->method('getConnection')->will($this->returnValue($this->mockConnection));
  41. $this->mockPlatform = $this->getMock('Zend\Db\Adapter\Platform\PlatformInterface');
  42. $this->mockStatement = $this->getMock('Zend\Db\Adapter\Driver\StatementInterface');
  43. $this->mockDriver->expects($this->any())->method('createStatement')->will($this->returnValue($this->mockStatement));
  44. $this->adapter = new Adapter($this->mockDriver, $this->mockPlatform);
  45. }
  46. /**
  47. * @testdox unit test: Test setProfiler() will store profiler
  48. * @covers Zend\Db\Adapter\Adapter::setProfiler
  49. */
  50. public function testSetProfiler()
  51. {
  52. $ret = $this->adapter->setProfiler(new Profiler\Profiler());
  53. $this->assertSame($this->adapter, $ret);
  54. }
  55. /**
  56. * @testdox unit test: Test getProfiler() will store profiler
  57. * @covers Zend\Db\Adapter\Adapter::getProfiler
  58. */
  59. public function testGetProfiler()
  60. {
  61. $this->adapter->setProfiler($profiler = new Profiler\Profiler());
  62. $this->assertSame($profiler, $this->adapter->getProfiler());
  63. $adapter = new Adapter(array('driver' => $this->mockDriver, 'profiler' => true), $this->mockPlatform);
  64. $this->assertInstanceOf('Zend\Db\Adapter\Profiler\Profiler', $adapter->getProfiler());
  65. }
  66. /**
  67. * @testdox unit test: Test createDriverFromParameters() will create proper driver type
  68. * @covers Zend\Db\Adapter\Adapter::createDriver
  69. */
  70. public function testCreateDriver()
  71. {
  72. if (extension_loaded('mysqli')) {
  73. $adapter = new Adapter(array('driver' => 'mysqli'), $this->mockPlatform);
  74. $this->assertInstanceOf('Zend\Db\Adapter\Driver\Mysqli\Mysqli', $adapter->driver);
  75. unset($adapter);
  76. }
  77. if (extension_loaded('pgsql')) {
  78. $adapter = new Adapter(array('driver' => 'pgsql'), $this->mockPlatform);
  79. $this->assertInstanceOf('Zend\Db\Adapter\Driver\Pgsql\Pgsql', $adapter->driver);
  80. unset($adapter);
  81. }
  82. if (extension_loaded('sqlsrv')) {
  83. $adapter = new Adapter(array('driver' => 'sqlsrv'), $this->mockPlatform);
  84. $this->assertInstanceOf('Zend\Db\Adapter\Driver\Sqlsrv\Sqlsrv', $adapter->driver);
  85. unset($adapter);
  86. }
  87. if (extension_loaded('pdo')) {
  88. $adapter = new Adapter(array('driver' => 'pdo_sqlite'), $this->mockPlatform);
  89. $this->assertInstanceOf('Zend\Db\Adapter\Driver\Pdo\Pdo', $adapter->driver);
  90. unset($adapter);
  91. }
  92. }
  93. /**
  94. * @testdox unit test: Test createPlatformFromDriver() will create proper platform from driver
  95. * @covers Zend\Db\Adapter\Adapter::createPlatform
  96. */
  97. public function testCreatePlatform()
  98. {
  99. $driver = clone $this->mockDriver;
  100. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('Mysql'));
  101. $adapter = new Adapter($driver);
  102. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Mysql', $adapter->platform);
  103. unset($adapter, $driver);
  104. $driver = clone $this->mockDriver;
  105. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('SqlServer'));
  106. $adapter = new Adapter($driver);
  107. $this->assertInstanceOf('Zend\Db\Adapter\Platform\SqlServer', $adapter->platform);
  108. unset($adapter, $driver);
  109. $driver = clone $this->mockDriver;
  110. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('Postgresql'));
  111. $adapter = new Adapter($driver);
  112. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Postgresql', $adapter->platform);
  113. unset($adapter, $driver);
  114. $driver = clone $this->mockDriver;
  115. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('Sqlite'));
  116. $adapter = new Adapter($driver);
  117. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Sqlite', $adapter->platform);
  118. unset($adapter, $driver);
  119. $driver = clone $this->mockDriver;
  120. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('IbmDb2'));
  121. $adapter = new Adapter($driver);
  122. $this->assertInstanceOf('Zend\Db\Adapter\Platform\IbmDb2', $adapter->platform);
  123. unset($adapter, $driver);
  124. $driver = clone $this->mockDriver;
  125. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('Oracle'));
  126. $adapter = new Adapter($driver);
  127. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Oracle', $adapter->platform);
  128. unset($adapter, $driver);
  129. $driver = clone $this->mockDriver;
  130. $driver->expects($this->any())->method('getDatabasePlatformName')->will($this->returnValue('Foo'));
  131. $adapter = new Adapter($driver);
  132. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Sql92', $adapter->platform);
  133. unset($adapter, $driver);
  134. // ensure platform can created via string, and also that it passed in options to platform object
  135. $driver = array('driver' => 'pdo_sqlite', 'platform' => 'Oracle', 'platform_options' => array('quote_identifiers' => false));
  136. $adapter = new Adapter($driver);
  137. $this->assertInstanceOf('Zend\Db\Adapter\Platform\Oracle', $adapter->platform);
  138. $this->assertEquals('foo', $adapter->getPlatform()->quoteIdentifier('foo'));
  139. unset($adapter, $driver);
  140. }
  141. /**
  142. * @testdox unit test: Test getDriver() will return driver object
  143. * @covers Zend\Db\Adapter\Adapter::getDriver
  144. */
  145. public function testGetDriver()
  146. {
  147. $this->assertSame($this->mockDriver, $this->adapter->getDriver());
  148. }
  149. /**
  150. * @testdox unit test: Test getPlatform() returns platform object
  151. * @covers Zend\Db\Adapter\Adapter::getPlatform
  152. */
  153. public function testGetPlatform()
  154. {
  155. $this->assertSame($this->mockPlatform, $this->adapter->getPlatform());
  156. }
  157. /**
  158. * @testdox unit test: Test getPlatform() returns platform object
  159. * @covers Zend\Db\Adapter\Adapter::getQueryResultSetPrototype
  160. */
  161. public function testGetQueryResultSetPrototype()
  162. {
  163. $this->assertInstanceOf('Zend\Db\ResultSet\ResultSetInterface', $this->adapter->getQueryResultSetPrototype());
  164. }
  165. /**
  166. * @testdox unit test: Test getCurrentSchema() returns current schema from connection object
  167. * @covers Zend\Db\Adapter\Adapter::getCurrentSchema
  168. */
  169. public function testGetCurrentSchema()
  170. {
  171. $this->mockConnection->expects($this->any())->method('getCurrentSchema')->will($this->returnValue('FooSchema'));
  172. $this->assertEquals('FooSchema', $this->adapter->getCurrentSchema());
  173. }
  174. /**
  175. * @testdox unit test: Test query() in prepare mode produces a statement object
  176. * @covers Zend\Db\Adapter\Adapter::query
  177. */
  178. public function testQueryWhenPreparedProducesStatement()
  179. {
  180. $s = $this->adapter->query('SELECT foo');
  181. $this->assertSame($this->mockStatement, $s);
  182. }
  183. /**
  184. * @testdox unit test: Test query() in prepare mode, with array of parameters, produces a result object
  185. * @covers Zend\Db\Adapter\Adapter::query
  186. */
  187. public function testQueryWhenPreparedWithParameterArrayProducesResult()
  188. {
  189. $parray = array('bar'=>'foo');
  190. $sql = 'SELECT foo, :bar';
  191. $statement = $this->getMock('\Zend\Db\Adapter\Driver\StatementInterface');
  192. $result = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface');
  193. $this->mockDriver->expects($this->any())->method('createStatement')->with($sql)->will($this->returnValue($statement));
  194. $this->mockStatement->expects($this->any())->method('execute')->will($this->returnValue($result));
  195. $r = $this->adapter->query($sql, $parray);
  196. $this->assertSame($result, $r);
  197. }
  198. /**
  199. * @testdox unit test: Test query() in prepare mode, with ParameterContainer, produces a result object
  200. * @covers Zend\Db\Adapter\Adapter::query
  201. */
  202. public function testQueryWhenPreparedWithParameterContainerProducesResult()
  203. {
  204. $sql = 'SELECT foo';
  205. $parameterContainer = $this->getMock('Zend\Db\Adapter\ParameterContainer');
  206. $result = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface');
  207. $this->mockDriver->expects($this->any())->method('createStatement')->with($sql)->will($this->returnValue($this->mockStatement));
  208. $this->mockStatement->expects($this->any())->method('execute')->will($this->returnValue($result));
  209. $result->expects($this->any())->method('isQueryResult')->will($this->returnValue(true));
  210. $r = $this->adapter->query($sql, $parameterContainer);
  211. $this->assertInstanceOf('Zend\Db\ResultSet\ResultSet', $r);
  212. }
  213. /**
  214. * @testdox unit test: Test query() in execute mode produces a driver result object
  215. * @covers Zend\Db\Adapter\Adapter::query
  216. */
  217. public function testQueryWhenExecutedProducesAResult()
  218. {
  219. $sql = 'SELECT foo';
  220. $result = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface');
  221. $this->mockConnection->expects($this->any())->method('execute')->with($sql)->will($this->returnValue($result));
  222. $r = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE);
  223. $this->assertSame($result, $r);
  224. }
  225. /**
  226. * @testdox unit test: Test query() in execute mode produces a resultset object
  227. * @covers Zend\Db\Adapter\Adapter::query
  228. */
  229. public function testQueryWhenExecutedProducesAResultSetObjectWhenResultIsQuery()
  230. {
  231. $sql = 'SELECT foo';
  232. $result = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface');
  233. $this->mockConnection->expects($this->any())->method('execute')->with($sql)->will($this->returnValue($result));
  234. $result->expects($this->any())->method('isQueryResult')->will($this->returnValue(true));
  235. $r = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE);
  236. $this->assertInstanceOf('Zend\Db\ResultSet\ResultSet', $r);
  237. }
  238. /**
  239. * @testdox unit test: Test createStatement() produces a statement object
  240. * @covers Zend\Db\Adapter\Adapter::createStatement
  241. */
  242. public function testCreateStatement()
  243. {
  244. $this->assertSame($this->mockStatement, $this->adapter->createStatement());
  245. }
  246. /**
  247. * @testdox unit test: Test __get() works
  248. * @covers Zend\Db\Adapter\Adapter::__get
  249. */
  250. public function test__get()
  251. {
  252. $this->assertSame($this->mockDriver, $this->adapter->driver);
  253. $this->assertSame($this->mockDriver, $this->adapter->DrivER);
  254. $this->assertSame($this->mockPlatform, $this->adapter->PlatForm);
  255. $this->assertSame($this->mockPlatform, $this->adapter->platform);
  256. $this->setExpectedException('InvalidArgumentException', 'Invalid magic');
  257. $this->adapter->foo;
  258. }
  259. }