diff --git a/designate/objects/base.py b/designate/objects/base.py index 2ed893c5b..bc3fb72b0 100644 --- a/designate/objects/base.py +++ b/designate/objects/base.py @@ -331,7 +331,7 @@ class ListObjectMixin(base.ObjectListBase): else: setattr(instance, field, value) - instance._obj_changes = set( + instance._changed_fields = set( primitive.get('designate_object.changes', [])) instance._obj_original_values = \ primitive.get('designate_object.original_values', {}) diff --git a/designate/tests/unit/objects/test_base.py b/designate/tests/unit/objects/test_base.py index 3b3fa23e2..cee089c3b 100644 --- a/designate/tests/unit/objects/test_base.py +++ b/designate/tests/unit/objects/test_base.py @@ -608,6 +608,76 @@ class ListObjectMixinTest(oslotest.base.BaseTestCase): self.assertEqual('One', obj[0].id) self.assertEqual('Two', obj[1].id) + def test_from_primitive_with_changes(self): + primitive = { + 'designate_object.name': 'TestObjectList', + 'designate_object.data': { + 'objects': [ + {'designate_object.changes': ['id'], + 'designate_object.data': {'id': 'One'}, + 'designate_object.name': 'TestObject', + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0'}, + {'designate_object.changes': ['id'], + 'designate_object.data': {'id': 'Two'}, + 'designate_object.name': 'TestObject', + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0'}, + ], + }, + 'designate_object.changes': ['objects'], + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0', + } + + obj = objects.DesignateObject.from_primitive(primitive) + + self.assertEqual(2, len(obj)) + self.assertEqual(2, len(obj.objects)) + + self.assertIsInstance(obj[0], TestObject) + self.assertIsInstance(obj[1], TestObject) + + self.assertEqual('One', obj[0].id) + self.assertEqual('Two', obj[1].id) + + self.assertEqual(1, len(obj.obj_what_changed())) + + def test_from_primitive_no_changes(self): + primitive = { + 'designate_object.name': 'TestObjectList', + 'designate_object.data': { + 'objects': [ + {'designate_object.changes': [], + 'designate_object.data': {'id': 'One'}, + 'designate_object.name': 'TestObject', + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0'}, + {'designate_object.changes': [], + 'designate_object.data': {'id': 'Two'}, + 'designate_object.name': 'TestObject', + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0'}, + ], + }, + 'designate_object.changes': [], + 'designate_object.namespace': 'designate', + 'designate_object.version': '1.0', + } + + obj = objects.DesignateObject.from_primitive(primitive) + + self.assertEqual(2, len(obj)) + self.assertEqual(2, len(obj.objects)) + + self.assertIsInstance(obj[0], TestObject) + self.assertIsInstance(obj[1], TestObject) + + self.assertEqual('One', obj[0].id) + self.assertEqual('Two', obj[1].id) + + self.assertEqual(0, len(obj.obj_what_changed())) + def test_cast_to_list(self): # Create a few objects obj_one = TestObject()