JsonableBehaviorTest.php 4.9 KB

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