generated from bisco/codex-bootstrap
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
import tempfile
|
|
|
|
from django.core.management import call_command
|
|
from django.test import TestCase, override_settings
|
|
|
|
from home.models import GalleryItem, HomePage, Show
|
|
|
|
|
|
@override_settings(WAGTAILADMIN_BASE_URL="https://cms.example.test")
|
|
class HomeApiTests(TestCase):
|
|
def setUp(self):
|
|
self.media_directory = tempfile.TemporaryDirectory()
|
|
self.settings_override = override_settings(MEDIA_ROOT=self.media_directory.name)
|
|
self.settings_override.enable()
|
|
call_command("seed_demo", verbosity=0)
|
|
|
|
def tearDown(self):
|
|
self.settings_override.disable()
|
|
self.media_directory.cleanup()
|
|
|
|
def test_home_endpoint_returns_aggregated_content(self):
|
|
response = self.client.get("/api/site/home/", HTTP_HOST="localhost")
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
payload = response.json()
|
|
self.assertEqual(
|
|
set(payload),
|
|
{
|
|
"settings",
|
|
"homepage",
|
|
"feature_cards",
|
|
"teacher",
|
|
"lesson_info",
|
|
"shows",
|
|
"gallery_items",
|
|
},
|
|
)
|
|
self.assertEqual(payload["homepage"]["hero_title"], "Il teatro diventa presenza.")
|
|
self.assertEqual(len(payload["feature_cards"]), 3)
|
|
self.assertTrue(
|
|
payload["homepage"]["hero_image"]["url"].startswith(
|
|
"https://cms.example.test/media/"
|
|
)
|
|
)
|
|
self.assertEqual(payload["homepage"]["hero_image"]["alt"], "Prova in sala")
|
|
|
|
def test_home_endpoint_only_includes_visible_items(self):
|
|
Show.objects.update(visible_on_home=False)
|
|
GalleryItem.objects.update(visible_on_home=False)
|
|
|
|
payload = self.client.get("/api/site/home/", HTTP_HOST="localhost").json()
|
|
|
|
self.assertEqual(payload["shows"], [])
|
|
self.assertEqual(payload["gallery_items"], [])
|
|
|
|
def test_seed_command_is_idempotent(self):
|
|
call_command("seed_demo", verbosity=0)
|
|
|
|
self.assertEqual(HomePage.objects.count(), 1)
|
|
self.assertEqual(HomePage.objects.first().feature_cards.count(), 3)
|
|
self.assertEqual(Show.objects.count(), 2)
|
|
self.assertEqual(GalleryItem.objects.count(), 4)
|
|
|
|
|
|
class HealthTests(TestCase):
|
|
def test_health_endpoint_checks_database(self):
|
|
response = self.client.get("/health/")
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"status": "ok"})
|