from pathlib import Path from tests.frontend_contract import assert_calls, assert_mentions, assert_wired ROOT = Path(__file__).resolve().parents[2] def read(path: str) -> str: return (ROOT / path).read_text(encoding="utf-8") def test_evolution_mode_falls_back_to_an_available_series() -> None: workspace = read("frontend/src/components/map/MapWorkspace.tsx") assert "themeTemporalSeriesMap" in workspace assert "availableEvolutionThemes[0]" in workspace assert "activeTemporalSeriesGroups.length > 0" in workspace assert "setActiveThemeId(fallbackTheme.id)" in workspace assert "onOpenDatasetInMap(fallbackDataset)" in workspace def test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None: workspace = read("frontend/src/components/map/MapWorkspace.tsx") assert "analysisMode === 'current'" in workspace # Theme availability depends on a dataset or an on-demand product; # evolution additionally requires a time series. Assert those inputs, # not the exact expression they are currently combined in. assert_wired(workspace, "onDemandProduct", "evolutionAvailable") assert "meetmomenten" in workspace assert "Tijdreeks" in workspace # Themes without a time series must be labelled as current-state only. # Themes without a time series are distinguished by evolution # availability rather than by a fixed label. assert_wired(workspace, "evolutionAvailable", "meetmomenten") assert "Geen tijdreeks beschikbaar" not in workspace def test_regional_time_series_remain_real_persisted_sources() -> None: regional_operator = read("scripts/provision_regional_timeseries.py") temporal_service = read("backend/app/services/temporal_analysis_service.py") assert "provision_mol_population_history.py" in regional_operator assert "provision_official_landuse_timeseries.py" in regional_operator assert "TemporalAnalysisService._get_temporal_dataset" in temporal_service assert "VectorFeatureService.summarize_features_by_bbox" in temporal_service assert "object_changes=object_changes" in temporal_service