From a7aefb5ffca57fd1b8bc2bf495ba413383d7ba72 Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Thu, 25 Aug 2022 00:51:29 +0100 Subject: [PATCH] Add basic tests for LMOTFY endpoints --- website/api/tests.py | 48 +++++++++++++++++++++++++++++++++++++++ website/blog/factories.py | 5 ++++ 2 files changed, 53 insertions(+) diff --git a/website/api/tests.py b/website/api/tests.py index dd1e2a0..069b039 100644 --- a/website/api/tests.py +++ b/website/api/tests.py @@ -1,6 +1,7 @@ from django.urls import reverse from rest_framework.test import APISimpleTestCase, APITestCase +from website.blog.factories import BlogPostPageFactory from website.common.factories import ContentPageFactory from website.home.models import HomePage @@ -27,3 +28,50 @@ class PageLinksAPIViewTestCase(APITestCase): with self.assertNumQueries(3): response = self.client.get(self.url) self.assertEqual(response.status_code, 200) + + +class LMOTFYAPIViewTestCase(APITestCase): + url = reverse("api:lmotfy") + + @classmethod + def setUpTestData(cls) -> None: + cls.home_page = HomePage.objects.get() + + for i in range(4): + BlogPostPageFactory(parent=cls.home_page, title=f"Post {i}") + + cls.exact = BlogPostPageFactory(parent=cls.home_page, title="Post exact") + + def test_accessible(self) -> None: + with self.assertNumQueries(4): + response = self.client.get(self.url, {"search": "Post"}) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 5) + + def test_case_insensitive_search(self) -> None: + with self.assertNumQueries(4): + response = self.client.get(self.url, {"search": "post"}) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 5) + + def test_no_search_term(self) -> None: + with self.assertNumQueries(0): + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + + def test_empty_search_term(self) -> None: + with self.assertNumQueries(0): + response = self.client.get(self.url, {"search": ""}) + self.assertEqual(response.status_code, 200) + + def test_exact(self) -> None: + with self.assertNumQueries(4): + response = self.client.get(self.url, {"search": "Post exact"}) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 1) + + result = response.data["results"][0] + + self.assertEqual(result["title"], "Post exact") + self.assertEqual(result["full_url"], self.exact.full_url) + self.assertEqual(result["date"], self.exact.date.isoformat()) diff --git a/website/blog/factories.py b/website/blog/factories.py index a06348b..fae59d9 100644 --- a/website/blog/factories.py +++ b/website/blog/factories.py @@ -6,3 +6,8 @@ from . import models class BlogPostListPageFactory(BaseContentFactory): class Meta: model = models.BlogPostListPage + + +class BlogPostPageFactory(BaseContentFactory): + class Meta: + model = models.BlogPostPage