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

/test/testsuite/generator/behavior/SoftDeleteBehaviorTest.php

https://github.com/nextbigsound/propel-orm
PHP | 360 lines | 312 code | 30 blank | 18 comment | 0 complexity | ec5fc0e90845803eaa25a20c9e65bc90 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 'tools/helpers/bookstore/BookstoreTestBase.php';
  11. /**
  12. * Tests for SoftDeleteBehavior class
  13. *
  14. * @author François Zaninotto
  15. * @version $Revision$
  16. * @package generator.behavior
  17. */
  18. class SoftDeleteBehaviorTest extends BookstoreTestBase
  19. {
  20. protected function setUp()
  21. {
  22. parent::setUp();
  23. Table4Peer::disableSoftDelete();
  24. Table4Peer::doDeleteAll();
  25. Table4Peer::enableSoftDelete();
  26. }
  27. public function testParameters()
  28. {
  29. $table2 = Table4Peer::getTableMap();
  30. $this->assertEquals(count($table2->getColumns()), 3, 'SoftDelete adds one columns by default');
  31. $this->assertTrue(method_exists('Table4', 'getDeletedAt'), 'SoftDelete adds an updated_at column by default');
  32. $table1 = Table5Peer::getTableMap();
  33. $this->assertEquals(count($table1->getColumns()), 3, 'SoftDelete does not add a column when it already exists');
  34. $this->assertTrue(method_exists('Table5', 'getDeletedOn'), 'SoftDelete allows customization of deleted_column name');
  35. }
  36. public function testStaticSoftDeleteStatus()
  37. {
  38. $this->assertTrue(Table4Peer::isSoftDeleteEnabled(), 'The static soft delete is enabled by default');
  39. Table4Peer::disableSoftDelete();
  40. $this->assertFalse(Table4Peer::isSoftDeleteEnabled(), 'disableSoftDelete() disables the static soft delete');
  41. Table4Peer::enableSoftDelete();
  42. $this->assertTrue(Table4Peer::isSoftDeleteEnabled(), 'enableSoftDelete() enables the static soft delete');
  43. }
  44. public function testInstancePoolingAndSoftDelete()
  45. {
  46. Table4Peer::doForceDeleteAll($this->con);
  47. $t = new Table4();
  48. $t->save($this->con);
  49. Table4Peer::enableSoftDelete();
  50. $t->delete($this->con);
  51. $t2 = Table4Peer::retrieveByPk($t->getPrimaryKey(), $this->con);
  52. $this->assertNull($t2, 'An object is removed from the instance pool on soft deletion');
  53. Table4Peer::disableSoftDelete();
  54. $t2 = Table4Peer::retrieveByPk($t->getPrimaryKey(), $this->con);
  55. $this->assertNotNull($t2);
  56. Table4Peer::enableSoftDelete();
  57. $t2 = Table4Peer::retrieveByPk($t->getPrimaryKey(), $this->con);
  58. $this->assertNull($t2, 'A soft deleted object is removed from the instance pool when the soft delete behavior is enabled');
  59. }
  60. public function testStaticDoForceDelete()
  61. {
  62. $t1 = new Table4();
  63. $t1->save();
  64. Table4Peer::doForceDelete($t1);
  65. Table4Peer::disableSoftDelete();
  66. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doForceDelete() actually deletes records');
  67. }
  68. public function testStaticDoSoftDelete()
  69. {
  70. $t1 = new Table4();
  71. $t1->save();
  72. $t2 = new Table4();
  73. $t2->save();
  74. $t3 = new Table4();
  75. $t3->save();
  76. // softDelete with a criteria
  77. $c = new Criteria();
  78. $c->add(Table4Peer::ID, $t1->getId());
  79. Table4Peer::doSoftDelete($c);
  80. Table4Peer::disableSoftDelete();
  81. $this->assertEquals(3, Table4Peer::doCount(new Criteria()), 'doSoftDelete() keeps deleted record in the database');
  82. Table4Peer::enableSoftDelete();
  83. $this->assertEquals(2, Table4Peer::doCount(new Criteria()), 'doSoftDelete() marks deleted record as deleted');
  84. // softDelete with a value
  85. Table4Peer::doSoftDelete(array($t2->getId()));
  86. Table4Peer::disableSoftDelete();
  87. $this->assertEquals(3, Table4Peer::doCount(new Criteria()), 'doSoftDelete() keeps deleted record in the database');
  88. Table4Peer::enableSoftDelete();
  89. $this->assertEquals(1, Table4Peer::doCount(new Criteria()), 'doSoftDelete() marks deleted record as deleted');
  90. // softDelete with an object
  91. Table4Peer::doSoftDelete($t3);
  92. Table4Peer::disableSoftDelete();
  93. $this->assertEquals(3, Table4Peer::doCount(new Criteria()), 'doSoftDelete() keeps deleted record in the database');
  94. Table4Peer::enableSoftDelete();
  95. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doSoftDelete() marks deleted record as deleted');
  96. }
  97. public function testStaticDoDelete()
  98. {
  99. $t1 = new Table4();
  100. $t1->save();
  101. $t2 = new Table4();
  102. $t2->save();
  103. Table4Peer::disableSoftDelete();
  104. Table4Peer::doDelete($t1);
  105. Table4Peer::disableSoftDelete();
  106. $this->assertEquals(1, Table4Peer::doCount(new Criteria()), 'doDelete() calls doForceDelete() when soft delete is disabled');
  107. Table4Peer::enableSoftDelete();
  108. Table4Peer::doDelete($t2);
  109. Table4Peer::disableSoftDelete();
  110. $this->assertEquals(1, Table4Peer::doCount(new Criteria()), 'doDelete() calls doSoftDelete() when soft delete is enabled');
  111. Table4Peer::enableSoftDelete();
  112. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doDelete() calls doSoftDelete() when soft delete is enabled');
  113. }
  114. public function testStaticDoForceDeleteAll()
  115. {
  116. $t1 = new Table4();
  117. $t1->save();
  118. Table4Peer::doForceDeleteAll();
  119. Table4Peer::disableSoftDelete();
  120. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doForceDeleteAll() actually deletes records');
  121. }
  122. public function testStaticDoSoftDeleteAll()
  123. {
  124. $t1 = new Table4();
  125. $t1->save();
  126. $t2 = new Table4();
  127. $t2->save();
  128. Table4Peer::enableSoftDelete();
  129. Table4Peer::doSoftDeleteAll();
  130. Table4Peer::disableSoftDelete();
  131. $this->assertEquals(2, Table4Peer::doCount(new Criteria()), 'doSoftDeleteAll() keeps deleted record in the database');
  132. Table4Peer::enableSoftDelete();
  133. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doSoftDeleteAll() marks deleted record as deleted');
  134. }
  135. public function testStaticDoDeleteAll()
  136. {
  137. $t1 = new Table4();
  138. $t1->save();
  139. $t2 = new Table4();
  140. $t2->save();
  141. Table4Peer::disableSoftDelete();
  142. Table4Peer::doDeleteAll();
  143. Table4Peer::disableSoftDelete();
  144. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doDeleteAll() calls doForceDeleteAll() when soft delete is disabled');
  145. $t1 = new Table4();
  146. $t1->save();
  147. $t2 = new Table4();
  148. $t2->save();
  149. Table4Peer::enableSoftDelete();
  150. Table4Peer::doDeleteAll();
  151. Table4Peer::disableSoftDelete();
  152. $this->assertEquals(2, Table4Peer::doCount(new Criteria()), 'doDeleteAll() calls doSoftDeleteAll() when soft delete is disabled');
  153. Table4Peer::enableSoftDelete();
  154. $this->assertEquals(0, Table4Peer::doCount(new Criteria()), 'doDeleteAll() calls doSoftDeleteAll() when soft delete is disabled');
  155. }
  156. public function testSelect()
  157. {
  158. $t = new Table4();
  159. $t->setDeletedAt(123);
  160. $t->save();
  161. Table4Peer::enableSoftDelete();
  162. $this->assertEquals(0, Table4Peer::doCount(new Criteria), 'rows with a deleted_at date are hidden for select queries');
  163. Table4Peer::disableSoftDelete();
  164. $this->assertEquals(1, Table4Peer::doCount(new Criteria), 'rows with a deleted_at date are visible for select queries once the static soft_delete is enabled');
  165. $this->assertTrue(Table4Peer::isSoftDeleteEnabled(), 'Executing a select query enables the static soft delete again');
  166. }
  167. public function testDelete()
  168. {
  169. $t = new Table4();
  170. $t->save();
  171. $this->assertNull($t->getDeletedAt(), 'deleted_column is null by default');
  172. $t->delete();
  173. $this->assertNotNull($t->getDeletedAt(), 'deleted_column is not null after a soft delete');
  174. $this->assertEquals(0, Table4Peer::doCount(new Criteria), 'soft deleted rows are hidden for select queries');
  175. Table4Peer::disableSoftDelete();
  176. $this->assertEquals(1, Table4Peer::doCount(new Criteria), 'soft deleted rows are still present in the database');
  177. }
  178. public function testDeleteUndeletable()
  179. {
  180. $t = new UndeletableTable4();
  181. $t->save();
  182. $t->delete();
  183. $this->assertNull($t->getDeletedAt(), 'soft_delete is not triggered for objects wit ha preDelete hook returning false');
  184. $this->assertEquals(1, Table4Peer::doCount(new Criteria), 'soft_delete is not triggered for objects wit ha preDelete hook returning false');
  185. }
  186. public function testUnDelete()
  187. {
  188. $t = new Table4();
  189. $t->save();
  190. $t->delete();
  191. $t->undelete();
  192. $this->assertNull($t->getDeletedAt(), 'deleted_column is null again after an undelete');
  193. $this->assertEquals(1, Table4Peer::doCount(new Criteria), 'undeleted rows are visible for select queries');
  194. }
  195. public function testForceDelete()
  196. {
  197. $t = new Table4();
  198. $t->save();
  199. $t->forceDelete();
  200. $this->assertTrue($t->isDeleted(), 'forceDelete() actually deletes a row');
  201. Table4Peer::disableSoftDelete();
  202. $this->assertEquals(0, Table4Peer::doCount(new Criteria), 'forced deleted rows are not present in the database');
  203. }
  204. public function testQueryIncludeDeleted()
  205. {
  206. $t = new Table4();
  207. $t->setDeletedAt(123);
  208. $t->save();
  209. Table4Peer::enableSoftDelete();
  210. $this->assertEquals(0, Table4Query::create()->count(), 'rows with a deleted_at date are hidden for select queries');
  211. $this->assertEquals(1, Table4Query::create()->includeDeleted()->count(), 'rows with a deleted_at date are visible for select queries using includeDeleted()');
  212. }
  213. public function testQueryForceDelete()
  214. {
  215. $t1 = new Table4();
  216. $t1->save();
  217. Table4Query::create()->filterById($t1->getId())->forceDelete();
  218. Table4Peer::disableSoftDelete();
  219. $this->assertEquals(0, Table4Query::create()->count(), 'forceDelete() actually deletes records');
  220. }
  221. public function testQuerySoftDelete()
  222. {
  223. $t1 = new Table4();
  224. $t1->save();
  225. $t2 = new Table4();
  226. $t2->save();
  227. $t3 = new Table4();
  228. $t3->save();
  229. Table4Query::create()
  230. ->filterById($t1->getId())
  231. ->softDelete();
  232. Table4Peer::disableSoftDelete();
  233. $this->assertEquals(3, Table4Query::create()->count(), 'softDelete() keeps deleted record in the database');
  234. Table4Peer::enableSoftDelete();
  235. $this->assertEquals(2, Table4Query::create()->count(), 'softDelete() marks deleted record as deleted');
  236. }
  237. public function testQueryDelete()
  238. {
  239. $t1 = new Table4();
  240. $t1->save();
  241. $t2 = new Table4();
  242. $t2->save();
  243. Table4Peer::disableSoftDelete();
  244. Table4Query::create()->filterById($t1->getId())->delete();
  245. Table4Peer::disableSoftDelete();
  246. $this->assertEquals(1, Table4Query::create()->count(), 'delete() calls forceDelete() when soft delete is disabled');
  247. Table4Peer::enableSoftDelete();
  248. Table4Query::create()->filterById($t2->getId())->delete();
  249. Table4Peer::disableSoftDelete();
  250. $this->assertEquals(1, Table4Query::create()->count(), 'delete() calls softDelete() when soft delete is enabled');
  251. Table4Peer::enableSoftDelete();
  252. $this->assertEquals(0, Table4Query::create()->count(), 'delete() calls softDelete() when soft delete is enabled');
  253. }
  254. public function testQueryForceDeleteAll()
  255. {
  256. $t1 = new Table4();
  257. $t1->save();
  258. Table4Query::create()->forceDeleteAll();
  259. Table4Peer::disableSoftDelete();
  260. $this->assertEquals(0, Table4Query::create()->count(), 'forceDeleteAll() actually deletes records');
  261. }
  262. public function testQuerySoftDeleteAll()
  263. {
  264. $t1 = new Table4();
  265. $t1->save();
  266. $t2 = new Table4();
  267. $t2->save();
  268. Table4Peer::enableSoftDelete();
  269. Table4Query::create()->softDelete();
  270. Table4Peer::disableSoftDelete();
  271. $this->assertEquals(2, Table4Query::create()->count(), 'softDelete() keeps deleted record in the database');
  272. Table4Peer::enableSoftDelete();
  273. $this->assertEquals(0, Table4Query::create()->count(), 'softDelete() marks deleted record as deleted');
  274. }
  275. public function testQueryDeleteAll()
  276. {
  277. $t1 = new Table4();
  278. $t1->save();
  279. $t2 = new Table4();
  280. $t2->save();
  281. Table4Peer::disableSoftDelete();
  282. Table4Query::create()->deleteAll();
  283. Table4Peer::disableSoftDelete();
  284. $this->assertEquals(0, Table4Query::create()->count(), 'deleteAll() calls forceDeleteAll() when soft delete is disabled');
  285. $t1 = new Table4();
  286. $t1->save();
  287. $t2 = new Table4();
  288. $t2->save();
  289. Table4Peer::enableSoftDelete();
  290. Table4Query::create()->deleteAll();
  291. Table4Peer::disableSoftDelete();
  292. $this->assertEquals(2, Table4Query::create()->count(), 'deleteAll() calls softDeleteAll() when soft delete is disabled');
  293. Table4Peer::enableSoftDelete();
  294. $this->assertEquals(0, Table4Query::create()->count(), 'deleteAll() calls softDeleteAll() when soft delete is disabled');
  295. }
  296. public function testQuerySelect()
  297. {
  298. $t = new Table4();
  299. $t->setDeletedAt(123);
  300. $t->save();
  301. Table4Peer::enableSoftDelete();
  302. $this->assertEquals(0, Table4Query::create()->count(), 'rows with a deleted_at date are hidden for select queries');
  303. Table4Peer::disableSoftDelete();
  304. $this->assertEquals(1, Table4Query::create()->count(), 'rows with a deleted_at date are visible for select queries once the static soft_delete is enabled');
  305. $this->assertTrue(Table4Peer::isSoftDeleteEnabled(), 'Executing a select query enables the static soft delete again');
  306. }
  307. public function testCustomization()
  308. {
  309. Table5Peer::disableSoftDelete();
  310. Table5Peer::doDeleteAll();
  311. Table5Peer::enableSoftDelete();
  312. $t = new Table5();
  313. $t->save();
  314. $this->assertNull($t->getDeletedOn(), 'deleted_column is null by default');
  315. $t->delete();
  316. $this->assertNotNull($t->getDeletedOn(), 'deleted_column is not null after a soft delete');
  317. $this->assertEquals(0, Table5Peer::doCount(new Criteria), 'soft deleted rows are hidden for select queries');
  318. Table5Peer::disableSoftDelete();
  319. $this->assertEquals(1, Table5Peer::doCount(new Criteria), 'soft deleted rows are still present in the database');
  320. }
  321. }
  322. class UndeletableTable4 extends Table4
  323. {
  324. public function preDelete(PropelPDO $con = null)
  325. {
  326. parent::preDelete($con);
  327. $this->setTitle('foo');
  328. return false;
  329. }
  330. }