def test_success(self): """ When calling obj.save(skip_cdms=True), changes should only happen in local, not in cdms. """ obj = SimpleObj() obj.name = "simple obj" self.assertEqual(obj.cdms_pk, "") self.assertEqual(SimpleObj.objects.skip_cdms().count(), 0) obj.save(skip_cdms=True) self.assertEqual(SimpleObj.objects.skip_cdms().count(), 1) self.assertEqual(obj.cdms_pk, "") self.assertNoAPICalled()
def test_exception_triggers_rollback(self): """ In case of exceptions during cdms calls, no changes should be reflected in the db. """ self.mocked_cdms_api.create.side_effect = Exception obj = SimpleObj() obj.name = "simple obj" self.assertEqual(SimpleObj.objects.skip_cdms().count(), 0) self.assertRaises(Exception, obj.save) self.assertEqual(SimpleObj.objects.skip_cdms().count(), 0) self.assertAPINotCalled(["list", "update", "delete", "get"])
def test_success(self): """ obj.save() should create a new obj in local and cdms if it doesn't exist. """ modified_on = (timezone.now() - datetime.timedelta(days=1)).replace(microsecond=0) cdms_id = "brand new id" self.mocked_cdms_api.create.side_effect = mocked_cdms_create( create_data={"SimpleId": cdms_id, "ModifiedOn": modified_on} ) obj = SimpleObj() obj.name = "simple obj" obj.dt_field = datetime.datetime(2016, 1, 1).replace(tzinfo=datetime.timezone.utc) obj.int_field = 10 self.assertEqual(obj.cdms_pk, "") self.assertEqual(SimpleObj.objects.skip_cdms().count(), 0) obj.save() self.assertEqual(SimpleObj.objects.skip_cdms().count(), 1) self.assertEqual(obj.cdms_pk, cdms_id) self.assertEqual(obj.modified, modified_on) self.assertAPICreateCalled( SimpleObj, kwargs={ "data": { "Name": "simple obj", "DateTimeField": "/Date(1451606400000)/", "IntField": 10, "FKField": None, } }, ) self.assertAPINotCalled(["list", "update", "delete", "get"]) # reload obj and check cdms_pk and modified obj = SimpleObj.objects.skip_cdms().get(pk=obj.pk) self.assertEqual(obj.cdms_pk, cdms_id) self.assertEqual(obj.modified, modified_on)