from django.test import TestCase from django.urls import reverse from showcase.models import PortfolioEntry, Region class MapRegionsViewTests(TestCase): def setUp(self): self.us = Region.objects.get(code="USA") self.california = Region.objects.get(code="US-CA") self.canada = Region.objects.get(code="CAN") def regions_by_code(self): response = self.client.get(reverse("map-regions")) self.assertEqual(response.status_code, 200) return {region["code"]: region for region in response.json()["regions"]} def test_homepage_contains_map_mount(self): response = self.client.get(reverse("home")) self.assertContains(response, 'id="portfolio-map-root"') self.assertContains(response, "showcase/dist/map.js") def test_api_returns_seeded_regions_with_empty_entries(self): regions = self.regions_by_code() self.assertIn("USA", regions) self.assertIn("CAN", regions) self.assertIn("US-CA", regions) self.assertEqual(regions["US-CA"]["parentCode"], "USA") self.assertEqual(regions["USA"]["entries"], []) def test_country_aggregates_subdivision_entries_and_deduplicates(self): entry = PortfolioEntry.objects.create( entry_type=PortfolioEntry.EntryType.WORK, title="West Coast delivery", summary="Delivered a regional engagement.", is_published=True, ) entry.regions.add(self.us, self.california) regions = self.regions_by_code() self.assertEqual(len(regions["USA"]["entries"]), 1) self.assertEqual(regions["US-CA"]["entries"][0]["title"], entry.title) def test_api_excludes_unpublished_entries(self): entry = PortfolioEntry.objects.create( entry_type=PortfolioEntry.EntryType.CV, title="Draft entry", summary="Not visible yet.", is_published=False, ) entry.regions.add(self.canada) regions = self.regions_by_code() self.assertEqual(regions["CAN"]["entries"], [])