60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
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"], [])
|
|
|