def test_m2m_deserialization_with_missing_objects(self):
        serialized_articles = Serializer().serialize(Article.objects.all())
        article = Deserializer(serialized_articles).next()
        Article.objects.all().delete()
        Category.objects.all().delete()

        article.save()
        self.assertEqual(Article.objects.count(), 1)

        article = Article.objects.filter()[0]
        self.assertEqual(article.categories.count(), 0)
    def test_repeated_m2m_deserialization(self):
        serialized_articles = Serializer().serialize(Article.objects.all())
        article = Deserializer(serialized_articles).next()
        Article.objects.all().delete()

        article.save()
        self.assertEqual(Article.objects.count(), 1)

        article = Deserializer(serialized_articles).next()
        article.save()
        self.assertEqual(Article.objects.count(), 1)
    def test_category_deserialization(self):
        Category.objects.all().delete()
        Category.objects.create(name="Foo", slug="foo")

        serialzed_categories = Serializer().serialize(Category.objects.all())
        category = Deserializer(serialzed_categories).next()
        category2 = Deserializer(serialzed_categories).next()

        Category.objects.all().delete()

        category.save()
        self.assertEqual(Category.objects.count(), 1)

        # saving an identical object shouldn't create another instance
        category2.save()
        self.assertEqual(Category.objects.count(), 1)