/test/unit/sfFormFilterPropelTest.php

https://github.com/jaugustin/sfPropelORMPlugin · PHP · 253 lines · 216 code · 37 blank · 0 comment · 1 complexity · 7ac85dc1f6cee224caba9c89dda26b7c MD5 · raw file

  1. <?php
  2. require_once(dirname(__FILE__).'/../bootstrap/unit.php');
  3. class BaseForm extends sfFormSymfony {}
  4. class MockMerged extends BaseObject {
  5. const PEER = 'MockMergedPeer';
  6. }
  7. class MockEmbedded extends BaseObject {
  8. const PEER = 'MockEmbeddedPeer';
  9. }
  10. class MockModel extends BaseObject {
  11. const PEER = 'MockModelPeer';
  12. }
  13. class MockPeer {
  14. static public function translateFieldName($name, $fromType, $toType)
  15. {
  16. $inflector = new sfInflector();
  17. return ucfirst($inflector->camelize($name));
  18. }
  19. }
  20. class MockMergedPeer extends MockPeer {}
  21. class MockEmbeddedPeer extends MockPeer {}
  22. class MockModelPeer extends MockPeer {}
  23. class MockMergedQuery extends ModelCriteria {
  24. public static $my_filter_counter = 0;
  25. public static $merged_counter = 0;
  26. const PEER = 'MockMergedPeer';
  27. public function __construct($dbName = 'propel', $modelName = 'MockMerged', $modelAlias = null)
  28. {
  29. parent::__construct($dbName, $modelName, $modelAlias);
  30. }
  31. }
  32. class MockEmbeddedQuery extends ModelCriteria {
  33. public static $my_filter_counter = 0;
  34. public static $embedded_counter = 0;
  35. const PEER = 'MockEmbeddedPeer';
  36. public function __construct($dbName = 'propel', $modelName = 'MockEmbedded', $modelAlias = null)
  37. {
  38. parent::__construct($dbName, $modelName, $modelAlias);
  39. }
  40. }
  41. class MockModelQuery extends ModelCriteria {
  42. const PEER = 'MockModelPeer';
  43. public function __construct($dbName = 'propel', $modelName = 'MockModel', $modelAlias = null)
  44. {
  45. parent::__construct($dbName, $modelName, $modelAlias);
  46. }
  47. }
  48. class MockTableMap extends TableMap {
  49. public function getClassname() {
  50. $matches = array();
  51. preg_match('#^(\w+)TableMap#', get_class($this), $matches);
  52. return $matches[1];
  53. }
  54. public function getName() {return $this->getClassname();}
  55. }
  56. class MockMergedTableMap extends MockTableMap {}
  57. class MockEmbeddedTableMap extends MockTableMap {}
  58. class MockModelTableMap extends MockTableMap {}
  59. abstract class MockFilter extends sfFormFilterPropel {
  60. public static $calls = array(
  61. 'MockFilterMerged' => array(),
  62. 'MockFilterEmbedded' => array(),
  63. 'MockModelFilter' => array(),);
  64. protected function addTextCriteria(Criteria $criteria, $field, $values)
  65. {
  66. if (!isset(self::$calls[get_class($this)][$field]))
  67. {
  68. self::$calls[get_class($this)][$field] = 1;
  69. }
  70. else
  71. {
  72. self::$calls[get_class($this)][$field] += 1;
  73. }
  74. return parent::addTextCriteria($criteria, $field, $values);
  75. }
  76. }
  77. class MockFilterMerged extends MockFilter
  78. {
  79. public function configure()
  80. {
  81. $this->setValidators(array(
  82. 'merged_filter' => new sfValidatorPass(array('required' => false)),
  83. ));
  84. }
  85. public function getModelName() { return 'MockMerged'; }
  86. public function getFields()
  87. {
  88. return array(
  89. 'my_filter' => 'Text',
  90. 'merged_filter' => 'Text'
  91. );
  92. }
  93. }
  94. class MockFilterEmbedded extends MockFilter
  95. {
  96. public function configure()
  97. {
  98. $this->setValidators(array(
  99. 'embedded_filter' => new sfValidatorPass(array('required' => false)),
  100. ));
  101. }
  102. public function getModelName() { return 'MockEmbedded'; }
  103. public function getFields()
  104. {
  105. return array(
  106. 'my_filter' => 'Text',
  107. 'embedded_filter' => 'Text'
  108. );
  109. }
  110. }
  111. class MockModelFilter extends MockFilter
  112. {
  113. public function getModelName() { return 'MockModel'; }
  114. public function configure()
  115. {
  116. $this->setValidators(array(
  117. 'my_filter' => new sfValidatorPass(array('required' => false)),
  118. ));
  119. }
  120. public function getFields()
  121. {
  122. return array(
  123. 'my_filter' => 'Text',
  124. );
  125. }
  126. }
  127. class sfFormFilterPropelTest extends lime_test
  128. {
  129. public function assert_embedded_form_count($filter, $expected, $message = null)
  130. {
  131. $message = is_null($message)
  132. ? sprintf('%d embedded forms expected.', $expected)
  133. : $message;
  134. $this->is(count($filter->getEmbeddedForms()), $expected, $message);
  135. return $this;
  136. }
  137. public function assert_merged_form_count($filter, $expected, $message = null)
  138. {
  139. $message = is_null($message)
  140. ? sprintf('%d merged forms expected.', $expected)
  141. : $message;
  142. $this->is(count($filter->getMergedForms()), $expected, $message);
  143. return $this;
  144. }
  145. public function assert_bind_error($filter, $values, $error_message, $message = null)
  146. {
  147. $message = is_null($message)
  148. ? 'Error validating data.'
  149. : $message;
  150. try
  151. {
  152. $filter->buildCriteria($values);
  153. $this->fail($message);
  154. }
  155. catch(Exception $e)
  156. {
  157. $this->is($e->getMessage(), $error_message, $message);
  158. }
  159. return $this;
  160. }
  161. public function assert_bind_ok($filter, $values, $message = null)
  162. {
  163. $message = is_null($message)
  164. ? 'Data validated.'
  165. : $message;
  166. try
  167. {
  168. $filter->buildCriteria($values);
  169. $this->pass($message);
  170. }
  171. catch(Exception $e)
  172. {
  173. $this->fail($message);
  174. $this->set_last_test_errors(array(
  175. sprintf(' exception: %s', get_class($e)),
  176. sprintf(' message: %s', $e->getMessage())));
  177. }
  178. return $this;
  179. }
  180. public function reset_counters()
  181. {
  182. MockFilter::$calls = array(
  183. 'MockFilterMerged' => array(),
  184. 'MockFilterEmbedded' => array(),
  185. 'MockModelFilter' => array(),);
  186. }
  187. }
  188. $t = new sfFormFilterPropelTest(15);
  189. $map = new MockModelTableMap();
  190. $t->is($map->getClassname(), 'MockModel', 'TableMap getTableName is ok');
  191. $filter = new MockModelFilter();
  192. $t->diag('check merged forms are accessible');
  193. $t->assert_embedded_form_count($filter, 0);
  194. $t->assert_merged_form_count($filter, 0);
  195. $filter = new MockModelFilter();
  196. $t->assert_bind_ok($filter, array('my_filter' => array('text' => '')), 'Validate values');
  197. $filter = new MockModelFilter();
  198. $t->assert_bind_ok($filter, array('my_filter' => array('text' => ''),
  199. 'merged_filter' => array('text' => 'merged')), 'Allow extra parameters');
  200. $filter = new MockModelFilter();
  201. $filter->mergeForm(new MockFilterMerged());
  202. $filter->embedForm('embedded', new MockFilterEmbedded());
  203. $t->assert_embedded_form_count($filter, 1);
  204. $t->assert_merged_form_count($filter, 1);
  205. $t->reset_counters();
  206. $t->assert_bind_ok($filter, array('my_filter' => array('text' => ''),
  207. 'merged_filter' => array('text' => 'merged'),
  208. 'embedded' => array(
  209. 'embedded_filter' => array('text' => 'embedded'))), 'Can validate merged and embedded forms.');
  210. $t->is(MockFilter::$calls['MockModelFilter']['my_filter'], 1, '1 call for Model MyFilter');
  211. $t->ok(!isset(MockFilter::$calls['MockModelFilter']['embedded_filter']), 'no call for Model EmbeddedFilter');
  212. $t->ok(!isset(MockFilter::$calls['MockModelFilter']['merged_filter']), 'no call for Model MergedFilter');
  213. $t->ok(!isset(MockFilter::$calls['MockFilterEmbedded']['my_filter']), 'no call for MockEmbedded MyFilter');
  214. $t->is(MockFilter::$calls['MockFilterEmbedded']['embedded_filter'], 1, '1 call for MockEmbedded EmbeddedFilter');
  215. $t->ok(!isset(MockFilter::$calls['MockFilterMerged']['my_filter']), 'no call for MockMerged MyFilter');
  216. $t->is(MockFilter::$calls['MockFilterMerged']['merged_filter'], 1, '1 call for MockMerged MergedFilter');