PageRenderTime 43ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/propelorm/Propel
PHP | 237 lines | 192 code | 31 blank | 14 comment | 1 complexity | 21971f696c0a9f40bc9e8727e3fcb2f2 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 dirname(__FILE__) . '/../../../../../generator/lib/util/PropelQuickBuilder.php';
  10. require_once dirname(__FILE__) . '/../../../../../runtime/lib/Propel.php';
  11. /**
  12. * Tests the generated objects for array column types accessor & mutator
  13. *
  14. * @author Francois Zaninotto
  15. * @package generator.builder.om
  16. */
  17. class GeneratedObjectArrayColumnTypeTest extends PHPUnit_Framework_TestCase
  18. {
  19. public function setUp()
  20. {
  21. if (!class_exists('ComplexColumnTypeEntity2')) {
  22. $schema = <<<EOF
  23. <database name="generated_object_complex_type_test_2">
  24. <table name="complex_column_type_entity_2">
  25. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  26. <column name="tags" type="ARRAY" />
  27. <column name="value_set" type="ARRAY" />
  28. <column name="defaults" type="ARRAY" defaultValue="FOO" />
  29. <column name="multiple_defaults" type="ARRAY" defaultValue="FOO, BAR,BAZ" />
  30. </table>
  31. </database>
  32. EOF;
  33. PropelQuickBuilder::buildSchema($schema);
  34. }
  35. ComplexColumnTypeEntity2Peer::doDeleteAll();
  36. }
  37. public function testActiveRecordMethods()
  38. {
  39. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'getTags'));
  40. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'hasTag'));
  41. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'setTags'));
  42. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'addTag'));
  43. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'removeTag'));
  44. // only plural column names get a tester, an adder, and a remover method
  45. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'getValueSet'));
  46. $this->assertFalse(method_exists('ComplexColumnTypeEntity2', 'hasValueSet'));
  47. $this->assertTrue(method_exists('ComplexColumnTypeEntity2', 'setValueSet'));
  48. $this->assertFalse(method_exists('ComplexColumnTypeEntity2', 'addValueSet'));
  49. $this->assertFalse(method_exists('ComplexColumnTypeEntity2', 'removeValueSet'));
  50. }
  51. public function testGetterDefaultValue()
  52. {
  53. $e = new ComplexColumnTypeEntity2();
  54. $this->assertEquals(array(), $e->getValueSet(), 'array columns return an empty array by default');
  55. }
  56. public function testGetterDefaultValueWithData()
  57. {
  58. $e = new ComplexColumnTypeEntity2();
  59. $this->assertEquals(array('FOO'), $e->getDefaults());
  60. }
  61. public function testGetterDefaultValueWithMultipleData()
  62. {
  63. $e = new ComplexColumnTypeEntity2();
  64. $this->assertEquals(array('FOO', 'BAR', 'BAZ'), $e->getMultipleDefaults());
  65. }
  66. public function testAdderAddsNewValueToExistingData()
  67. {
  68. $e = new ComplexColumnTypeEntity2();
  69. $this->assertEquals(array('FOO'), $e->getDefaults());
  70. $e->addDefault('bar');
  71. $this->assertEquals(array('FOO', 'bar'), $e->getDefaults());
  72. }
  73. public function testAdderAddsNewValueToMultipleExistingData()
  74. {
  75. $e = new ComplexColumnTypeEntity2();
  76. $this->assertEquals(array('FOO', 'BAR', 'BAZ'), $e->getMultipleDefaults());
  77. $e->addMultipleDefault('bar');
  78. $this->assertEquals(array('FOO', 'BAR', 'BAZ', 'bar'), $e->getMultipleDefaults());
  79. }
  80. public function testDefaultValuesAreWellPersisted()
  81. {
  82. $e = new ComplexColumnTypeEntity2();
  83. $e->save();
  84. ComplexColumnTypeEntity2Peer::clearInstancePool();
  85. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  86. $this->assertEquals(array('FOO'), $e->getDefaults());
  87. }
  88. public function testMultipleDefaultValuesAreWellPersisted()
  89. {
  90. $e = new ComplexColumnTypeEntity2();
  91. $e->save();
  92. ComplexColumnTypeEntity2Peer::clearInstancePool();
  93. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  94. $this->assertEquals(array('FOO', 'BAR', 'BAZ'), $e->getMultipleDefaults());
  95. }
  96. public function testSetterArrayValue()
  97. {
  98. $e = new ComplexColumnTypeEntity2();
  99. $value = array('foo', 1234);
  100. $e->setTags($value);
  101. $this->assertEquals($value, $e->getTags(), 'array columns can store arrays');
  102. }
  103. public function testSetterResetValue()
  104. {
  105. $e = new ComplexColumnTypeEntity2();
  106. $value = array('foo', 1234);
  107. $e->setTags($value);
  108. $e->setTags(array());
  109. $this->assertEquals(array(), $e->getTags(), 'object columns can be reset');
  110. }
  111. public function testTester()
  112. {
  113. $e = new ComplexColumnTypeEntity2();
  114. $this->assertFalse($e->hasTag('foo'));
  115. $this->assertFalse($e->hasTag(1234));
  116. $value = array('foo', 1234);
  117. $e->setTags($value);
  118. $this->assertTrue($e->hasTag('foo'));
  119. $this->assertTrue($e->hasTag(1234));
  120. $this->assertFalse($e->hasTag('bar'));
  121. $this->assertFalse($e->hasTag(12));
  122. }
  123. public function testAdder()
  124. {
  125. $e = new ComplexColumnTypeEntity2();
  126. $e->addTag('foo');
  127. $this->assertEquals(array('foo'), $e->getTags());
  128. $e->addTag(1234);
  129. $this->assertEquals(array('foo', 1234), $e->getTags());
  130. $e->addTag('foo');
  131. $this->assertEquals(array('foo', 1234, 'foo'), $e->getTags());
  132. $e->setTags(array(12, 34));
  133. $e->addTag('foo');
  134. $this->assertEquals(array(12, 34, 'foo'), $e->getTags());
  135. }
  136. public function testRemover()
  137. {
  138. $e = new ComplexColumnTypeEntity2();
  139. $e->removeTag('foo');
  140. $this->assertEquals(array(), $e->getTags());
  141. $e->setTags(array('foo', 1234));
  142. $e->removeTag('foo');
  143. $this->assertEquals(array(1234), $e->getTags());
  144. $e->removeTag(1234);
  145. $this->assertEquals(array(), $e->getTags());
  146. $e->setTags(array(12, 34, 1234));
  147. $e->removeTag('foo');
  148. $this->assertEquals(array(12, 34, 1234), $e->getTags());
  149. $e->removeTag('1234');
  150. $this->assertEquals(array(12, 34), $e->getTags());
  151. }
  152. public function testValueIsPersisted()
  153. {
  154. $e = new ComplexColumnTypeEntity2();
  155. $value = array('foo', 1234);
  156. $e->setTags($value);
  157. $e->save();
  158. ComplexColumnTypeEntity2Peer::clearInstancePool();
  159. $e = ComplexColumnTypeEntity2Query::create()->findOne();
  160. $this->assertEquals($value, $e->getTags(), 'array columns are persisted');
  161. }
  162. public function testGetterDoesNotKeepValueBetweenTwoHydrationsWhenUsingOnDemandFormatter()
  163. {
  164. ComplexColumnTypeEntity2Query::create()->deleteAll();
  165. $e = new ComplexColumnTypeEntity2();
  166. $e->setTags(array(1,2));
  167. $e->save();
  168. $e = new ComplexColumnTypeEntity2();
  169. $e->setTags(array(3,4));
  170. $e->save();
  171. $q = ComplexColumnTypeEntity2Query::create()
  172. ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
  173. ->find();
  174. $tags = array();
  175. foreach ($q as $e) {
  176. $tags[] = $e->getTags();
  177. }
  178. $this->assertNotEquals($tags[0], $tags[1]);
  179. }
  180. public function testHydrateOverwritePreviousValues()
  181. {
  182. $schema = <<<EOF
  183. <database name="generated_object_complex_type_test_with_constructor">
  184. <table name="complex_column_type_entity_with_constructor">
  185. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  186. <column name="tags" type="ARRAY" />
  187. </table>
  188. </database>
  189. EOF;
  190. $builder = new PropelQuickBuilder();
  191. $builder->setSchema($schema);
  192. $builder->setClassTargets(array('tablemap', 'peer', 'object', 'query', 'peerstub', 'querystub'));
  193. $builder->build();
  194. require_once dirname(__FILE__) . '/fixtures/ComplexColumnTypeEntityWithConstructor.php';
  195. Propel::disableInstancePooling(); // need to be disabled to test the hydrate() method
  196. $obj = new ComplexColumnTypeEntityWithConstructor();
  197. $this->assertEquals(array('foo', 'bar'), $obj->getTags());
  198. $obj->setTags(array('baz'));
  199. $this->assertEquals(array('baz'), $obj->getTags());
  200. $obj->save();
  201. $obj = ComplexColumnTypeEntityWithConstructorQuery::create()
  202. ->findOne();
  203. $this->assertEquals(array('baz'), $obj->getTags());
  204. Propel::enableInstancePooling();
  205. }
  206. }