def test_cant_delete_obj_in_receipt(self): """ Tests when the object in the receipt cant be deleted such as a deleted content type or another model that cant be cascaded. """ initial_data_updater = InitialDataUpdater() rel_model = G(RelModel) G(CantCascadeModel, rel_model=rel_model) RegisteredForDeletionReceipt.objects.create(model_obj=rel_model, register_time=datetime(2013, 4, 5)) account = G(Account) RegisteredForDeletionReceipt.objects.create(model_obj=account, register_time=datetime(2013, 4, 5)) initial_data_updater.model_objs_registered_for_deletion = [] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 2) with transaction.atomic(): initial_data_updater.handle_deletions() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0)
def test_cant_delete_obj_in_receipt(self): """ Tests when the object in the receipt cant be deleted such as a deleted content type or another model that cant be cascaded. """ initial_data_updater = InitialDataUpdater() rel_model = G(RelModel) G(CantCascadeModel, rel_model=rel_model) RegisteredForDeletionReceipt.objects.create(model_obj=rel_model, register_time=datetime( 2013, 4, 5)) account = G(Account) RegisteredForDeletionReceipt.objects.create(model_obj=account, register_time=datetime( 2013, 4, 5)) initial_data_updater.model_objs_registered_for_deletion = [] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 2) with transaction.atomic(): initial_data_updater.handle_deletions() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0)
class TestHandleDeletions(TestCase): """ Tests the handle_deletions functionality in the InitialDataUpater class. """ def setUp(self): super(TestHandleDeletions, self).setUp() self.initial_data_updater = InitialDataUpdater() def test_handle_deletions_no_objs(self): """ Tests when there are no objs to handle. The function should not raise any exceptions. """ self.initial_data_updater.handle_deletions() def test_create_one_obj(self): """ Tests creating one object to handle for deletion. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_dup_objs(self): """ Tests creating duplicate objects for deletion. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [account, account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_dup_proxy_objs(self): """ Tests creating duplicate objects for deletion when one is a proxy of another. """ account = G(Account) proxy_account = ProxyAccount.objects.get(id=account.id) self.initial_data_updater.model_objs_registered_for_deletion = [account, account, proxy_account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 2) receipt = RegisteredForDeletionReceipt.objects.get(model_obj_type=ContentType.objects.get_for_model(account)) self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) receipt = RegisteredForDeletionReceipt.objects.get( model_obj_type=ContentType.objects.get_for_model(proxy_account, for_concrete_model=False)) self.assertEquals( receipt.model_obj_type, ContentType.objects.get_for_model(ProxyAccount, for_concrete_model=False)) self.assertEquals(receipt.model_obj_id, proxy_account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_delete_one_obj(self): """ Tests creating one object to handle for deletion and then deleting it. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Now, don't register the object for deletion and run it again at a different time self.initial_data_updater.model_objs_registered_for_deletion = [] with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should be deleted, along with its receipt self.assertEquals(Account.objects.count(), 0) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) def test_create_update_one_obj(self): """ Tests creating one object to handle for deletion and then updating it. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Run the deletion handler again at a different time. It should not delete the object with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should not be deleted, along with its receipt self.assertEquals(Account.objects.count(), 1) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 1) self.assertEquals(RegisteredForDeletionReceipt.objects.get().register_time, datetime(2013, 4, 12, 5)) def test_delete_already_deleted_obj(self): """ Tests the case when an object that was registered for deletion has already been deleted. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [account] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Delete the model object. The receipt should still exist account.delete() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 1) # Now, don't register the object for deletion and run it again at a different time self.initial_data_updater.model_objs_registered_for_deletion = [] with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should be deleted, along with its receipt self.assertEquals(Account.objects.count(), 0) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0)
class TestHandleDeletions(TestCase): """ Tests the handle_deletions functionality in the InitialDataUpater class. """ def setUp(self): super(TestHandleDeletions, self).setUp() self.initial_data_updater = InitialDataUpdater() def test_handle_deletions_no_objs(self): """ Tests when there are no objs to handle. The function should not raise any exceptions. """ self.initial_data_updater.handle_deletions() def test_create_one_obj(self): """ Tests creating one object to handle for deletion. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [ account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_dup_objs(self): """ Tests creating duplicate objects for deletion. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [ account, account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_dup_proxy_objs(self): """ Tests creating duplicate objects for deletion when one is a proxy of another. """ account = G(Account) proxy_account = ProxyAccount.objects.get(id=account.id) self.initial_data_updater.model_objs_registered_for_deletion = [ account, account, proxy_account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 2) receipt = RegisteredForDeletionReceipt.objects.get( model_obj_type=ContentType.objects.get_for_model(account)) self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) receipt = RegisteredForDeletionReceipt.objects.get( model_obj_type=ContentType.objects.get_for_model( proxy_account, for_concrete_model=False)) self.assertEquals( receipt.model_obj_type, ContentType.objects.get_for_model(ProxyAccount, for_concrete_model=False)) self.assertEquals(receipt.model_obj_id, proxy_account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) def test_create_delete_one_obj(self): """ Tests creating one object to handle for deletion and then deleting it. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [ account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Now, don't register the object for deletion and run it again at a different time self.initial_data_updater.model_objs_registered_for_deletion = [] with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should be deleted, along with its receipt self.assertEquals(Account.objects.count(), 0) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) def test_create_update_one_obj(self): """ Tests creating one object to handle for deletion and then updating it. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [ account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Run the deletion handler again at a different time. It should not delete the object with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should not be deleted, along with its receipt self.assertEquals(Account.objects.count(), 1) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 1) self.assertEquals( RegisteredForDeletionReceipt.objects.get().register_time, datetime(2013, 4, 12, 5)) def test_delete_already_deleted_obj(self): """ Tests the case when an object that was registered for deletion has already been deleted. """ account = G(Account) self.initial_data_updater.model_objs_registered_for_deletion = [ account ] self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0) with freeze_time('2013-04-12'): self.initial_data_updater.handle_deletions() receipt = RegisteredForDeletionReceipt.objects.get() self.assertEquals(receipt.model_obj_type, ContentType.objects.get_for_model(Account)) self.assertEquals(receipt.model_obj_id, account.id) self.assertEquals(receipt.register_time, datetime(2013, 4, 12)) # Delete the model object. The receipt should still exist account.delete() self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 1) # Now, don't register the object for deletion and run it again at a different time self.initial_data_updater.model_objs_registered_for_deletion = [] with freeze_time('2013-04-12 05:00:00'): self.initial_data_updater.handle_deletions() # The object should be deleted, along with its receipt self.assertEquals(Account.objects.count(), 0) self.assertEquals(RegisteredForDeletionReceipt.objects.count(), 0)