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"})