generated from bisco/codex-bootstrap
88 lines
3.2 KiB
Python
88 lines
3.2 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, TeacherProfile
|
|
|
|
|
|
@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(payload["settings"]["laboratory_name"], "Azione!Lab")
|
|
self.assertEqual(payload["settings"]["address"], "Via dell'Epomeo 9999, Napoli")
|
|
self.assertEqual(payload["teacher"]["name"], "Ernesto Estatico")
|
|
self.assertEqual(
|
|
payload["lesson_info"]["location"],
|
|
"Spazio Teatro, Via dell'Epomeo 9999, Napoli",
|
|
)
|
|
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)
|
|
|
|
def test_seed_updates_the_existing_teacher_without_creating_a_duplicate(self):
|
|
teacher = TeacherProfile.objects.get()
|
|
teacher.name = "Andrea Rossi"
|
|
teacher.save(update_fields=["name"])
|
|
|
|
call_command("seed_demo", verbosity=0)
|
|
|
|
self.assertEqual(TeacherProfile.objects.count(), 1)
|
|
self.assertEqual(TeacherProfile.objects.get().name, "Ernesto Estatico")
|
|
|
|
|
|
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"})
|