JsonableBehaviorTest.php 5.0 KB

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