def setUp(self): """ Create 3 BasicModel instances. """ items = ['foo', 'bar', 'baz'] anchors = [] for item in items: anchor = Anchor(text=item) anchor.save() anchors.append(anchor) manytomany = ManyToManyModel() manytomany.save() manytomany.rel.add(*anchors) self.data = [{ 'url': 'http://testserver/manytomany/1/', 'rel': [ 'http://testserver/anchor/1/', 'http://testserver/anchor/2/', 'http://testserver/anchor/3/', ] }] self.list_view = ManyToManyList.as_view() self.detail_view = ManyToManyDetail.as_view()
def setUp(self): """ Create 3 BasicModel instances. """ items = ["foo", "bar", "baz"] anchors = [] for item in items: anchor = Anchor(text=item) anchor.save() anchors.append(anchor) manytomany = ManyToManyModel() manytomany.save() manytomany.rel.add(*anchors) self.data = [ { "url": "http://testserver/manytomany/1/", "rel": ["http://testserver/anchor/1/", "http://testserver/anchor/2/", "http://testserver/anchor/3/"], } ] self.list_view = ManyToManyList.as_view() self.detail_view = ManyToManyDetail.as_view()
class ManyToManyTests(TestCase): def setUp(self): class ManyToManySerializer(serializers.ModelSerializer): class Meta: model = ManyToManyModel self.serializer_class = ManyToManySerializer # An anchor instance to use for the relationship self.anchor = Anchor() self.anchor.save() # A model instance with a many to many relationship to the anchor self.instance = ManyToManyModel() self.instance.save() self.instance.rel.add(self.anchor) # A serialized representation of the model instance self.data = {'id': 1, 'rel': [self.anchor.id]} def test_retrieve(self): """ Serialize an instance of a model with a ManyToMany relationship. """ serializer = self.serializer_class(instance=self.instance) expected = self.data self.assertEquals(serializer.data, expected) def test_create(self): """ Create an instance of a model with a ManyToMany relationship. """ data = {'rel': [self.anchor.id]} serializer = self.serializer_class(data=data) self.assertEquals(serializer.is_valid(), True) instance = serializer.save() self.assertEquals(len(ManyToManyModel.objects.all()), 2) self.assertEquals(instance.pk, 2) self.assertEquals(list(instance.rel.all()), [self.anchor]) def test_update(self): """ Update an instance of a model with a ManyToMany relationship. """ new_anchor = Anchor() new_anchor.save() data = {'rel': [self.anchor.id, new_anchor.id]} serializer = self.serializer_class(self.instance, data=data) self.assertEquals(serializer.is_valid(), True) instance = serializer.save() self.assertEquals(len(ManyToManyModel.objects.all()), 1) self.assertEquals(instance.pk, 1) self.assertEquals(list(instance.rel.all()), [self.anchor, new_anchor]) def test_create_empty_relationship(self): """ Create an instance of a model with a ManyToMany relationship, containing no items. """ data = {'rel': []} serializer = self.serializer_class(data=data) self.assertEquals(serializer.is_valid(), True) instance = serializer.save() self.assertEquals(len(ManyToManyModel.objects.all()), 2) self.assertEquals(instance.pk, 2) self.assertEquals(list(instance.rel.all()), []) def test_update_empty_relationship(self): """ Update an instance of a model with a ManyToMany relationship, containing no items. """ new_anchor = Anchor() new_anchor.save() data = {'rel': []} serializer = self.serializer_class(self.instance, data=data) self.assertEquals(serializer.is_valid(), True) instance = serializer.save() self.assertEquals(len(ManyToManyModel.objects.all()), 1) self.assertEquals(instance.pk, 1) self.assertEquals(list(instance.rel.all()), []) def test_create_empty_relationship_flat_data(self): """ Create an instance of a model with a ManyToMany relationship, containing no items, using a representation that does not support lists (eg form data). """ data = {'rel': ''} serializer = self.serializer_class(data=data) self.assertEquals(serializer.is_valid(), True) instance = serializer.save() self.assertEquals(len(ManyToManyModel.objects.all()), 2) self.assertEquals(instance.pk, 2) self.assertEquals(list(instance.rel.all()), [])
class ManyToManyTests(TestCase): def setUp(self): class ManyToManySerializer(serializers.ModelSerializer): class Meta: model = ManyToManyModel self.serializer_class = ManyToManySerializer # An anchor instance to use for the relationship self.anchor = Anchor() self.anchor.save() # A model instance with a many to many relationship to the anchor self.instance = ManyToManyModel() self.instance.save() self.instance.rel.add(self.anchor) # A serialized representation of the model instance self.data = {'id': 1, 'rel': [self.anchor.id]} def test_retrieve(self): """ Serialize an instance of a model with a ManyToMany relationship. """ serializer = self.serializer_class(instance=self.instance) expected = self.data self.assertEqual(serializer.data, expected) def test_create(self): """ Create an instance of a model with a ManyToMany relationship. """ data = {'rel': [self.anchor.id]} serializer = self.serializer_class(data=data) self.assertEqual(serializer.is_valid(), True) instance = serializer.save() self.assertEqual(len(ManyToManyModel.objects.all()), 2) self.assertEqual(instance.pk, 2) self.assertEqual(list(instance.rel.all()), [self.anchor]) def test_update(self): """ Update an instance of a model with a ManyToMany relationship. """ new_anchor = Anchor() new_anchor.save() data = {'rel': [self.anchor.id, new_anchor.id]} serializer = self.serializer_class(self.instance, data=data) self.assertEqual(serializer.is_valid(), True) instance = serializer.save() self.assertEqual(len(ManyToManyModel.objects.all()), 1) self.assertEqual(instance.pk, 1) self.assertEqual(list(instance.rel.all()), [self.anchor, new_anchor]) def test_create_empty_relationship(self): """ Create an instance of a model with a ManyToMany relationship, containing no items. """ data = {'rel': []} serializer = self.serializer_class(data=data) self.assertEqual(serializer.is_valid(), True) instance = serializer.save() self.assertEqual(len(ManyToManyModel.objects.all()), 2) self.assertEqual(instance.pk, 2) self.assertEqual(list(instance.rel.all()), []) def test_update_empty_relationship(self): """ Update an instance of a model with a ManyToMany relationship, containing no items. """ new_anchor = Anchor() new_anchor.save() data = {'rel': []} serializer = self.serializer_class(self.instance, data=data) self.assertEqual(serializer.is_valid(), True) instance = serializer.save() self.assertEqual(len(ManyToManyModel.objects.all()), 1) self.assertEqual(instance.pk, 1) self.assertEqual(list(instance.rel.all()), []) def test_create_empty_relationship_flat_data(self): """ Create an instance of a model with a ManyToMany relationship, containing no items, using a representation that does not support lists (eg form data). """ data = MultiValueDict() data.setlist('rel', ['']) serializer = self.serializer_class(data=data) self.assertEqual(serializer.is_valid(), True) instance = serializer.save() self.assertEqual(len(ManyToManyModel.objects.all()), 2) self.assertEqual(instance.pk, 2) self.assertEqual(list(instance.rel.all()), [])