PageRenderTime 38ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/propelorm/Propel2
PHP | 340 lines | 248 code | 26 blank | 66 comment | 1 complexity | b66c70763f1fb12b0b20e017322cd84d 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. /**
  11. * MIT License. This file is part of the Propel package.
  12. * For the full copyright and license information, please view the LICENSE
  13. * file that was distributed with this source code.
  14. */
  15. namespace Propel\Tests\Generator\Behavior\Archivable;
  16. use ArchivableTest100;
  17. use ArchivableTest100Archive;
  18. use ArchivableTest100ArchiveQuery;
  19. use ArchivableTest100Query;
  20. use ArchivableTest300;
  21. use ArchivableTest300Query;
  22. use MyOldArchivableTest300Query;
  23. use Propel\Generator\Util\QuickBuilder;
  24. use Propel\Tests\TestCase;
  25. /**
  26. * Tests for ArchivableBehavior class
  27. *
  28. * @author François Zaninotto
  29. */
  30. class ArchivableBehaviorQueryBuilderModifierTest extends TestCase
  31. {
  32. /**
  33. * @return void
  34. */
  35. public function setUp(): void
  36. {
  37. if (!class_exists('\ArchivableTest100')) {
  38. $schema = <<<EOF
  39. <database name="archivable_behavior_test_100">
  40. <table name="archivable_test_100">
  41. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER"/>
  42. <column name="title" type="VARCHAR" size="100" primaryString="true"/>
  43. <column name="age" type="INTEGER"/>
  44. <column name="foo_id" type="INTEGER"/>
  45. <foreign-key foreignTable="archivable_test_200">
  46. <reference local="foo_id" foreign="id"/>
  47. </foreign-key>
  48. <index>
  49. <index-column name="title"/>
  50. <index-column name="age"/>
  51. </index>
  52. <behavior name="archivable"/>
  53. </table>
  54. <table name="archivable_test_200">
  55. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER"/>
  56. <column name="title" type="VARCHAR" size="100" primaryString="true"/>
  57. <behavior name="archivable"/>
  58. </table>
  59. <table name="archivable_test_200_archive">
  60. <column name="id" required="true" primaryKey="true" type="INTEGER"/>
  61. <column name="title" type="VARCHAR" size="100" primaryString="true"/>
  62. </table>
  63. <table name="archivable_test_300">
  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. <column name="foo_id" type="INTEGER"/>
  68. <behavior name="archivable">
  69. <parameter name="log_archived_at" value="false"/>
  70. <parameter name="archive_table" value="my_old_archivable_test_300"/>
  71. <parameter name="archive_on_insert" value="true"/>
  72. <parameter name="archive_on_update" value="true"/>
  73. <parameter name="archive_on_delete" value="false"/>
  74. </behavior>
  75. </table>
  76. <table name="archivable_test_400">
  77. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER"/>
  78. <column name="title" type="VARCHAR" size="100" primaryString="true"/>
  79. <column name="age" type="INTEGER"/>
  80. <behavior name="archivable">
  81. <parameter name="archive_class" value="\Propel\Tests\Generator\Behavior\Archivable\FooArchive"/>
  82. </behavior>
  83. </table>
  84. </database>
  85. EOF;
  86. QuickBuilder::buildSchema($schema);
  87. }
  88. }
  89. /**
  90. * @return void
  91. */
  92. public function testHasArchiveMethod()
  93. {
  94. $this->assertTrue(method_exists('\ArchivableTest100Query', 'archive'));
  95. }
  96. /**
  97. * @return void
  98. */
  99. public function testArchiveCreatesACopyByDefault()
  100. {
  101. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  102. $a = new ArchivableTest100();
  103. $a->setTitle('foo');
  104. $a->setAge(12);
  105. $a->save();
  106. ArchivableTest100ArchiveQuery::create()->deleteAll();
  107. ArchivableTest100Query::create()
  108. ->filterById($a->getId())
  109. ->archive();
  110. $archive = ArchivableTest100ArchiveQuery::create()
  111. ->filterById($a->getId())
  112. ->findOne();
  113. $this->assertInstanceOf('\ArchivableTest100Archive', $archive);
  114. $this->assertEquals('foo', $archive->getTitle());
  115. $this->assertEquals(12, $archive->getAge());
  116. }
  117. /**
  118. * @return void
  119. */
  120. public function testArchiveUpdatesExistingArchive()
  121. {
  122. ArchivableTest100ArchiveQuery::create()->deleteAll();
  123. $a = new ArchivableTest100();
  124. $a->setTitle('foo');
  125. $a->setAge(12);
  126. $a->save();
  127. ArchivableTest100ArchiveQuery::create()->deleteAll();
  128. $b = new ArchivableTest100Archive();
  129. $b->setId($a->getId());
  130. $b->setTitle('bar');
  131. $b->save();
  132. ArchivableTest100Query::create()
  133. ->filterById($a->getId())
  134. ->archive(null, false);
  135. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  136. $this->assertEquals('foo', $b->getTitle());
  137. }
  138. /**
  139. * @return void
  140. */
  141. public function testArchiveReturnsNumberOfArchivedObjectsObject()
  142. {
  143. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  144. $this->assertEquals(0, ArchivableTest100Query::create()->archive());
  145. $a = new ArchivableTest100();
  146. $a->save();
  147. $this->assertEquals(1, ArchivableTest100Query::create()->archive());
  148. }
  149. /**
  150. * @return void
  151. */
  152. public function testUpdateDoesNotCreateArchivesByDefault()
  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. ->update(['Title' => 'bar']);
  163. $this->assertEquals(1, ArchivableTest100Query::create()->filterByTitle('bar')->count());
  164. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  165. }
  166. /**
  167. * @return void
  168. */
  169. public function testUpdateCreatesArchivesIfSpecified()
  170. {
  171. ArchivableTest300Query::create()->deleteAll();
  172. $a = new ArchivableTest300();
  173. $a->setTitle('foo');
  174. $a->setAge(12);
  175. $a->save();
  176. MyOldArchivableTest300Query::create()->deleteAll();
  177. ArchivableTest300Query::create()
  178. ->filterById($a->getId())
  179. ->update(['Title' => 'bar']);
  180. $this->assertEquals(1, ArchivableTest300Query::create()->filterByTitle('bar')->count());
  181. $this->assertEquals(1, MyOldArchivableTest300Query::create()->count());
  182. }
  183. /**
  184. * @return void
  185. */
  186. public function testDeleteCreatesArchivesByDefault()
  187. {
  188. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  189. $a = new ArchivableTest100();
  190. $a->setTitle('foo');
  191. $a->setAge(12);
  192. $a->save();
  193. ArchivableTest100ArchiveQuery::create()->deleteAll();
  194. ArchivableTest100Query::create()
  195. ->filterById($a->getId())
  196. ->delete();
  197. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  198. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  199. }
  200. /**
  201. * @return void
  202. */
  203. public function testDeleteAllCreatesArchivesByDefault()
  204. {
  205. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  206. $a = new ArchivableTest100();
  207. $a->setTitle('foo');
  208. $a->setAge(12);
  209. $a->save();
  210. ArchivableTest100ArchiveQuery::create()->deleteAll();
  211. ArchivableTest100Query::create()
  212. ->deleteAll();
  213. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  214. $this->assertEquals(1, ArchivableTest100ArchiveQuery::create()->count());
  215. }
  216. /**
  217. * @return void
  218. */
  219. public function testDeleteDoesNotCreateArchivesIfSpecified()
  220. {
  221. ArchivableTest300Query::create()->deleteAll();
  222. $a = new ArchivableTest300();
  223. $a->setTitle('foo');
  224. $a->setAge(12);
  225. $a->save();
  226. MyOldArchivableTest300Query::create()->deleteAll();
  227. ArchivableTest300Query::create()
  228. ->filterById($a->getId())
  229. ->delete();
  230. $this->assertEquals(0, ArchivableTest300Query::create()->count());
  231. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  232. }
  233. /**
  234. * @return void
  235. */
  236. public function testDeleteAllDoesNotCreateArchivesIfSpecified()
  237. {
  238. ArchivableTest300Query::create()->deleteAll();
  239. $a = new ArchivableTest300();
  240. $a->setTitle('foo');
  241. $a->setAge(12);
  242. $a->save();
  243. MyOldArchivableTest300Query::create()->deleteAll();
  244. ArchivableTest300Query::create()
  245. ->deleteAll();
  246. $this->assertEquals(0, ArchivableTest300Query::create()->count());
  247. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  248. }
  249. /**
  250. * @return void
  251. */
  252. public function testHasUpdateWithoutArchiveMethod()
  253. {
  254. $this->assertTrue(method_exists('\ArchivableTest300Query', 'updateWithoutArchive'));
  255. }
  256. /**
  257. * @return void
  258. */
  259. public function testUpdateWithoutArchiveDoesNotCreateArchives()
  260. {
  261. ArchivableTest300Query::create()->deleteAll();
  262. $a = new ArchivableTest300();
  263. $a->setTitle('foo');
  264. $a->setAge(12);
  265. $a->save();
  266. MyOldArchivableTest300Query::create()->deleteAll();
  267. ArchivableTest300Query::create()
  268. ->filterById($a->getId())
  269. ->updateWithoutArchive(['Title' => 'bar']);
  270. $this->assertEquals(1, ArchivableTest300Query::create()->filterByTitle('bar')->count());
  271. $this->assertEquals(0, MyOldArchivableTest300Query::create()->count());
  272. }
  273. /**
  274. * @return void
  275. */
  276. public function testHasDeleteWithoutArchiveMethods()
  277. {
  278. $this->assertTrue(method_exists('\ArchivableTest100Query', 'deleteWithoutArchive'));
  279. $this->assertTrue(method_exists('\ArchivableTest100Query', 'deleteAllWithoutArchive'));
  280. }
  281. /**
  282. * @return void
  283. */
  284. public function testDeleteWithoutArchiveDoesNotCreateArchivesByDefault()
  285. {
  286. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  287. $a = new ArchivableTest100();
  288. $a->setTitle('foo');
  289. $a->setAge(12);
  290. $a->save();
  291. ArchivableTest100ArchiveQuery::create()->deleteAll();
  292. ArchivableTest100Query::create()
  293. ->filterById($a->getId())
  294. ->deleteWithoutArchive();
  295. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  296. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  297. }
  298. /**
  299. * @return void
  300. */
  301. public function testDeleteAllWithoutArchiveDoesNotCreateArchivesByDefault()
  302. {
  303. ArchivableTest100Query::create()->deleteAllWithoutArchive();
  304. $a = new ArchivableTest100();
  305. $a->setTitle('foo');
  306. $a->setAge(12);
  307. $a->save();
  308. ArchivableTest100ArchiveQuery::create()->deleteAll();
  309. ArchivableTest100Query::create()
  310. ->deleteAllWithoutArchive();
  311. $this->assertEquals(0, ArchivableTest100Query::create()->count());
  312. $this->assertEquals(0, ArchivableTest100ArchiveQuery::create()->count());
  313. }
  314. }