PageRenderTime 38ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

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

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