Added an test on updates through many to many field.

This commit is contained in:
Xavier Ordoquy 2014-05-06 11:33:13 +02:00
parent 5dab5e4dcf
commit 4bdb6787c1

View File

@ -373,3 +373,46 @@ class NestedModelSerializerUpdateTests(TestCase):
deserialize.save()
self.assertEqual(models.ManyToManySource.objects.count(), source_count + 1)
self.assertEqual(models.ManyToManyTarget.objects.count(), target_count + 2)
def test_update_with_nested_many_to_many_relation(self):
class ManyToManyTargetSerializer(serializers.ModelSerializer):
class Meta:
model = models.ManyToManyTarget
class ManyToManySourceSerializer(serializers.ModelSerializer):
targets = ManyToManyTargetSerializer(many=True, allow_add_remove=True)
class Meta:
model = models.ManyToManySource
source = models.ManyToManySource.objects.create(name='source')
target1 = models.ManyToManyTarget.objects.create(name='target1')
target2 = models.ManyToManyTarget.objects.create(name='target2')
source.targets = [target1, target2]
data = {
'id': source.id,
'name': source.name + '0',
'targets': [{
'id': target1.id,
'name': target1.name + '1',
}, {
'id': target2.id,
'name': target2.name + '2',
}]
}
source_count = models.ManyToManySource.objects.count()
target_count = models.ManyToManyTarget.objects.count()
deserialize = ManyToManySourceSerializer(data=data, instance=source)
self.assertTrue(deserialize.is_valid(), deserialize.errors)
deserialize.save()
self.assertEqual(models.ManyToManySource.objects.count(), source_count)
self.assertEqual(models.ManyToManyTarget.objects.count(), target_count)
# Were the models updated ?
self.assertEqual(source.name, 'source0')
alt_target1 = models.ManyToManyTarget.objects.get(id=target1.id)
self.assertEqual(alt_target1.name, target1.name + '1')
alt_target2 = models.ManyToManyTarget.objects.get(id=target2.id)
self.assertEqual(alt_target2.name, target2.name + '2')