/tests/Kwf/Form/MultiFields/Test.php

https://github.com/koala-framework/koala-framework · PHP · 253 lines · 226 code · 24 blank · 3 comment · 0 complexity · b5965d6b33f8d2138237d1942ff5de29 MD5 · raw file

  1. <?php
  2. /**
  3. * @group Form_MultiFields
  4. */
  5. class Kwf_Form_MultiFields_Test extends Kwf_Test_TestCase
  6. {
  7. public function setUp()
  8. {
  9. parent::setUp();
  10. Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')
  11. ->setData(array(
  12. array('id'=>1, 'blub'=>'blub0'),
  13. array('id'=>2, 'blub'=>'blub1'),
  14. array('id'=>3, 'blub'=>'blub2'),
  15. ));
  16. Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel2')
  17. ->setData(array(
  18. array('id'=>1, 'model1_id'=>1, 'foo'=>'foo0', 'bar'=>'bar0', 'pos'=>1),
  19. array('id'=>2, 'model1_id'=>1, 'foo'=>'foo1', 'bar'=>'bar1', 'pos'=>2),
  20. array('id'=>3, 'model1_id'=>2, 'foo'=>'foo2', 'bar'=>'bar2', 'pos'=>1),
  21. array('id'=>4, 'model1_id'=>3, 'foo'=>'foo0', 'pos'=>1),
  22. array('id'=>5, 'model1_id'=>3, 'foo'=>'foo1', 'pos'=>2),
  23. array('id'=>6, 'model1_id'=>3, 'foo'=>'foo2', 'pos'=>3),
  24. ));
  25. Kwf_Component_Data_Root::setComponentClass(false); //damit ModelObserver nichts macht
  26. }
  27. public function testSimple()
  28. {
  29. $m1 = new Kwf_Model_FnF();
  30. $m2 = new Kwf_Model_FnF();
  31. $form = new Kwf_Form();
  32. $form->setModel($m1);
  33. $form->add(new Kwf_Form_Field_TextField('test1'));
  34. $form->add(new Kwf_Form_Field_MultiFields($m2))
  35. ->setReferences(array(
  36. 'columns' => array('test1_id'),
  37. 'refColumns' => array('id'),
  38. ))
  39. ->fields->add(new Kwf_Form_Field_TextField('test2'));
  40. $post = array(
  41. 'test1' => 'blub',
  42. 'Kwf_Model_FnF' => array(
  43. array('test2' => 'bab')
  44. )
  45. );
  46. $post = $form->processInput(null, $post);
  47. $form->validate(null, $post);
  48. $form->prepareSave(null, $post);
  49. $form->save(null, $post);
  50. $form->afterSave(null, $post);
  51. $r = $m1->getRow(1);
  52. $this->assertEquals('blub', $r->test1);
  53. $r = $m2->getRow(1);
  54. $this->assertEquals('bab', $r->test2);
  55. $this->assertEquals(1, $r->test1_id);
  56. }
  57. public function testWithComplexValidate()
  58. {
  59. $m1 = new Kwf_Model_FnF(array('data'=>array(
  60. array('id'=>1, 'test1'=>'bam')
  61. )));
  62. $m2 = new Kwf_Model_FnF(array('data'=>array(
  63. array('id'=>1, 'test1_id'=>1, 'test2'=>'bab')
  64. )));
  65. $form = new Kwf_Form();
  66. $form->setModel($m1);
  67. $form->add(new Kwf_Form_Field_TextField('test1'));
  68. $form->add(new Kwf_Form_Field_MultiFields($m2))
  69. ->setReferences(array(
  70. 'columns' => array('test1_id'),
  71. 'refColumns' => array('id'),
  72. ))
  73. ->fields->add(new Kwf_Form_Field_TextField('test2'))
  74. ->addValidator(new Kwf_Validate_Row_Unique());;
  75. $post = array(
  76. 'test1' => 'blub',
  77. 'Kwf_Model_FnF' => array(
  78. array('test2' => 'bab')
  79. )
  80. );
  81. $post = $form->processInput(null, $post);
  82. $this->assertEquals(1, count($form->validate(null, $post)));
  83. }
  84. public function testWithRelations()
  85. {
  86. $form = new Kwf_Form();
  87. $form->setModel(Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1'));
  88. $form->add(new Kwf_Form_Field_TextField('blub'));
  89. $form->add(new Kwf_Form_Field_MultiFields('Model2'))
  90. ->fields->add(new Kwf_Form_Field_TextField('foo'));
  91. $post = array(
  92. 'blub' => 'blab',
  93. 'Model2' => array(
  94. array('foo' => 'bab')
  95. )
  96. );
  97. $post = $form->processInput(null, $post);
  98. $form->validate(null, $post);
  99. $form->prepareSave(null, $post);
  100. $form->save(null, $post);
  101. $form->afterSave(null, $post);
  102. $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')->getRow(4);
  103. $this->assertEquals('blab', $r->blub);
  104. $this->assertEquals(4, $r->id);
  105. $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel2')->getRow(7);
  106. $this->assertEquals('bab', $r->foo);
  107. $this->assertEquals(4, $r->model1_id);
  108. }
  109. public function testWithPosInsert()
  110. {
  111. $form = new Kwf_Form();
  112. $form->setModel(Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1'));
  113. $form->add(new Kwf_Form_Field_MultiFields('Model2'))
  114. ->fields->add(new Kwf_Form_Field_TextField('foo'));
  115. $post = array(
  116. 'Model2' => array(
  117. array('foo' => 'bab1'),
  118. array('foo' => 'bab2'),
  119. array('foo' => 'bab3')
  120. )
  121. );
  122. $post = $form->processInput(null, $post);
  123. $form->validate(null, $post);
  124. $form->prepareSave(null, $post);
  125. $form->save(null, $post);
  126. $form->afterSave(null, $post);
  127. $s = new Kwf_Model_Select();
  128. $s->order('pos');
  129. $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')->getRow(4);
  130. $data = $r->getChildRows('Model2', $s)->toArray();
  131. $this->assertEquals('bab1', $data[0]['foo']);
  132. $this->assertEquals('bab2', $data[1]['foo']);
  133. $this->assertEquals('bab3', $data[2]['foo']);
  134. }
  135. public function testUpdate()
  136. {
  137. $form = new Kwf_Form();
  138. $form->setModel(Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1'));
  139. $form->add(new Kwf_Form_Field_MultiFields('Model2'))
  140. ->fields->add(new Kwf_Form_Field_TextField('foo'));
  141. $post = array(
  142. 'Model2' => array(
  143. array('foo' => 'blub0'),
  144. array('foo' => 'blub1'),
  145. array('foo' => 'blub2'),
  146. )
  147. );
  148. $form->setId(3);
  149. $post = $form->processInput(null, $post);
  150. $form->validate(null, $post);
  151. $form->prepareSave(null, $post);
  152. $form->save(null, $post);
  153. $form->afterSave(null, $post);
  154. $s = new Kwf_Model_Select();
  155. $s->order('foo');
  156. $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')->getRow(3);
  157. $data = $r->getChildRows('Model2', $s)->toArray();
  158. $this->assertEquals('blub0', $data[0]['foo']);
  159. $this->assertEquals('blub1', $data[1]['foo']);
  160. $this->assertEquals('blub2', $data[2]['foo']);
  161. }
  162. public function testWithPosUpdateAndMove()
  163. {
  164. $form = new Kwf_Form();
  165. $form->setModel(Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1'));
  166. $form->add(new Kwf_Form_Field_MultiFields('Model2'))
  167. ->fields->add(new Kwf_Form_Field_TextField('foo'));
  168. $post = array(
  169. 'Model2' => array(
  170. array('id'=>6, 'foo' => 'blub2'), //moved to top
  171. array('id'=>4, 'foo' => 'blub0'),
  172. array('id'=>5, 'foo' => 'blub1'),
  173. )
  174. );
  175. $form->setId(3);
  176. $post = $form->processInput(null, $post);
  177. $form->validate(null, $post);
  178. $form->prepareSave(null, $post);
  179. $form->save(null, $post);
  180. $form->afterSave(null, $post);
  181. $s = new Kwf_Model_Select();
  182. $s->order('pos');
  183. $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')->getRow(3);
  184. $data = $r->getChildRows('Model2', $s)->toArray();
  185. $this->assertEquals('blub2', $data[0]['foo']);
  186. $this->assertEquals('blub0', $data[1]['foo']);
  187. $this->assertEquals('blub1', $data[2]['foo']);
  188. }
  189. public function testDeleteWithFieldRows()
  190. {
  191. $form = new Kwf_Form();
  192. $model = new Kwf_Model_FnF(array(
  193. 'dependentModels' => array(
  194. 'Model2' => new Kwf_Model_FieldRows(array('fieldName'=>'data'))
  195. ),
  196. 'data' => array(
  197. array('id'=>1, 'data'=>serialize(array(
  198. 'data' => array(
  199. array('id' => 1, 'foo'=>'foo1', 'pos'=>1),
  200. array('id' => 2, 'foo'=>'foo2', 'pos'=>2),
  201. array('id' => 3, 'foo'=>'foo3', 'pos'=>3),
  202. ),
  203. 'autoId' => 4
  204. )))
  205. )
  206. ));
  207. $form->setModel($model);
  208. $form->add(new Kwf_Form_Field_MultiFields('Model2'))
  209. ->fields->add(new Kwf_Form_Field_TextField('foo'));
  210. $post = array(
  211. 'Model2' => array(
  212. array('id'=>1, 'foo' => 'foo1.'),
  213. array('id'=>3, 'foo' => 'foo3.'),
  214. )
  215. );
  216. $form->setId(1);
  217. $post = $form->processInput(null, $post);
  218. $form->validate(null, $post);
  219. $form->prepareSave(null, $post);
  220. $form->save(null, $post);
  221. $form->afterSave(null, $post);
  222. $data = $model->getData();
  223. $data = unserialize($data[0]['data']);
  224. $data = array_values($data['data']);
  225. $this->assertEquals(2, count($data));
  226. $this->assertEquals('foo1.', $data[0]['foo']);
  227. $this->assertEquals('foo3.', $data[1]['foo']);
  228. }
  229. }