website/website/blog/tests.py

87 lines
3.0 KiB
Python

from django.test import TestCase
from django.urls import reverse
from website.home.models import HomePage
from .factories import BlogPostListPageFactory, BlogPostPageFactory
class BlogPostPageTestCase(TestCase):
@classmethod
def setUpTestData(cls) -> None:
cls.home_page = HomePage.objects.get()
cls.blog_post_list_page = BlogPostListPageFactory(parent=cls.home_page)
cls.page = BlogPostPageFactory(parent=cls.blog_post_list_page)
def test_accessible(self) -> None:
response = self.client.get(self.page.url)
self.assertEqual(response.status_code, 200)
def test_queries(self) -> None:
with self.assertNumQueries(43):
self.client.get(self.page.url)
class BlogPostPageSimilarityTestCase(TestCase):
@classmethod
def setUpTestData(cls) -> None:
cls.home_page = HomePage.objects.get()
cls.blog_post_list_page = BlogPostListPageFactory(parent=cls.home_page)
cls.page = BlogPostPageFactory(
parent=cls.blog_post_list_page, title="Blog post 1"
)
cls.similar_page_1 = BlogPostPageFactory(
parent=cls.blog_post_list_page, title="Blog post 2"
)
cls.similar_page_2 = BlogPostPageFactory(
parent=cls.blog_post_list_page, title="Blog post 3"
)
cls.similar_page_3 = BlogPostPageFactory(
parent=cls.blog_post_list_page, title="Blog post 4"
)
BlogPostPageFactory(parent=cls.blog_post_list_page, title="Legal documents")
def test_similar_pages(self) -> None:
self.assertEqual(
set(self.page.get_similar_posts()),
{self.similar_page_1, self.similar_page_2, self.similar_page_3},
)
def test_page_similarity(self) -> None:
for page in self.page.get_similar_posts():
self.assertNotEqual(page.similarity, 0.0)
def test_ordered_by_similarity(self) -> None:
similar_pages = self.page.get_similar_posts()
self.assertEqual(
list(similar_pages),
sorted(similar_pages, key=lambda p: p.similarity, reverse=True),
)
class BlogPostListPageTestCase(TestCase):
@classmethod
def setUpTestData(cls) -> None:
cls.home_page = HomePage.objects.get()
cls.page = BlogPostListPageFactory(parent=cls.home_page)
BlogPostPageFactory(parent=cls.page)
BlogPostPageFactory(parent=cls.page)
def test_accessible(self) -> None:
response = self.client.get(self.page.url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.context["listing_pages"]), 2)
def test_queries(self) -> None:
with self.assertNumQueries(39):
self.client.get(self.page.url)
def test_feed_accessible(self) -> None:
response = self.client.get(self.page.url + self.page.reverse_subpage("feed"))
self.assertRedirects(
response, reverse("feed"), status_code=301, fetch_redirect_response=True
)