PageRenderTime 70ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/test/Mad/Model/Serializer/BaseTest.php

https://github.com/smoke/maintainable-framework
PHP | 325 lines | 241 code | 63 blank | 21 comment | 2 complexity | 8f211981c4e58c471326301311d1769e MD5 | raw file
  1. <?php
  2. /**
  3. * @category Mad
  4. * @package Mad_Model
  5. * @subpackage UnitTests
  6. * @copyright (c) 2007-2009 Maintainable Software, LLC
  7. * @license http://opensource.org/licenses/bsd-license.php BSD
  8. */
  9. /**
  10. * Set environment
  11. */
  12. if (!defined('MAD_ENV')) define('MAD_ENV', 'test');
  13. if (!defined('MAD_ROOT')) {
  14. require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))).'/config/environment.php';
  15. }
  16. /**
  17. * @todo Tests for sanitizeSql()
  18. *
  19. * @group model
  20. * @category Mad
  21. * @package Mad_Model
  22. * @subpackage UnitTests
  23. * @copyright (c) 2007-2009 Maintainable Software, LLC
  24. * @license http://opensource.org/licenses/bsd-license.php BSD
  25. */
  26. class Mad_Model_Serializer_BaseTest extends Mad_Test_Unit
  27. {
  28. // set up new db by inserting dummy data into the db
  29. public function setUp()
  30. {
  31. $this->fixtures('users', 'articles', 'comments');
  32. }
  33. public function testGetSerializableAttributeNames()
  34. {
  35. $record = $this->users('mike');
  36. $options = array();
  37. $serializer = new Mad_Model_Serializer_Base($record, $options);
  38. $attrNames = $serializer->getSerializableAttributeNames();
  39. $expected = array('approved', 'company_id', 'created_at', 'created_on',
  40. 'first_name', 'id', 'name', 'updated_at', 'updated_on');
  41. $this->assertEquals($expected, $attrNames);
  42. }
  43. public function testGetSerializableAttributeNamesExceptSingle()
  44. {
  45. $record = $this->users('mike');
  46. $options = array('except' => 'first_name');
  47. $serializer = new Mad_Model_Serializer_Base($record, $options);
  48. $attrNames = $serializer->getSerializableAttributeNames();
  49. $expected = array('approved', 'company_id', 'created_at', 'created_on',
  50. 'id', 'name', 'updated_at', 'updated_on');
  51. $this->assertEquals($expected, $attrNames);
  52. }
  53. public function testGetSerializableAttributeNamesExceptMultiple()
  54. {
  55. $record = $this->users('mike');
  56. $options = array('except' => array('first_name', 'name'));
  57. $serializer = new Mad_Model_Serializer_Base($record, $options);
  58. $attrNames = $serializer->getSerializableAttributeNames();
  59. $expected = array('approved', 'company_id', 'created_at', 'created_on',
  60. 'id', 'updated_at', 'updated_on');
  61. $this->assertEquals($expected, $attrNames);
  62. }
  63. public function testGetSerializableAttributeNamesOnlySingle()
  64. {
  65. $record = $this->users('mike');
  66. $options = array('only' => 'first_name');
  67. $serializer = new Mad_Model_Serializer_Base($record, $options);
  68. $attrNames = $serializer->getSerializableAttributeNames();
  69. $expected = array('first_name');
  70. $this->assertEquals($expected, $attrNames);
  71. }
  72. public function testGetSerializableAttributeNamesOnlyMultiple()
  73. {
  74. $record = $this->users('mike');
  75. $options = array('only' => array('first_name', 'name'));
  76. $serializer = new Mad_Model_Serializer_Base($record, $options);
  77. $attrNames = $serializer->getSerializableAttributeNames();
  78. $expected = array('first_name', 'name');
  79. $this->assertEquals($expected, $attrNames);
  80. }
  81. public function testGetSerializablePropertyNamesSingle()
  82. {
  83. $record = $this->articles('xml_rpc');
  84. $options = array('properties' => 'validity');
  85. $serializer = new Mad_Model_Serializer_Base($record, $options);
  86. $propertyNames = $serializer->getSerializablePropertyNames();
  87. $expected = array('validity');
  88. $this->assertEquals($expected, $propertyNames);
  89. }
  90. public function testGetSerializablePropertyNamesMultiple()
  91. {
  92. $record = $this->articles('xml_rpc');
  93. $options = array('properties' => array('validity', 'is_good'));
  94. $serializer = new Mad_Model_Serializer_Base($record, $options);
  95. $propertyNames = $serializer->getSerializablePropertyNames();
  96. $expected = array('is_good', 'validity');
  97. $this->assertEquals($expected, $propertyNames);
  98. }
  99. public function testGetSerializableMethodNamesSingle()
  100. {
  101. $record = $this->articles('xml_rpc');
  102. $options = array('methods' => 'foo');
  103. $serializer = new Mad_Model_Serializer_Base($record, $options);
  104. $methodNames = $serializer->getSerializableMethodNames();
  105. $expected = array('foo');
  106. $this->assertEquals($expected, $methodNames);
  107. }
  108. public function testGetSerializableMethodNamesMultiple()
  109. {
  110. $record = $this->articles('xml_rpc');
  111. $options = array('methods' => array('foo', 'bar'));
  112. $serializer = new Mad_Model_Serializer_Base($record, $options);
  113. $methodNames = $serializer->getSerializableMethodNames();
  114. $expected = array('bar', 'foo');
  115. $this->assertEquals($expected, $methodNames);
  116. }
  117. public function testGetSerializableNames()
  118. {
  119. $record = $this->articles('xml_rpc');
  120. $options = array('methods' => 'foo',
  121. 'properties' => 'validity',
  122. 'except' => 'title');
  123. $serializer = new Mad_Model_Serializer_Base($record, $options);
  124. $attrNames = $serializer->getSerializableNames();
  125. $expected = array('foo', 'id', 'user_id', 'validity');
  126. $this->assertEquals($expected, $attrNames);
  127. }
  128. public function testGetSerializableRecord()
  129. {
  130. $record = $this->articles('xml_rpc');
  131. $options = array();
  132. $serializer = new Mad_Model_Serializer_Base($record, $options);
  133. $record = $serializer->getSerializableRecord();
  134. $expected = array (
  135. 'id' => '1',
  136. 'title' => 'Easier XML-RPC for PHP5',
  137. 'user_id' => '1'
  138. );
  139. $this->assertEquals($expected, $record);
  140. }
  141. public function testGetSerializableRecordIncludeSingleBelongsto()
  142. {
  143. $record = $this->articles('xml_rpc');
  144. $options = array('include' => 'User');
  145. $serializer = new Mad_Model_Serializer_Base($record, $options);
  146. $record = $serializer->getSerializableRecord();
  147. $expected = array (
  148. 'id' => '1',
  149. 'title' => 'Easier XML-RPC for PHP5',
  150. 'user_id' => '1',
  151. 'User' => array(
  152. 'approved' => 1,
  153. 'company_id' => 1,
  154. 'created_at' => '2008-01-01 12:20:00',
  155. 'created_on' => '2008-01-01',
  156. 'first_name' => 'Mike',
  157. 'id' => 1,
  158. 'name' => 'Mike Naberezny',
  159. 'updated_at' => '2008-01-01 12:20:00',
  160. 'updated_on' => '2008-01-01'
  161. )
  162. );
  163. $this->assertEquals($expected, $record);
  164. }
  165. public function testGetSerializableRecordIncludeSingleHasMany()
  166. {
  167. $record = $this->articles('xml_rpc');
  168. $options = array('include' => 'Comments');
  169. $serializer = new Mad_Model_Serializer_Base($record, $options);
  170. $record = $serializer->getSerializableRecord();
  171. $expected = array (
  172. 'id' => '1',
  173. 'title' => 'Easier XML-RPC for PHP5',
  174. 'user_id' => '1',
  175. 'Comments' => array(
  176. array('article_id' => 1, 'body' => 'Comment A', 'created_at' => '2008-05-01 12:00:00', 'id' => 1, 'user_id' => 1),
  177. array('article_id' => 1, 'body' => 'Comment B', 'created_at' => '2008-08-01 12:00:00', 'id' => 2, 'user_id' => 1)
  178. )
  179. );
  180. $this->assertEquals($expected, $record);
  181. }
  182. public function testGetSerializableRecordIncludeMultiple()
  183. {
  184. $record = $this->articles('xml_rpc');
  185. $options = array('include' => array('User', 'Comments'));
  186. $serializer = new Mad_Model_Serializer_Base($record, $options);
  187. $record = $serializer->getSerializableRecord();
  188. $expected = array (
  189. 'id' => '1',
  190. 'title' => 'Easier XML-RPC for PHP5',
  191. 'user_id' => '1',
  192. 'User' => array(
  193. 'approved' => 1,
  194. 'company_id' => 1,
  195. 'created_at' => '2008-01-01 12:20:00',
  196. 'created_on' => '2008-01-01',
  197. 'first_name' => 'Mike',
  198. 'id' => 1,
  199. 'name' => 'Mike Naberezny',
  200. 'updated_at' => '2008-01-01 12:20:00',
  201. 'updated_on' => '2008-01-01'
  202. ),
  203. 'Comments' => array(
  204. array('article_id' => 1, 'body' => 'Comment A', 'created_at' => '2008-05-01 12:00:00', 'id' => 1, 'user_id' => 1),
  205. array('article_id' => 1, 'body' => 'Comment B', 'created_at' => '2008-08-01 12:00:00', 'id' => 2, 'user_id' => 1)
  206. )
  207. );
  208. $this->assertEquals($expected, $record);
  209. }
  210. public function testGetSerializableRecordIncludeWithOptions()
  211. {
  212. $record = $this->articles('xml_rpc');
  213. $options = array('include' => array('User' => array('only' => 'name'),
  214. 'Comments' => array('except' => 'article_id')));
  215. $serializer = new Mad_Model_Serializer_Base($record, $options);
  216. $record = $serializer->getSerializableRecord();
  217. $expected = array (
  218. 'id' => '1',
  219. 'title' => 'Easier XML-RPC for PHP5',
  220. 'user_id' => '1',
  221. 'User' => array('name' => 'Mike Naberezny'),
  222. 'Comments' => array(
  223. array('body' => 'Comment A', 'created_at' => '2008-05-01 12:00:00', 'id' => 1, 'user_id' => 1),
  224. array('body' => 'Comment B', 'created_at' => '2008-08-01 12:00:00', 'id' => 2, 'user_id' => 1)
  225. )
  226. );
  227. $this->assertEquals($expected, $record);
  228. }
  229. public function testGetSerializableRecordWithMethods()
  230. {
  231. $record = $this->articles('xml_rpc');
  232. $options = array('methods' => array('foo', 'intMethod', 'boolMethod'));
  233. $serializer = new Mad_Model_Serializer_Base($record, $options);
  234. $record = $serializer->getSerializableRecord();
  235. $expected = array (
  236. 'id' => '1',
  237. 'title' => 'Easier XML-RPC for PHP5',
  238. 'user_id' => '1',
  239. 'boolMethod' => true,
  240. 'foo' => 'test serializer foo',
  241. 'intMethod' => 123
  242. );
  243. $this->assertEquals($expected, $record);
  244. }
  245. public function testGetSerializableRecordWithProperties()
  246. {
  247. $record = $this->articles('xml_rpc');
  248. $record->is_good = false;
  249. $record->validity = array('Valid!');
  250. $options = array('properties' => array('is_good', 'validity'));
  251. $serializer = new Mad_Model_Serializer_Base($record, $options);
  252. $record = $serializer->getSerializableRecord();
  253. $expected = array (
  254. 'id' => '1',
  255. 'title' => 'Easier XML-RPC for PHP5',
  256. 'user_id' => '1',
  257. 'is_good' => false,
  258. 'validity' => array('Valid!')
  259. );
  260. $this->assertEquals($expected, $record);
  261. }
  262. }