PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Propel/Tests/Generator/Builder/Om/GeneratedQueryArrayColumnTypeTest.php

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