PageRenderTime 49ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/propelorm/Propel2
PHP | 304 lines | 203 code | 36 blank | 65 comment | 1 complexity | edc95d27ab636e70fe7af8e4c0766102 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 MyNameSpace\ComplexColumnTypeEntity2;
  9. use MyNameSpace\ComplexColumnTypeEntity2Query;
  10. use MyNameSpace\ComplexColumnTypeEntityWithConstructorQuery;
  11. use MyNameSpace\Map\ComplexColumnTypeEntity2TableMap;
  12. use Propel\Generator\Util\QuickBuilder;
  13. use Propel\Runtime\ActiveQuery\ModelCriteria;
  14. use Propel\Runtime\Propel;
  15. use Propel\Tests\Generator\Builder\Om\Fixtures\ComplexColumnTypeEntityWithConstructor;
  16. use Propel\Tests\TestCase;
  17. /**
  18. * Tests the generated objects for array column types accessor & mutator
  19. *
  20. * @author Francois Zaninotto
  21. */
  22. class GeneratedObjectArrayColumnTypeTest extends TestCase
  23. {
  24. /**
  25. * @return void
  26. */
  27. public function setUp(): void
  28. {
  29. if (!class_exists('MyNameSpace\\ComplexColumnTypeEntity2')) {
  30. $schema = <<<EOF
  31. <database name="generated_object_complex_type_test_2" namespace="MyNameSpace">
  32. <table name="complex_column_type_entity_2">
  33. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true"/>
  34. <column name="tags" type="ARRAY"/>
  35. <column name="value_set" type="ARRAY"/>
  36. <column name="defaults" type="ARRAY" defaultValue="FOO"/>
  37. <column name="multiple_defaults" type="ARRAY" defaultValue="FOO, BAR,BAZ"/>
  38. </table>
  39. </database>
  40. EOF;
  41. QuickBuilder::buildSchema($schema);
  42. }
  43. ComplexColumnTypeEntity2TableMap::doDeleteAll();
  44. }
  45. /**
  46. * @return void
  47. */
  48. public function testActiveRecordMethods()
  49. {
  50. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'getTags'));
  51. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'hasTag'));
  52. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'setTags'));
  53. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'addTag'));
  54. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'removeTag'));
  55. // only plural column names get a tester, an adder, and a remover method
  56. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'getValueSet'));
  57. $this->assertFalse(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'hasValueSet'));
  58. $this->assertTrue(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'setValueSet'));
  59. $this->assertFalse(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'addValueSet'));
  60. $this->assertFalse(method_exists('MyNameSpace\ComplexColumnTypeEntity2', 'removeValueSet'));
  61. }
  62. /**
  63. * @return void
  64. */
  65. public function testGetterDefaultValue()
  66. {
  67. $e = new ComplexColumnTypeEntity2();
  68. $this->assertEquals([], $e->getTags(), 'array columns return an empty array by default');
  69. }
  70. /**
  71. * @return void
  72. */
  73. public function testGetterDefaultValueWithData()
  74. {
  75. $e = new ComplexColumnTypeEntity2();
  76. $this->assertEquals(['FOO'], $e->getDefaults());
  77. }
  78. /**
  79. * @return void
  80. */
  81. public function testGetterDefaultValueWithMultipleData()
  82. {
  83. $e = new ComplexColumnTypeEntity2();
  84. $this->assertEquals(['FOO', 'BAR', 'BAZ'], $e->getMultipleDefaults());
  85. }
  86. /**
  87. * @return void
  88. */
  89. public function testAdderAddsNewValueToExistingData()
  90. {
  91. $e = new ComplexColumnTypeEntity2();
  92. $this->assertEquals(['FOO'], $e->getDefaults());
  93. $e->addDefault('bar');
  94. $this->assertEquals(['FOO', 'bar'], $e->getDefaults());
  95. }
  96. /**
  97. * @return void
  98. */
  99. public function testAdderAddsNewValueToMultipleExistingData()
  100. {
  101. $e = new ComplexColumnTypeEntity2();
  102. $this->assertEquals(['FOO', 'BAR', 'BAZ'], $e->getMultipleDefaults());
  103. $e->addMultipleDefault('bar');
  104. $this->assertEquals(['FOO', 'BAR', 'BAZ', 'bar'], $e->getMultipleDefaults());
  105. }
  106. /**
  107. * @return void
  108. */
  109. public function testDefaultValuesAreWellPersisted()
  110. {
  111. $e = new ComplexColumnTypeEntity2();
  112. $e->save();
  113. ComplexColumnTypeEntity2TableMap::clearInstancePool();
  114. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  115. $this->assertEquals(['FOO'], $e->getDefaults());
  116. }
  117. /**
  118. * @return void
  119. */
  120. public function testMultipleDefaultValuesAreWellPersisted()
  121. {
  122. $e = new ComplexColumnTypeEntity2();
  123. $e->save();
  124. ComplexColumnTypeEntity2TableMap::clearInstancePool();
  125. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  126. $this->assertEquals(['FOO', 'BAR', 'BAZ'], $e->getMultipleDefaults());
  127. }
  128. /**
  129. * @return void
  130. */
  131. public function testSetterArrayValue()
  132. {
  133. $e = new ComplexColumnTypeEntity2();
  134. $value = ['foo', 1234];
  135. $e->setTags($value);
  136. $this->assertEquals($value, $e->getTags(), 'array columns can store arrays');
  137. }
  138. /**
  139. * @return void
  140. */
  141. public function testGetterForArrayWithOnlyOneZeroValue()
  142. {
  143. $e = new ComplexColumnTypeEntity2();
  144. $value = [0];
  145. $e->setTags($value);
  146. $this->assertEquals($value, $e->getTags());
  147. }
  148. /**
  149. * @return void
  150. */
  151. public function testSetterResetValue()
  152. {
  153. $e = new ComplexColumnTypeEntity2();
  154. $value = ['foo', 1234];
  155. $e->setTags($value);
  156. $e->setTags([]);
  157. $this->assertEquals([], $e->getTags(), 'object columns can be reset');
  158. }
  159. /**
  160. * @return void
  161. */
  162. public function testTester()
  163. {
  164. $e = new ComplexColumnTypeEntity2();
  165. $this->assertFalse($e->hasTag('foo'));
  166. $this->assertFalse($e->hasTag(1234));
  167. $value = ['foo', 1234];
  168. $e->setTags($value);
  169. $this->assertTrue($e->hasTag('foo'));
  170. $this->assertTrue($e->hasTag(1234));
  171. $this->assertFalse($e->hasTag('bar'));
  172. $this->assertFalse($e->hasTag(12));
  173. }
  174. /**
  175. * @return void
  176. */
  177. public function testAdder()
  178. {
  179. $e = new ComplexColumnTypeEntity2();
  180. $e->addTag('foo');
  181. $this->assertEquals(['foo'], $e->getTags());
  182. $e->addTag(1234);
  183. $this->assertEquals(['foo', 1234], $e->getTags());
  184. $e->addTag('foo');
  185. $this->assertEquals(['foo', 1234, 'foo'], $e->getTags());
  186. $e->setTags([12, 34]);
  187. $e->addTag('foo');
  188. $this->assertEquals([12, 34, 'foo'], $e->getTags());
  189. }
  190. /**
  191. * @return void
  192. */
  193. public function testRemover()
  194. {
  195. $e = new ComplexColumnTypeEntity2();
  196. $e->removeTag('foo');
  197. $this->assertEquals([], $e->getTags());
  198. $e->setTags(['foo', 1234]);
  199. $e->removeTag('foo');
  200. $this->assertEquals([1234], $e->getTags());
  201. $e->removeTag(1234);
  202. $this->assertEquals([], $e->getTags());
  203. $e->setTags([12, 34, 1234]);
  204. $e->removeTag('foo');
  205. $this->assertEquals([12, 34, 1234], $e->getTags());
  206. $e->removeTag('1234');
  207. $this->assertEquals([12, 34], $e->getTags());
  208. }
  209. /**
  210. * @return void
  211. */
  212. public function testValueIsPersisted()
  213. {
  214. $e = new ComplexColumnTypeEntity2();
  215. $value = ['foo', 1234];
  216. $e->setTags($value);
  217. $e->save();
  218. ComplexColumnTypeEntity2TableMap::clearInstancePool();
  219. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  220. $this->assertEquals($value, $e->getTags(), 'array columns are persisted');
  221. }
  222. /**
  223. * @return void
  224. */
  225. public function testGetterDoesNotKeepValueBetweenTwoHydrationsWhenUsingOnDemandFormatter()
  226. {
  227. ComplexColumnTypeEntity2Query::create()->deleteAll();
  228. $e = new ComplexColumnTypeEntity2();
  229. $e->setTags([1, 2]);
  230. $e->save();
  231. $e = new ComplexColumnTypeEntity2();
  232. $e->setTags([3, 4]);
  233. $e->save();
  234. $q = ComplexColumnTypeEntity2Query::create()
  235. ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
  236. ->find();
  237. $tags = [];
  238. foreach ($q as $e) {
  239. $tags[] = $e->getTags();
  240. }
  241. $this->assertNotEquals($tags[0], $tags[1]);
  242. }
  243. /**
  244. * @return void
  245. */
  246. public function testHydrateOverwritePreviousValues()
  247. {
  248. $schema = <<<EOF
  249. <database name="generated_object_complex_type_test_with_constructor" namespace="MyNameSpace">
  250. <table name="complex_column_type_entity_with_constructor">
  251. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true"/>
  252. <column name="tags" type="ARRAY"/>
  253. </table>
  254. </database>
  255. EOF;
  256. QuickBuilder::buildSchema($schema);
  257. Propel::disableInstancePooling(); // need to be disabled to test the hydrate() method
  258. $obj = new ComplexColumnTypeEntityWithConstructor();
  259. $this->assertEquals(['foo', 'bar'], $obj->getTags());
  260. $obj->setTags(['baz']);
  261. $this->assertEquals(['baz'], $obj->getTags());
  262. $obj->save();
  263. $obj = ComplexColumnTypeEntityWithConstructorQuery::create()
  264. ->findOne();
  265. $this->assertEquals(['baz'], $obj->getTags());
  266. Propel::enableInstancePooling();
  267. }
  268. }