def test_deserialization(self):
     """Can we deserialize data to a Tag model?"""
     tag_data = get_instance_data(TagFactory.build())
     s_tag = TagSerializer(data=tag_data, **context_kwarg("/api/v1/tag/"))
     self.assertTrue(s_tag.is_valid(), s_tag.errors)
     tag = s_tag.save()
     self.assertTrue(Tag.objects.filter(pk=tag.pk).exists())
 def test_deserialization(self):
     """Can we deserialize data to a Startup model?"""
     startup_data = get_instance_data(StartupFactory.build())
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug)
         for tag in TagFactory.build_batch(3) + TagFactory.create_batch(2)
     ]
     data = dict(startup_data, tags=tag_urls)
     s_startup = StartupSerializer(data=data,
                                   **context_kwarg("/api/v1/startup/"))
     self.assertTrue(s_startup.is_valid(), msg=s_startup.errors)
     self.assertEqual(
         Startup.objects.count(),
         0,
         "Unexpected initial condition",
     )
     self.assertEqual(
         Tag.objects.count(),
         2,
         "Unexpected initial condition",
     )
     startup = s_startup.save()
     self.assertEqual(
         Startup.objects.count(),
         1,
         "Serialized Startup not saved",
     )
     self.assertCountEqual(
         startup.tags.values_list("slug", flat=True),
         [],
         "Startup had tags associated with it",
     )
     self.assertEqual(Tag.objects.count(), 2, "Serialized Tags saved")
Example #3
0
 def test_deserialization(self):
     """Can we deserialize data to a Post model?"""
     tag_list = TagFactory.create_batch(randint(1, 10))
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug) for tag in tag_list
     ]
     startup_list = StartupFactory.create_batch(randint(1, 10))
     startup_urls = [
         reverse("api-startup-detail", slug=startup.slug)
         for startup in startup_list
     ]
     post_data = remove_m2m(get_instance_data(PostFactory.build()))
     data = dict(
         **post_data,
         tags=tag_urls,
         startups=startup_urls,
     )
     s_post = PostSerializer(
         data=data,
         **context_kwarg(reverse("api-post-list", full=True)),
     )
     self.assertTrue(s_post.is_valid(), msg=s_post.errors)
     post = s_post.save()
     self.assertCountEqual(tag_list, post.tags.all())
     self.assertCountEqual(startup_list, post.startups.all())
Example #4
0
 def test_deserialization_partial_update_unknown_m2m(self):
     """Can we partially deserialize data to a Post model?"""
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug)
         for tag in TagFactory.build_batch(randint(1, 10))
     ]
     post = PostFactory()
     s_post = PostSerializer(
         instance=post,
         data=dict(
             # necessary due to bug in DRF
             # https://github.com/encode/django-rest-framework/issues/6341
             slug=post.slug,
             pub_date=post.pub_date,
             # remove above once DRF fixed
             tags=tag_urls,
         ),
         partial=True,
         **context_kwarg(
             reverse(
                 "api-post-detail",
                 year=post.pub_date.year,
                 month=post.pub_date.month,
                 slug=post.slug,
                 full=True,
             )),
     )
     self.assertFalse(s_post.is_valid())
Example #5
0
 def test_detail(self):
     """Is there a detail view for a Startup object"""
     startup = StartupFactory()
     url = reverse("api-startup-detail", slug=startup.slug)
     self.get_check_200(url)
     self.assertCountEqual(
         self.response_json,
         StartupSerializer(startup, **context_kwarg(url)).data,
     )
Example #6
0
 def test_detail(self):
     """Is there a detail view for a Tag object"""
     tag = TagFactory()
     url = reverse("api-tag-detail", slug=tag.slug)
     self.get_check_200(url)
     self.assertCountEqual(
         self.response_json,
         TagSerializer(tag, **context_kwarg(url)).data,
     )
 def test_serialization(self):
     """Does an existing Tag serialize correctly?"""
     tag = TagFactory()
     tag_url = reverse("api-tag-detail", slug=tag.slug, full=True)
     s_tag = TagSerializer(tag, **context_kwarg(tag_url))
     self.assertEqual(
         omit_keys("url", s_tag.data),
         omit_keys("id", get_instance_data(tag)),
     )
     self.assertEqual(s_tag.data["url"], tag_url)
Example #8
0
 def test_list(self):
     """Is there a list of Post objects"""
     url_name = "api-post-list"
     post_list = PostFactory.create_batch(10)
     self.get_check_200(url_name)
     self.assertCountEqual(
         self.response_json,
         PostSerializer(
             post_list,
             many=True,
             **context_kwarg(reverse(url_name)),
         ).data,
     )
Example #9
0
 def test_detail(self):
     """Is there a detail view for a NewsLink object"""
     newslink = NewsLinkFactory()
     url = reverse(
         "api-newslink-detail",
         startup_slug=newslink.startup.slug,
         newslink_slug=newslink.slug,
     )
     self.get_check_200(url)
     self.assertCountEqual(
         self.response_json,
         NewsLinkSerializer(newslink, **context_kwarg(url)).data,
     )
Example #10
0
 def test_list(self):
     """Is there a list of NewsLink objects"""
     url_name = "api-newslink-list"
     newslink_list = NewsLinkFactory.create_batch(10)
     self.get_check_200(url_name)
     self.assertCountEqual(
         self.response_json,
         NewsLinkSerializer(
             newslink_list,
             many=True,
             **context_kwarg(reverse(url_name)),
         ).data,
     )
Example #11
0
 def test_list(self):
     """Is there a list of Startup objects"""
     url_name = "api-startup-list"
     startup_list = StartupFactory.create_batch(10)
     self.get_check_200(url_name)
     self.assertCountEqual(
         self.response_json,
         StartupSerializer(
             startup_list,
             many=True,
             **context_kwarg(reverse(url_name)),
         ).data,
     )
Example #12
0
 def test_detail(self):
     """Is there a detail view for a Post object"""
     post = PostFactory()
     url = reverse(
         "api-post-detail",
         year=post.pub_date.year,
         month=post.pub_date.month,
         slug=post.slug,
     )
     self.get_check_200(url)
     self.assertCountEqual(
         self.response_json,
         PostSerializer(post, **context_kwarg(url)).data,
     )
 def test_deserialization(self):
     """Can we deserialize data to a NewsLink model?"""
     startup_url = reverse(
         "api-startup-detail",
         slug=StartupFactory().slug,
         full=True,
     )
     nl_data = omit_keys(
         "startup",
         get_instance_data(NewsLinkFactory.build()),
     )
     data = dict(**nl_data, startup=startup_url)
     s_nl = NewsLinkSerializer(data=data,
                               **context_kwarg("/api/v1/newslink/"))
     self.assertTrue(s_nl.is_valid(), msg=s_nl.errors)
 def test_serialization(self):
     """Does an existing NewsLink serialize correctly?"""
     nl = NewsLinkFactory()
     nl_url = f"/api/v1/newslink/{nl.slug}"
     s_nl = NewsLinkSerializer(nl, **context_kwarg(nl_url))
     self.assertNotIn("id", s_nl.data)
     self.assertIn("url", s_nl.data)
     self.assertEqual(
         omit_keys("url", "startup", s_nl.data),
         omit_keys("id", "startup", get_instance_data(nl)),
     )
     self.assertEqual(
         self.client.get(s_nl.data["url"]).status_code,
         200,
     )
     self.assertEqual(
         self.client.get(s_nl.data["startup"]).status_code,
         200,
     )
 def test_serialization(self):
     """Does an existing Startup serialize correctly?"""
     tag_list = TagFactory.create_batch(3)
     startup = StartupFactory(tags=tag_list)
     startup_url = reverse(
         "api-startup-detail",
         slug=startup.slug,
         full=True,
     )
     s_startup = StartupSerializer(startup, **context_kwarg(startup_url))
     self.assertEqual(
         omit_keys("url", "tags", s_startup.data),
         omit_keys("id", "tags", get_instance_data(startup)),
     )
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug, full=True)
         for tag in tag_list
     ]
     self.assertCountEqual(s_startup.data["tags"], tag_urls)
     self.assertEqual(s_startup.data["url"], startup_url)
Example #16
0
 def test_serialization(self):
     """Does an existing Posts serialize correctly?"""
     tag_list = TagFactory.create_batch(3)
     startup_list = StartupFactory.create_batch(2)
     post = PostFactory(tags=tag_list, startups=startup_list)
     post_ctxt = context_kwarg(f"/api/v1/startup/{post.slug}")
     s_post = PostSerializer(post, **post_ctxt)
     self.assertEqual(
         remove_m2m("url", s_post.data),
         remove_m2m("id", get_instance_data(post)),
     )
     self.assertEqual(
         s_post.data["url"],
         reverse(
             "api-post-detail",
             year=post.pub_date.year,
             month=post.pub_date.month,
             slug=post.slug,
             full=True,
         ),
     )
     self.assertCountEqual(
         s_post.data["tags"],
         [
             reverse(
                 "api-tag-detail",
                 slug=tag.slug,
                 full=True,
             ) for tag in tag_list
         ],
     )
     self.assertCountEqual(
         s_post.data["startups"],
         [
             reverse(
                 "api-startup-detail",
                 slug=startup.slug,
                 full=True,
             ) for startup in startup_list
         ],
     )
Example #17
0
 def test_deserialization_partial_update(self):
     """Can we partially deserialize data to a Post model?"""
     tag_list = TagFactory.create_batch(randint(1, 10))
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug) for tag in tag_list
     ]
     startup_list = StartupFactory.create_batch(randint(1, 10))
     startup_urls = [
         reverse("api-startup-detail", slug=startup.slug)
         for startup in startup_list
     ]
     post = PostFactory(title="first", tags=TagFactory.create_batch(3))
     s_post = PostSerializer(
         instance=post,
         data=dict(
             title="second",
             # necessary due to bug in DRF
             # https://github.com/encode/django-rest-framework/issues/6341
             slug=post.slug,
             pub_date=post.pub_date,
             # remove above once DRF fixed
             tags=tag_urls,
             startups=startup_urls,
         ),
         partial=True,
         **context_kwarg(
             reverse(
                 "api-post-detail",
                 year=post.pub_date.year,
                 month=post.pub_date.month,
                 slug=post.slug,
                 full=True,
             )),
     )
     self.assertTrue(s_post.is_valid(), msg=s_post.errors)
     post = s_post.save()
     self.assertEqual("second", post.title)
     self.assertCountEqual(tag_list, post.tags.all())
     self.assertCountEqual(startup_list, post.startups.all())
Example #18
0
 def test_deserialization_update(self):
     """Can we deserialize to an existing Post model?"""
     tag_list = TagFactory.create_batch(randint(1, 10))
     tag_urls = [
         reverse("api-tag-detail", slug=tag.slug) for tag in tag_list
     ]
     startup_list = StartupFactory.create_batch(randint(1, 10))
     startup_urls = [
         reverse("api-startup-detail", slug=startup.slug)
         for startup in startup_list
     ]
     post = PostFactory(title="first", tags=TagFactory.create_batch(3))
     post_data = remove_m2m(get_instance_data(post))
     data = dict(
         post_data,
         title="second",
         tags=tag_urls,
         startups=startup_urls,
     )
     s_post = PostSerializer(
         post,
         data=data,
         **context_kwarg(
             reverse(
                 "api-post-detail",
                 year=post.pub_date.year,
                 month=post.pub_date.month,
                 slug=post.slug,
                 full=True,
             )),
     )
     self.assertTrue(s_post.is_valid(), msg=s_post.errors)
     post = s_post.save()
     self.assertEqual("second", post.title)
     self.assertCountEqual(tag_list, post.tags.all())
     self.assertCountEqual(startup_list, post.startups.all())
 def test_invalid_deserialization(self):
     """Does the serializer validate data?"""
     s_startup = StartupSerializer(data={},
                                   **context_kwarg("/api/v1/startup/"))
     self.assertFalse(s_startup.is_valid())
 def test_invalid_deserialization(self):
     """Does the serializer validate data?"""
     s_tag = TagSerializer(data={}, **context_kwarg("/api/v1/tag/"))
     self.assertFalse(s_tag.is_valid())
 def test_invalid_deserialization(self):
     """Does the serializer validate data?"""
     s_nl = NewsLinkSerializer(data={},
                               **context_kwarg("/api/v1/newslink/"))
     self.assertFalse(s_nl.is_valid())