PageRenderTime 72ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

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

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