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

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

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