/tests/Propel/Tests/Generator/Behavior/Archivable/ArchivableBehaviorQueryBuilderModifierTest.php

https://github.com/vworldat/Propel2 · PHP · 284 lines · 242 code · 27 blank · 15 comment · 1 complexity · faa5c040ea248b1ec695a3117704efee MD5 · raw file

  1. <?php
  2. /*
  3. * $Id$
  4. * This file is part of the Propel package.
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. *
  8. * @license MIT License
  9. */
  10. namespace Propel\Tests\Generator\Behavior\Archivable;
  11. use Propel\Generator\Util\PropelQuickBuilder;
  12. use Propel\Generator\Behavior\Archivable\ArchivableBehavior;
  13. use Propel\Runtime\Propel;
  14. /**
  15. * Tests for ArchivableBehavior class
  16. *
  17. * @author François Zaninotto
  18. * @version $Revision$
  19. * @package generator.behavior.archivable
  20. */
  21. class ArchivableBehaviorQueryBuilderModifierTest extends \PHPUnit_Framework_TestCase
  22. {
  23. public function setUp()
  24. {
  25. if (!class_exists('ArchivableTest100')) {
  26. $schema = <<<EOF
  27. <database name="archivable_behavior_test_100">
  28. <table name="archivable_test_100">
  29. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
  30. <column name="title" type="VARCHAR" size="100" primaryString="true" />
  31. <column name="age" type="INTEGER" />
  32. <column name="foo_id" type="INTEGER" />
  33. <foreign-key foreignTable="archivable_test_200">
  34. <reference local="foo_id" foreign="id" />
  35. </foreign-key>
  36. <index>
  37. <index-column name="title" />
  38. <index-column name="age" />
  39. </index>
  40. <behavior name="archivable" />
  41. </table>
  42. <table name="archivable_test_200">
  43. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
  44. <column name="title" type="VARCHAR" size="100" primaryString="true" />
  45. <behavior name="archivable" />
  46. </table>
  47. <table name="archivable_test_200_archive">
  48. <column name="id" required="true" primaryKey="true" type="INTEGER" />
  49. <column name="title" type="VARCHAR" size="100" primaryString="true" />
  50. </table>
  51. <table name="archivable_test_300">
  52. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
  53. <column name="title" type="VARCHAR" size="100" primaryString="true" />
  54. <column name="age" type="INTEGER" />
  55. <column name="foo_id" type="INTEGER" />
  56. <behavior name="archivable">
  57. <parameter name="log_archived_at" value="false" />
  58. <parameter name="archive_table" value="my_old_archivable_test_300" />
  59. <parameter name="archive_on_insert" value="true" />
  60. <parameter name="archive_on_update" value="true" />
  61. <parameter name="archive_on_delete" value="false" />
  62. </behavior>
  63. </table>
  64. <table name="archivable_test_400">
  65. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
  66. <column name="title" type="VARCHAR" size="100" primaryString="true" />
  67. <column name="age" type="INTEGER" />
  68. <behavior name="archivable">
  69. <parameter name="archive_class" value="FooArchive" />
  70. </behavior>
  71. </table>
  72. </database>
  73. EOF;
  74. PropelQuickBuilder::buildSchema($schema);
  75. }
  76. }
  77. public function testHasArchiveMethod()
  78. {
  79. $this->assertTrue(method_exists('ArchivableTest100Query', 'archive'));
  80. }
  81. public function testArchiveCreatesACopyByDefault()
  82. {
  83. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  84. $a = new ArchivableTest100();
  85. $a->setTitle('foo');
  86. $a->setAge(12);
  87. $a->save();
  88. ArchivableTest100ArchiveQuery::create()->deleteAll();
  89. ArchivableTest100Query::create()
  90. ->filterById($a->getId())
  91. ->archive();
  92. $archive = ArchivableTest100ArchiveQuery::create()
  93. ->filterById($a->getId())
  94. ->findOne();
  95. $this->assertInstanceOf('ArchivableTest100Archive', $archive);
  96. $this->assertEquals('foo', $archive->getTitle());
  97. $this->assertEquals(12, $archive->getAge());
  98. }
  99. public function testArchiveUpdatesExistingArchive()
  100. {
  101. ArchivableTest100ArchiveQuery::create()->deleteAll();
  102. $a = new ArchivableTest100();
  103. $a->setTitle('foo');
  104. $a->setAge(12);
  105. $a->save();
  106. ArchivableTest100ArchiveQuery::create()->deleteAll();
  107. $b = new ArchivableTest100Archive();
  108. $b->setId($a->getId());
  109. $b->setTitle('bar');
  110. $b->save();
  111. ArchivableTest100Query::create()
  112. ->filterById($a->getId())
  113. ->archive(null, false);
  114. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  115. $this->assertEquals('foo', $b->getTitle());
  116. }
  117. public function testArchiveReturnsNumberOfArchivedObjectsObject()
  118. {
  119. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  120. $this->assertEquals(0, ArchivableTest100Query::create()->archive());
  121. $a = new ArchivableTest100();
  122. $a->save();
  123. $this->assertEquals(1, ArchivableTest100Query::create()->archive());
  124. }
  125. public function testUpdateDoesNotCreateArchivesByDefault()
  126. {
  127. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  128. $a = new ArchivableTest100();
  129. $a->setTitle('foo');
  130. $a->setAge(12);
  131. $a->save();
  132. ArchivableTest100ArchiveQuery::create()->deleteAll();
  133. ArchivableTest100Query::create()
  134. ->filterById($a->getId())
  135. ->update(array('Title' => 'bar'));
  136. $this->assertEquals(1, ArchivableTest100Query::create()->filterByTitle('bar')->count());
  137. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  138. }
  139. public function testUpdateCreatesArchivesIfSpecified()
  140. {
  141. ArchivableTest300Query::create()->deleteAll();
  142. $a = new ArchivableTest300();
  143. $a->setTitle('foo');
  144. $a->setAge(12);
  145. $a->save();
  146. MyOldArchivableTest300Query::create()->deleteAll();
  147. ArchivableTest300Query::create()
  148. ->filterById($a->getId())
  149. ->update(array('Title' => 'bar'));
  150. $this->assertEquals(1, ArchivableTest300Query::create()->filterByTitle('bar')->count());
  151. $this->assertEquals(1, MyOldArchivableTest300Query::create()->count());
  152. }
  153. public function testDeleteCreatesArchivesByDefault()
  154. {
  155. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  156. $a = new ArchivableTest100();
  157. $a->setTitle('foo');
  158. $a->setAge(12);
  159. $a->save();
  160. ArchivableTest100ArchiveQuery::create()->deleteAll();
  161. ArchivableTest100Query::create()
  162. ->filterById($a->getId())
  163. ->delete();
  164. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  165. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  166. }
  167. public function testDeleteAllCreatesArchivesByDefault()
  168. {
  169. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  170. $a = new ArchivableTest100();
  171. $a->setTitle('foo');
  172. $a->setAge(12);
  173. $a->save();
  174. ArchivableTest100ArchiveQuery::create()->deleteAll();
  175. ArchivableTest100Query::create()
  176. ->deleteAll();
  177. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  178. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  179. }
  180. public function testDeleteDoesNotCreateArchivesIfSpecified()
  181. {
  182. ArchivableTest300Query::create()->deleteAll();
  183. $a = new ArchivableTest300();
  184. $a->setTitle('foo');
  185. $a->setAge(12);
  186. $a->save();
  187. MyOldArchivableTest300Query::create()->deleteAll();
  188. ArchivableTest300Query::create()
  189. ->filterById($a->getId())
  190. ->delete();
  191. $this->assertEquals(0, ArchivableTest300Query::create()->count());
  192. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  193. }
  194. public function testDeleteAllDoesNotCreateArchivesIfSpecified()
  195. {
  196. ArchivableTest300Query::create()->deleteAll();
  197. $a = new ArchivableTest300();
  198. $a->setTitle('foo');
  199. $a->setAge(12);
  200. $a->save();
  201. MyOldArchivableTest300Query::create()->deleteAll();
  202. ArchivableTest300Query::create()
  203. ->deleteAll();
  204. $this->assertEquals(0, ArchivableTest300Query::create()->count());
  205. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  206. }
  207. public function testHasUpdateWithoutArchiveMethod()
  208. {
  209. $this->assertTrue(method_exists('ArchivableTest300Query', 'updateWithoutArchive'));
  210. }
  211. public function testUpdateWithoutArchiveDoesNotCreateArchives()
  212. {
  213. ArchivableTest300Query::create()->deleteAll();
  214. $a = new ArchivableTest300();
  215. $a->setTitle('foo');
  216. $a->setAge(12);
  217. $a->save();
  218. MyOldArchivableTest300Query::create()->deleteAll();
  219. ArchivableTest300Query::create()
  220. ->filterById($a->getId())
  221. ->updateWithoutArchive(array('Title' => 'bar'));
  222. $this->assertEquals(1, ArchivableTest300Query::create()->filterByTitle('bar')->count());
  223. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  224. }
  225. public function testHasDeleteWithoutArchiveMethods()
  226. {
  227. $this->assertTrue(method_exists('ArchivableTest100Query', 'deleteWithoutArchive'));
  228. $this->assertTrue(method_exists('ArchivableTest100Query', 'deleteAllWithoutArchive'));
  229. }
  230. public function testDeleteWithoutArchiveDoesNotCreateArchivesByDefault()
  231. {
  232. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  233. $a = new ArchivableTest100();
  234. $a->setTitle('foo');
  235. $a->setAge(12);
  236. $a->save();
  237. ArchivableTest100ArchiveQuery::create()->deleteAll();
  238. ArchivableTest100Query::create()
  239. ->filterById($a->getId())
  240. ->deleteWithoutArchive();
  241. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  242. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  243. }
  244. public function testDeleteAllWithoutArchiveDoesNotCreateArchivesByDefault()
  245. {
  246. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  247. $a = new ArchivableTest100();
  248. $a->setTitle('foo');
  249. $a->setAge(12);
  250. $a->save();
  251. ArchivableTest100ArchiveQuery::create()->deleteAll();
  252. ArchivableTest100Query::create()
  253. ->deleteAllWithoutArchive();
  254. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  255. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  256. }
  257. }