PageRenderTime 23ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/lithium/libraries/lithium/tests/cases/data/collection/RecordSetTest.php

https://github.com/brtriver/sukonv
PHP | 420 lines | 301 code | 90 blank | 29 comment | 0 complexity | 1049d44fda69aef5e3dff9f884e3c1d0 MD5 | raw file
  1. <?php
  2. /**
  3. * Lithium: the most rad php framework
  4. *
  5. * @copyright Copyright 2010, Union of RAD (http://union-of-rad.org)
  6. * @license http://opensource.org/licenses/bsd-license.php The BSD License
  7. */
  8. namespace lithium\tests\cases\data\collection;
  9. use lithium\data\collection\RecordSet;
  10. use lithium\tests\mocks\data\collection\MockRecordSet;
  11. use lithium\tests\mocks\data\source\database\adapter\MockAdapter;
  12. use lithium\tests\mocks\data\model\mock_database\MockResult;
  13. use lithium\tests\mocks\data\MockPostObject;
  14. use lithium\tests\mocks\data\MockModel;
  15. use lithium\data\Connections;
  16. use lithium\util\Collection;
  17. /**
  18. * RecordSet tests
  19. */
  20. class RecordSetTest extends \lithium\test\Unit {
  21. protected $_model = 'lithium\tests\mocks\data\MockModel';
  22. /**
  23. * RecordSet object to test
  24. *
  25. * @var object
  26. */
  27. protected $_recordSet = null;
  28. /**
  29. * Object based RecordSet object to test
  30. *
  31. * @var object
  32. */
  33. protected $_objectRecordSet = null;
  34. /**
  35. * Array of records for testing
  36. *
  37. * @var array
  38. */
  39. protected $_records = array(
  40. array('id' => 1, 'data' => 'data1'),
  41. array('id' => 2, 'data' => 'data2'),
  42. array('id' => 3, 'data' => 'data3'),
  43. array('id' => 4, 'data' => 'data4')
  44. );
  45. /**
  46. * Array of object records for testing
  47. *
  48. * @var array
  49. */
  50. protected $_objectRecords = array();
  51. public function setUp() {
  52. foreach($this->_records as $i => $record) {
  53. $this->_objectRecords[$i] = new MockPostObject($record);
  54. }
  55. $result = new MockResult();
  56. $result->records = array_merge(array(false), $this->_records);
  57. $model = $this->_model;
  58. $this->_recordSet = new MockRecordSet(compact('result', 'model') + array('exists' => true));
  59. $result = new MockResult();
  60. $result->records = array_merge(array(false), $this->_records);
  61. $this->_objectRecordSet = new MockRecordSet(compact('result', 'model') + array(
  62. 'exists' => true
  63. ));
  64. }
  65. public function testInit() {
  66. $recordSet = new MockRecordSet();
  67. $this->assertTrue($recordSet instanceof RecordSet);
  68. $recordSet = new MockRecordSet(array(
  69. 'model' => $this->_model,
  70. 'result' => true,
  71. 'exists' => true,
  72. ));
  73. $this->assertEqual($this->_model, $recordSet->model());
  74. $this->assertTrue($recordSet->get('_result'));
  75. }
  76. public function testOffsetExists() {
  77. $this->assertFalse($this->_recordSet->offsetExists(0));
  78. $this->assertTrue($this->_recordSet->offsetExists(1));
  79. $this->assertTrue($this->_recordSet->offsetExists(2));
  80. $this->assertTrue($this->_recordSet->offsetExists(3));
  81. $this->assertTrue($this->_recordSet->offsetExists(4));
  82. $this->assertTrue(isset($this->_recordSet[3]));
  83. $this->assertFalse($this->_objectRecordSet->offsetExists(0));
  84. $this->assertTrue($this->_objectRecordSet->offsetExists(1));
  85. $this->assertTrue($this->_objectRecordSet->offsetExists(2));
  86. $this->assertTrue($this->_objectRecordSet->offsetExists(3));
  87. $this->assertTrue($this->_objectRecordSet->offsetExists(4));
  88. $this->assertTrue(isset($this->_objectRecordSet[3]));
  89. }
  90. public function testOffsetGet() {
  91. $expected = array('id' => 1, 'data' => 'data1');
  92. $this->assertEqual($expected, $this->_recordSet[1]->to('array'));
  93. $expected = array('id' => 2, 'data' => 'data2');
  94. $this->assertEqual($expected, $this->_recordSet[2]->to('array'));
  95. $expected = array('id' => 3, 'data' => 'data3');
  96. $this->assertEqual($expected, $this->_recordSet[3]->to('array'));
  97. $expected = array('id' => 4, 'data' => 'data4');
  98. $this->assertEqual($expected, $this->_recordSet[4]->to('array'));
  99. $expected = array('id' => 3, 'data' => 'data3');
  100. $this->assertEqual($this->_records[2], $this->_recordSet[3]->to('array'));
  101. $recordSet = new MockRecordSet();
  102. $this->assertEqual(array(), $recordSet->data());
  103. $this->expectException();
  104. $this->_recordSet[5];
  105. }
  106. public function testOffsetGetObject() {
  107. $result = $this->_objectRecordSet[1];
  108. $this->assertEqual(1, $result->id);
  109. $this->assertEqual('data1', $result->data);
  110. $result = $this->_objectRecordSet[2];
  111. $this->assertEqual(2, $result->id);
  112. $this->assertEqual('data2', $result->data);
  113. $result = $this->_objectRecordSet[3];
  114. $this->assertEqual(3, $result->id);
  115. $this->assertEqual('data3', $result->data);
  116. $result = $this->_objectRecordSet[4];
  117. $this->assertEqual(4, $result->id);
  118. $this->assertEqual('data4', $result->data);
  119. $this->expectException();
  120. $this->_objectRecordSet[5];
  121. }
  122. public function testOffsetGetBackwards() {
  123. $expected = array('id' => 4, 'data' => 'data4');
  124. $this->assertEqual($expected, $this->_recordSet[4]->to('array'));
  125. $expected = array('id' => 3, 'data' => 'data3');
  126. $this->assertEqual($expected, $this->_recordSet[3]->to('array'));
  127. $expected = array('id' => 2, 'data' => 'data2');
  128. $this->assertEqual($expected, $this->_recordSet[2]->to('array'));
  129. $expected = array('id' => 1, 'data' => 'data1');
  130. $this->assertEqual($expected, $this->_recordSet[1]->to('array'));
  131. $result = $this->_objectRecordSet[4];
  132. $this->assertEqual(4, $result->id);
  133. $this->assertEqual('data4', $result->data);
  134. $result = $this->_objectRecordSet[3];
  135. $this->assertEqual(3, $result->id);
  136. $this->assertEqual('data3', $result->data);
  137. $result = $this->_objectRecordSet[2];
  138. $this->assertEqual(2, $result->id);
  139. $this->assertEqual('data2', $result->data);
  140. $result = $this->_objectRecordSet[1];
  141. $this->assertEqual(1, $result->id);
  142. $this->assertEqual('data1', $result->data);
  143. }
  144. public function testOffsetSet() {
  145. $this->_recordSet[5] = $expected = array('id' => 5, 'data' => 'data5');
  146. $items = $this->_recordSet->get('_data');
  147. $this->assertEqual($expected, $items[0]->to('array'));
  148. $this->_recordSet[] = $expected = array('id' => 6, 'data' => 'data6');
  149. $items = $this->_recordSet->get('_data');
  150. $this->assertEqual($expected, $items[1]->to('array'));
  151. $this->_objectRecordSet[5] = $expected = new MockPostObject(array(
  152. 'id' => 5, 'data' => 'data5'
  153. ));
  154. $items = $this->_recordSet->get('_data');
  155. $this->assertEqual($expected->id, $items[0]->id);
  156. $this->assertEqual($expected->data, $items[0]->data);
  157. $this->_recordSet[] = $expected = new MockPostObject(array('id' => 6, 'data' => 'data6'));
  158. $items = $this->_recordSet->get('_data');
  159. $this->assertEqual($expected->id, $items[1]->id);
  160. $this->assertEqual($expected->data, $items[1]->data);
  161. }
  162. public function testOffsetSetWithLoadedData() {
  163. $this->_recordSet[0];
  164. $this->_recordSet[1] = array('id' => 1, 'data' => 'new data1');
  165. $expected = array(
  166. 1 => array('id' => 1, 'data' => 'new data1'),
  167. 2 => array('id' => 2, 'data' => 'data2'),
  168. 3 => array('id' => 3, 'data' => 'data3'),
  169. 4 => array('id' => 4, 'data' => 'data4'),
  170. );
  171. $this->assertEqual($expected, $this->_recordSet->to('array'));
  172. $this->_objectRecordSet[0];
  173. $this->_objectRecordSet[1] = new MockPostObject(array('id' => 1, 'data' => 'new data1'));
  174. $result = $this->_objectRecordSet[1];
  175. $this->assertEqual(1, $result->id);
  176. $this->assertEqual('new data1', $result->data);
  177. $result = $this->_objectRecordSet[2];
  178. $this->assertEqual(2, $result->id);
  179. $this->assertEqual('data2', $result->data);
  180. $result = $this->_objectRecordSet[3];
  181. $this->assertEqual(3, $result->id);
  182. $this->assertEqual('data3', $result->data);
  183. $result = $this->_objectRecordSet[4];
  184. $this->assertEqual(4, $result->id);
  185. $this->assertEqual('data4', $result->data);
  186. }
  187. public function testOffsetUnset() {
  188. $this->_recordSet[0];
  189. unset($this->_recordSet[1]);
  190. $expected = array(
  191. 2 => array('id' => 2, 'data' => 'data2'),
  192. 3 => array('id' => 3, 'data' => 'data3'),
  193. 4 => array('id' => 4, 'data' => 'data4')
  194. );
  195. $this->assertEqual($expected, $this->_recordSet->to('array'));
  196. $this->_objectRecordSet[0];
  197. unset($this->_objectRecordSet[1]);
  198. $this->expectException();
  199. $this->_objectRecordSet[1];
  200. $result = $this->_objectRecordSet[2];
  201. $this->assertEqual(2, $result->id);
  202. $this->assertEqual('data2', $result->data);
  203. $result = $this->_objectRecordSet[3];
  204. $this->assertEqual(3, $result->id);
  205. $this->assertEqual('data3', $result->data);
  206. $result = $this->_objectRecordSet[4];
  207. $this->assertEqual(4, $result->id);
  208. $this->assertEqual('data4', $result->data);
  209. }
  210. public function testRewind() {
  211. $this->_recordSet[0];
  212. $this->_recordSet->rewind();
  213. $expected = array('id' => 1, 'data' => 'data1');
  214. $this->assertEqual($expected, $this->_recordSet->current()->to('array'));
  215. $this->_objectRecordSet[0];
  216. $this->_objectRecordSet->rewind();
  217. $result = $this->_objectRecordSet->current();
  218. $this->assertEqual(1, $result->id);
  219. $this->assertEqual('data1', $result->data);
  220. }
  221. public function testCurrent() {
  222. $this->assertFalse(isset($this->_recordSet[0]));
  223. $this->_recordSet->set('_pointer', 1);
  224. $this->assertEqual($this->_records[1], $this->_recordSet->current()->to('array'));
  225. $this->_recordSet->set('_pointer', 2);
  226. $this->assertEqual($this->_records[2], $this->_recordSet->current()->to('array'));
  227. $this->assertFalse(isset($this->_objectRecordSet[0]));
  228. $this->_recordSet->set('_pointer', 1);
  229. $result = $this->_recordSet->current();
  230. $this->assertEqual($this->_objectRecords[1]->id, $result->id);
  231. $this->assertEqual($this->_objectRecords[1]->data, $result->data);
  232. $this->_recordSet->set('_pointer', 2);
  233. $result = $this->_recordSet->current();
  234. $this->assertEqual($this->_objectRecords[2]->id, $result->id);
  235. $this->assertEqual($this->_objectRecords[2]->data, $result->data);
  236. }
  237. public function testKey() {
  238. $this->assertFalse(isset($this->_recordSet[0]));
  239. $this->_recordSet->set('_pointer', 1);
  240. $this->assertEqual(2, $this->_recordSet->key());
  241. $this->_recordSet->set('_pointer', 2);
  242. $this->assertEqual(3, $this->_recordSet->key());
  243. $this->assertFalse(isset($this->_objectRecordSet[0]));
  244. $this->_objectRecordSet->set('_pointer', 1);
  245. $this->assertEqual(2, $this->_objectRecordSet->key());
  246. $this->_objectRecordSet->set('_pointer', 2);
  247. $this->assertEqual(3, $this->_objectRecordSet->key());
  248. }
  249. public function testNextWithForEach() {
  250. $counter = 0;
  251. foreach($this->_recordSet as $record) {
  252. $this->assertEqual($this->_records[$counter], $record->to('array'));
  253. $counter++;
  254. }
  255. $counter = 0;
  256. foreach($this->_objectRecordSet as $record) {
  257. $this->assertEqual($this->_objectRecords[$counter]->id, $record->id);
  258. $this->assertEqual($this->_objectRecords[$counter]->data, $record->data);
  259. $counter++;
  260. }
  261. }
  262. public function testNextWithWhile() {
  263. $counter = 0;
  264. while($record = $this->_recordSet->next()) {
  265. $this->assertEqual($this->_records[$counter], $record->to('array'));
  266. $counter++;
  267. }
  268. $counter = 0;
  269. while($record = $this->_objectRecordSet->next()) {
  270. $this->assertEqual($this->_objectRecords[$counter]->id, $record->id);
  271. $this->assertEqual($this->_objectRecords[$counter]->data, $record->data);
  272. $counter++;
  273. }
  274. }
  275. public function testMeta() {
  276. $expected = array('model' => 'lithium\tests\mocks\data\MockModel');
  277. $this->assertEqual($expected, $this->_recordSet->meta());
  278. $expected = array('model' => 'lithium\tests\mocks\data\MockModel');
  279. $this->assertEqual($expected, $this->_objectRecordSet->meta());
  280. }
  281. public function testTo() {
  282. Collection::formats('\lithium\net\http\Media');
  283. $this->assertFalse(isset($this->_recordSet[0]));
  284. $expected = array(
  285. 1 => array('id' => 1, 'data' => 'data1'),
  286. 2 => array('id' => 2, 'data' => 'data2'),
  287. 3 => array('id' => 3, 'data' => 'data3'),
  288. 4 => array('id' => 4, 'data' => 'data4')
  289. );
  290. $this->assertEqual($expected, $this->_recordSet->to('array'));
  291. $expected = '{"1":{"id":1,"data":"data1"},"2":{"id":2,"data":"data2"},'
  292. . '"3":{"id":3,"data":"data3"},"4":{"id":4,"data":"data4"}}';
  293. $this->assertEqual($expected, $this->_recordSet->to('json'));
  294. }
  295. public function testEach() {
  296. $filter = function($rec) {
  297. $rec->more_data = "More Data{$rec->id}";
  298. return $rec;
  299. };
  300. $expected = array(
  301. 1 => array('id' => 1, 'data' => 'data1', 'more_data' => 'More Data1'),
  302. 2 => array('id' => 2, 'data' => 'data2', 'more_data' => 'More Data2'),
  303. 3 => array('id' => 3, 'data' => 'data3', 'more_data' => 'More Data3'),
  304. 4 => array('id' => 4, 'data' => 'data4', 'more_data' => 'More Data4')
  305. );
  306. $result = $this->_recordSet->each($filter)->to('array');
  307. $this->assertEqual($expected, $result);
  308. $result = $this->_objectRecordSet->each($filter);
  309. foreach($result as $key => $record) {
  310. $this->assertEqual($expected[$key]['id'], $record->id);
  311. $this->assertEqual($expected[$key]['data'], $record->data);
  312. $this->assertEqual($expected[$key]['more_data'], $record->more_data);
  313. }
  314. }
  315. public function testMap() {
  316. $filter = function($rec) {
  317. return $rec->id . $rec->data;
  318. };
  319. $expected = array('1data1', '2data2', '3data3', '4data4');
  320. $result = $this->_recordSet->map($filter, array('collect' => false));
  321. $this->assertEqual($expected, $result);
  322. $result = $this->_recordSet->map($filter);
  323. $this->assertEqual($expected, $result->get('_data'));
  324. $result = $this->_objectRecordSet->map($filter, array('collect' => false));
  325. $this->assertEqual($expected, $result);
  326. $result = $this->_objectRecordSet->map($filter);
  327. $this->assertEqual($expected, $result->get('_data'));
  328. }
  329. }
  330. ?>