JsonableBehaviorTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. App::import('Behavior', 'Tools.Jsonable');
  3. App::import('Model', 'App');
  4. App::uses('MyCakeTestCase', 'Tools.Lib');
  5. class JsonableTestModel extends AppModel {
  6. public $useTable = false;
  7. public $displayField = 'title';
  8. public function find($type = null, $options = array(), $customData = null) {
  9. $data = array(
  10. 'comment' => 'blabla',
  11. 'url' => 'www.dereuromark.de',
  12. 'name' => 'some Name',
  13. 'details' => '{"x":"y"}',
  14. );
  15. if ($customData !== null) {
  16. $data = $customData;
  17. }
  18. if ($type == 'count') {
  19. $results = array(0=>array(0=>array('count'=>2)));
  20. } else {
  21. $results = array(0=>array($this->alias=>$data));
  22. }
  23. $results = $this->_filterResults($results);
  24. if ($type == 'first') {
  25. $results = $this->_findFirst('after', null, $results);
  26. }
  27. return $results;
  28. }
  29. }
  30. class JsonableTest extends MyCakeTestCase {
  31. /*
  32. public $fixtures = array(
  33. 'core.comment'
  34. );
  35. */
  36. public $Comment;
  37. public function startTest() {
  38. //$this->Comment = ClassRegistry::init('Comment');
  39. $this->Comment = new JsonableTestModel();
  40. $this->Comment->Behaviors->attach('Jsonable', array());
  41. }
  42. /** INPUT **/
  43. public function testBasic() {
  44. echo $this->_header(__FUNCTION__);
  45. // accuracy >= 5
  46. $data = array(
  47. 'comment' => 'blabla',
  48. 'url' => 'www.dereuromark.de',
  49. 'name' => 'some Name',
  50. 'details' => array('x'=>'y'),
  51. );
  52. $res = $this->Comment->save($data);
  53. $this->assertTrue($res);
  54. $res = $this->Comment->data;
  55. echo returns($res);
  56. $this->assertIdentical($res['JsonableTestModel']['details'], '{"x":"y"}');
  57. }
  58. public function testFieldsWithList() {
  59. echo $this->_header(__FUNCTION__);
  60. $this->Comment->Behaviors->detach('Jsonable');
  61. $this->Comment->Behaviors->attach('Jsonable', array('fields'=>array('details'), 'input'=>'list'));
  62. $data = array(
  63. 'comment' => 'blabla',
  64. 'url' => 'www.dereuromark.de',
  65. 'name' => 'some Name',
  66. 'details' => 'z|y|x',
  67. );
  68. $res = $this->Comment->save($data);
  69. $this->assertTrue($res);
  70. $res = $this->Comment->data;
  71. echo returns($res);
  72. $this->assertIdentical($res['JsonableTestModel']['details'], '["z","y","x"]');
  73. # with sort and unique
  74. $data = array(
  75. 'comment' => 'blabla',
  76. 'url' => 'www.dereuromark.de',
  77. 'name' => 'some Name',
  78. 'details' => 'z|x|y|x',
  79. );
  80. $this->Comment->Behaviors->detach('Jsonable');
  81. $this->Comment->Behaviors->attach('Jsonable', array('fields'=>array('details'), 'input'=>'list', 'sort'=>true));
  82. $res = $this->Comment->save($data);
  83. $this->assertTrue($res);
  84. $res = $this->Comment->data;
  85. echo returns($res);
  86. $this->assertIdentical($res['JsonableTestModel']['details'], '["x","y","z"]');
  87. }
  88. public function testFieldsWithParam() {
  89. echo $this->_header(__FUNCTION__);
  90. $this->Comment->Behaviors->detach('Jsonable');
  91. $this->Comment->Behaviors->attach('Jsonable', array('fields'=>array('details'), 'input'=>'param'));
  92. $data = array(
  93. 'comment' => 'blabla',
  94. 'url' => 'www.dereuromark.de',
  95. 'name' => 'some Name',
  96. 'details' => 'z:vz|y:yz|x:xz',
  97. );
  98. $res = $this->Comment->save($data);
  99. $this->assertTrue($res);
  100. $res = $this->Comment->data;
  101. echo returns($res);
  102. $this->assertIdentical($res['JsonableTestModel']['details'], '{"z":"vz","y":"yz","x":"xz"}');
  103. }
  104. /** OUTPUT **/
  105. public function testFieldsOnFind() {
  106. echo $this->_header(__FUNCTION__);
  107. $this->Comment->Behaviors->detach('Jsonable');
  108. $this->Comment->Behaviors->attach('Jsonable', array('fields'=>array('details')));
  109. $res = $this->Comment->find('first', array());
  110. $this->assertEqual($res['JsonableTestModel']['details'], array('x'=>'y'));
  111. pr($res);
  112. $this->Comment->Behaviors->detach('Jsonable');
  113. $this->Comment->Behaviors->attach('Jsonable', array('output'=>'param', 'fields'=>array('details')));
  114. $res = $this->Comment->find('first', array());
  115. pr($res);
  116. $this->assertEqual($res['JsonableTestModel']['details'], 'x:y');
  117. $this->Comment->Behaviors->detach('Jsonable');
  118. $this->Comment->Behaviors->attach('Jsonable', array('output'=>'list', 'fields'=>array('details')));
  119. $data = array(
  120. 'comment' => 'blabla',
  121. 'url' => 'www.dereuromark.de',
  122. 'name' => 'some Name',
  123. 'details' => '["z","y","x"]',
  124. );
  125. $res = $this->Comment->find('first', array(), $data);
  126. pr($res);
  127. $this->assertEqual($res['JsonableTestModel']['details'], 'z|y|x');
  128. echo BR.BR;
  129. $this->Comment->Behaviors->detach('Jsonable');
  130. $this->Comment->Behaviors->attach('Jsonable', array('output'=>'list', 'separator'=>', ', 'fields'=>array('details')));
  131. $data = array(
  132. 'comment' => 'blabla',
  133. 'url' => 'www.dereuromark.de',
  134. 'name' => 'some Name',
  135. 'details' => '["z","y","x"]',
  136. );
  137. $res = $this->Comment->find('first', array(), $data);
  138. pr($res);
  139. $this->assertEqual($res['JsonableTestModel']['details'], 'z, y, x');
  140. echo BR.BR;
  141. $res = $this->Comment->find('all', array(), $data);
  142. pr($res);
  143. $this->assertEqual($res[0]['JsonableTestModel']['details'], 'z, y, x');
  144. }
  145. }