def test_serialize_object_with_circular_references(self): """Testing WebAPIResource.serialize_object with circular references and ?expand= """ class TestObject(Model): def __init__(self, name, pk): super(TestObject, self).__init__() self.name = name self.pk = pk # Django 1.8+ requires a pk field class TestResource(WebAPIResource): fields = { 'dependency': { 'type': [TestObject], }, 'name': { 'type': six.text_type, } } try: obj1 = TestObject('obj1', 1) obj2 = TestObject('obj2', 2) obj1.dependency = obj2 obj2.dependency = obj1 request = RequestFactory().get('/api/test/?expand=dependency') resource = TestResource() register_resource_for_model(TestObject, resource) data = resource.serialize_object(obj1, request=request) self.maxDiff = 100000 self.assertEqual(data, { 'dependency': { 'links': { 'dependency': { 'href': None, 'method': 'GET', 'title': 'TestObject object', }, 'self': { 'href': 'http://testserver/api/test/?expand=dependency', 'method': 'GET', }, }, 'name': 'obj2', }, 'links': { 'self': { 'href': 'http://testserver/api/test/?expand=dependency', 'method': 'GET', }, }, 'name': 'obj1', }) finally: unregister_resource_for_model(TestObject)
def register_resource_for_model_temp(model, resource): """A context manager to temporarily register a resource for a model.""" register_resource_for_model(model, resource) try: yield finally: unregister_resource_for_model(model)
def register_resource_for_model_temp(model, resource): """A context manager to temporarily register a resource for a model.""" register_resource_for_model(model, resource) try: yield finally: unregister_resource_for_model(model)
def test_serialize_object_with_circular_references(self): """Testing WebAPIResource.serialize_object with circular references and ?expand= """ class TestObject(Model): def __init__(self, name, pk): super(TestObject, self).__init__() self.name = name self.pk = pk # Django 1.8+ requires a pk field class TestResource(WebAPIResource): fields = { 'dependency': { 'type': [TestObject], }, 'name': { 'type': StringFieldType, } } try: obj1 = TestObject('obj1', 1) obj2 = TestObject('obj2', 2) obj1.dependency = obj2 obj2.dependency = obj1 request = RequestFactory().get('/api/test/?expand=dependency') resource = TestResource() register_resource_for_model(TestObject, resource) data = resource.serialize_object(obj1, request=request) self.maxDiff = 100000 self.assertEqual( data, { 'dependency': { 'links': { 'dependency': { 'href': None, 'method': 'GET', 'title': 'TestObject object', }, 'self': { 'href': 'http://testserver/api/test/?expand=dependency', 'method': 'GET', }, }, 'name': 'obj2', }, 'links': { 'self': { 'href': 'http://testserver/api/test/?expand=dependency', 'method': 'GET', }, }, 'name': 'obj1', }) finally: unregister_resource_for_model(TestObject)