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