PageRenderTime 62ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/test/testsuite/generator/behavior/archivable/ArchivableBehaviorQueryBuilderModifierTest.php

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