PageRenderTime 48ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/test/testsuite/generator/builder/om/GeneratedQueryArrayColumnTypeTest.php

http://github.com/propelorm/Propel
PHP | 226 lines | 199 code | 13 blank | 14 comment | 1 complexity | 97cdcbcb378161b12f150cb4ed0dcda7 MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the Propel package.
  4. * For the full copyright and license information, please view the LICENSE
  5. * file that was distributed with this source code.
  6. *
  7. * @license MIT License
  8. */
  9. require_once dirname(__FILE__) . '/../../../../../generator/lib/util/PropelQuickBuilder.php';
  10. require_once dirname(__FILE__) . '/../../../../../runtime/lib/Propel.php';
  11. /**
  12. * Tests the generated queries for array column types filters
  13. *
  14. * @author Francois Zaninotto
  15. * @package generator.builder.om
  16. */
  17. class GeneratedQueryArrayColumnTypeTest extends PHPUnit_Framework_TestCase
  18. {
  19. public function setUp()
  20. {
  21. if (!class_exists('ComplexColumnTypeEntity11')) {
  22. $schema = <<<EOF
  23. <database name="generated_object_complex_type_test_11">
  24. <table name="complex_column_type_entity_11">
  25. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  26. <column name="tags" type="ARRAY" />
  27. <column name="value_set" type="ARRAY" />
  28. </table>
  29. </database>
  30. EOF;
  31. PropelQuickBuilder::buildSchema($schema);
  32. $e0 = new ComplexColumnTypeEntity11();
  33. $e0->save();
  34. $e1 = new ComplexColumnTypeEntity11();
  35. $e1->setTags(array('foo', 'bar', 'baz'));
  36. $e1->save();
  37. $e2 = new ComplexColumnTypeEntity11();
  38. $e2->setTags(array('bar'));
  39. $e2->save();
  40. $e3 = new ComplexColumnTypeEntity11();
  41. $e3->setTags(array('bar23'));
  42. $e3->save();
  43. }
  44. }
  45. public function testActiveQueryMethods()
  46. {
  47. $this->assertTrue(method_exists('ComplexColumnTypeEntity11Query', 'filterByTags'));
  48. $this->assertTrue(method_exists('ComplexColumnTypeEntity11Query', 'filterByTag'));
  49. // only plural column names get a singular filter
  50. $this->assertTrue(method_exists('ComplexColumnTypeEntity11Query', 'filterByValueSet'));
  51. }
  52. public function testColumnHydration()
  53. {
  54. $e = ComplexColumnTypeEntity11Query::create()->orderById()->offset(1)->findOne();
  55. $this->assertEquals(array('foo', 'bar', 'baz'), $e->getTags(), 'array columns are correctly hydrated');
  56. }
  57. public function testWhere()
  58. {
  59. $e = ComplexColumnTypeEntity11Query::create()
  60. ->where('ComplexColumnTypeEntity11.Tags LIKE ?', '%| bar23 |%')
  61. ->find();
  62. $this->assertEquals(1, $e->count());
  63. $this->assertEquals(array('bar23'), $e[0]->getTags(), 'array columns are searchable by serialized object using where()');
  64. $e = ComplexColumnTypeEntity11Query::create()
  65. ->where('ComplexColumnTypeEntity11.Tags = ?', array('bar23'))
  66. ->find();
  67. $this->assertEquals(1, $e->count());
  68. $this->assertEquals(array('bar23'), $e[0]->getTags(), 'array columns are searchable by object using where()');
  69. }
  70. public function testFilterByColumn()
  71. {
  72. $e = ComplexColumnTypeEntity11Query::create()
  73. ->filterByTags(array('bar'))
  74. ->orderById()
  75. ->find();
  76. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags(), 'array columns are searchable by element');
  77. $this->assertEquals(array('bar'), $e[1]->getTags(), 'array columns are searchable by element');
  78. $this->assertEquals(2, $e->count(), 'array columns do not return false positives');
  79. $e = ComplexColumnTypeEntity11Query::create()
  80. ->filterByTags(array('bar23'))
  81. ->findOne();
  82. $this->assertEquals(array('bar23'), $e->getTags(), 'array columns are searchable by element');
  83. }
  84. public function testFilterByColumnUsingContainsAll()
  85. {
  86. $e = ComplexColumnTypeEntity11Query::create()
  87. ->filterByTags(array(), Criteria::CONTAINS_ALL)
  88. ->find();
  89. $this->assertEquals(4, $e->count());
  90. $e = ComplexColumnTypeEntity11Query::create()
  91. ->filterByTags(array('bar'), Criteria::CONTAINS_ALL)
  92. ->orderById()
  93. ->find();
  94. $this->assertEquals(2, $e->count());
  95. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags());
  96. $this->assertEquals(array('bar'), $e[1]->getTags());
  97. $e = ComplexColumnTypeEntity11Query::create()
  98. ->filterByTags(array('bar23'), Criteria::CONTAINS_ALL)
  99. ->find();
  100. $this->assertEquals(1, $e->count());
  101. $this->assertEquals(array('bar23'), $e[0]->getTags());
  102. $e = ComplexColumnTypeEntity11Query::create()
  103. ->filterByTags(array('foo', 'bar'), Criteria::CONTAINS_ALL)
  104. ->find();
  105. $this->assertEquals(1, $e->count());
  106. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags());
  107. $e = ComplexColumnTypeEntity11Query::create()
  108. ->filterByTags(array('foo', 'bar23'), Criteria::CONTAINS_ALL)
  109. ->find();
  110. $this->assertEquals(0, $e->count());
  111. }
  112. public function testFilterByColumnUsingContainsSome()
  113. {
  114. $e = ComplexColumnTypeEntity11Query::create()
  115. ->filterByTags(array(), Criteria::CONTAINS_SOME)
  116. ->find();
  117. $this->assertEquals(4, $e->count());
  118. $e = ComplexColumnTypeEntity11Query::create()
  119. ->filterByTags(array('bar'), Criteria::CONTAINS_SOME)
  120. ->orderById()
  121. ->find();
  122. $this->assertEquals(2, $e->count());
  123. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags());
  124. $this->assertEquals(array('bar'), $e[1]->getTags());
  125. $e = ComplexColumnTypeEntity11Query::create()
  126. ->filterByTags(array('bar23'), Criteria::CONTAINS_SOME)
  127. ->find();
  128. $this->assertEquals(1, $e->count());
  129. $this->assertEquals(array('bar23'), $e[0]->getTags());
  130. $e = ComplexColumnTypeEntity11Query::create()
  131. ->filterByTags(array('foo', 'bar'), Criteria::CONTAINS_SOME)
  132. ->orderById()
  133. ->find();
  134. $this->assertEquals(2, $e->count());
  135. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags());
  136. $this->assertEquals(array('bar'), $e[1]->getTags());
  137. $e = ComplexColumnTypeEntity11Query::create()
  138. ->filterByTags(array('foo', 'bar23'), Criteria::CONTAINS_SOME)
  139. ->find();
  140. $this->assertEquals(2, $e->count());
  141. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags());
  142. $this->assertEquals(array('bar23'), $e[1]->getTags());
  143. }
  144. public function testFilterByColumnUsingContainsNone()
  145. {
  146. $e = ComplexColumnTypeEntity11Query::create()
  147. ->filterByTags(array(), Criteria::CONTAINS_NONE)
  148. ->find();
  149. $this->assertEquals(1, $e->count());
  150. $this->assertEquals(array(), $e[0]->getTags());
  151. $e = ComplexColumnTypeEntity11Query::create()
  152. ->filterByTags(array('bar'), Criteria::CONTAINS_NONE)
  153. ->orderById()
  154. ->find();
  155. $this->assertEquals(2, $e->count());
  156. $this->assertEquals(array(), $e[0]->getTags());
  157. $this->assertEquals(array('bar23'), $e[1]->getTags());
  158. $e = ComplexColumnTypeEntity11Query::create()
  159. ->filterByTags(array('bar23'), Criteria::CONTAINS_NONE)
  160. ->find();
  161. $this->assertEquals(3, $e->count());
  162. $this->assertEquals(array(), $e[0]->getTags());
  163. $this->assertEquals(array('foo', 'bar', 'baz'), $e[1]->getTags());
  164. $this->assertEquals(array('bar'), $e[2]->getTags());
  165. $e = ComplexColumnTypeEntity11Query::create()
  166. ->filterByTags(array('foo', 'bar'), Criteria::CONTAINS_NONE)
  167. ->orderById()
  168. ->find();
  169. $this->assertEquals(2, $e->count());
  170. $this->assertEquals(array(), $e[0]->getTags());
  171. $this->assertEquals(array('bar23'), $e[1]->getTags());
  172. $e = ComplexColumnTypeEntity11Query::create()
  173. ->filterByTags(array('foo', 'bar23'), Criteria::CONTAINS_NONE)
  174. ->find();
  175. $this->assertEquals(2, $e->count());
  176. $this->assertEquals(array(), $e[0]->getTags());
  177. $this->assertEquals(array('bar'), $e[1]->getTags());
  178. }
  179. public function testFilterBySingularColumn()
  180. {
  181. $e = ComplexColumnTypeEntity11Query::create()
  182. ->filterByTag('bar')
  183. ->orderById()
  184. ->find();
  185. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags(), 'array columns are searchable by element');
  186. $this->assertEquals(array('bar'), $e[1]->getTags(), 'array columns are searchable by element');
  187. $this->assertEquals(2, $e->count(), 'array columns do not return false positives');
  188. $e = ComplexColumnTypeEntity11Query::create()
  189. ->filterByTag('bar23')
  190. ->findOne();
  191. $this->assertEquals(array('bar23'), $e->getTags(), 'array columns are searchable by element');
  192. }
  193. public function testFilterBySingularColumnUsingContainsAll()
  194. {
  195. $e = ComplexColumnTypeEntity11Query::create()
  196. ->filterByTag('bar', Criteria::CONTAINS_ALL)
  197. ->orderById()
  198. ->find();
  199. $this->assertEquals(2, $e->count(), 'array columns are searchable by element using Criteria::CONTAINS_ALL');
  200. $this->assertEquals(array('foo', 'bar', 'baz'), $e[0]->getTags(), 'array columns are searchable by element using Criteria::CONTAINS_ALL');
  201. $this->assertEquals(array('bar'), $e[1]->getTags(), 'array columns are searchable by element using Criteria::CONTAINS_ALL');
  202. }
  203. public function testFilterBySingularColumnUsingContainsNone()
  204. {
  205. $e = ComplexColumnTypeEntity11Query::create()
  206. ->filterByTag('bar', Criteria::CONTAINS_NONE)
  207. ->orderById()
  208. ->find();
  209. $this->assertEquals(2, $e->count(), 'array columns are searchable by element using Criteria::CONTAINS_NONE');
  210. $this->assertEquals(array(), $e[0]->getTags(), 'array columns are searchable by element using Criteria::CONTAINS_NONE');
  211. $this->assertEquals(array('bar23'), $e[1]->getTags(), 'array columns are searchable by element using Criteria::CONTAINS_NONE');
  212. }
  213. }