80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
from django.template.loader import get_template
|
|
from django.test import SimpleTestCase, TestCase
|
|
from django.urls import reverse
|
|
|
|
from website.common.factories import ContentPageFactory, ListingPageFactory
|
|
from website.common.models import BaseListingPage, BasePage
|
|
from website.common.utils import get_page_models
|
|
from website.home.models import HomePage
|
|
|
|
|
|
class BasePageTestCase(SimpleTestCase):
|
|
def test_unique_body_classes(self) -> None:
|
|
body_classes = [page.body_class for page in get_page_models()]
|
|
self.assertEqual(len(body_classes), len(set(body_classes)))
|
|
|
|
def test_pages_inherit_base_page(self) -> None:
|
|
for page_model in get_page_models():
|
|
self.assertTrue(
|
|
issubclass(page_model, BasePage),
|
|
f"{page_model} does not inherit from {BasePage}.",
|
|
)
|
|
|
|
def test_pages_have_template(self) -> None:
|
|
for page in get_page_models():
|
|
get_template(page.template)
|
|
|
|
|
|
class ContentPageTestCase(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls) -> None:
|
|
cls.home_page = HomePage.objects.get()
|
|
cls.page = ContentPageFactory(parent=cls.home_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(32):
|
|
self.client.get(self.page.url)
|
|
|
|
|
|
class ListingPageTestCase(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls) -> None:
|
|
cls.home_page = HomePage.objects.get()
|
|
cls.page = ListingPageFactory(parent=cls.home_page)
|
|
|
|
# Orphaned content page, shouldn't show up on lists
|
|
ContentPageFactory()
|
|
|
|
ContentPageFactory(parent=cls.page)
|
|
ContentPageFactory(parent=cls.page)
|
|
|
|
def test_accessible(self) -> None:
|
|
with self.assertNumQueries(35):
|
|
response = self.client.get(self.page.url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(len(response.context["listing_pages"]), 2)
|
|
self.assertContains(response, self.page.reverse_subpage("feed"))
|
|
|
|
def test_feed_redirects(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
|
|
)
|
|
|
|
def test_meta_url(self) -> None:
|
|
response = self.client.get(self.page.url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.context["page"].get_meta_url(), self.page.full_url)
|
|
|
|
def test_meta_url_with_page(self) -> None:
|
|
ContentPageFactory.create_batch(BaseListingPage.PAGE_SIZE, parent=self.page)
|
|
response = self.client.get(self.page.url, {"page": 2})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(
|
|
response.context["page"].get_meta_url(), self.page.full_url + "?page=2"
|
|
)
|