Skip to content

Commit cd45323

Browse files
committed
test: unit testing LivingLab schema with dependency data
1 parent 13223e6 commit cd45323

3 files changed

Lines changed: 563 additions & 0 deletions

File tree

tests/test_schemas/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Schema tests

tests/test_schemas/conftest.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
"""Shared fixtures for schema tests."""
2+
import pytest
3+
from sum_impact_assessment.schemas.core import KPI, KPILivingLabResult, LivingLab, Measure, KPIGroup, KPIValueType
4+
5+
6+
@pytest.fixture
7+
def sample_kpi():
8+
"""Sample KPI with progression_target=1 (increase desired)."""
9+
return KPI(
10+
id="kpi_test_1",
11+
name="Test KPI - Increase Desired",
12+
progression_target=1,
13+
value_type=KPIValueType.percentage,
14+
value_min=0.0,
15+
value_max=1.0
16+
)
17+
18+
19+
@pytest.fixture
20+
def sample_kpi_decrease():
21+
"""Sample KPI with progression_target=0 (decrease desired)."""
22+
return KPI(
23+
id="kpi_test_2",
24+
name="Test KPI - Decrease Desired",
25+
progression_target=0,
26+
value_type=KPIValueType.ratio,
27+
value_min=None,
28+
value_max=None
29+
)
30+
31+
32+
@pytest.fixture
33+
def sample_kpi_no_bounds():
34+
"""Sample KPI without min/max bounds."""
35+
return KPI(
36+
id="kpi_test_3",
37+
name="Test KPI - No Bounds",
38+
progression_target=1,
39+
value_type=KPIValueType.custom_unit
40+
)
41+
42+
43+
@pytest.fixture
44+
def sample_measure():
45+
"""Sample Measure."""
46+
return Measure(
47+
id="measure_test_001",
48+
name="Test Measure"
49+
)
50+
51+
52+
@pytest.fixture
53+
def sample_measures():
54+
"""List of sample measures."""
55+
return [
56+
Measure(id="measure_001", name="Congestion charges"),
57+
Measure(id="measure_002", name="Parking charges")
58+
]
59+
60+
61+
@pytest.fixture
62+
def sample_kpi_living_lab_result(sample_kpi):
63+
"""Sample KPILivingLabResult with valid before/after values."""
64+
return KPILivingLabResult(
65+
id=sample_kpi.id,
66+
name=sample_kpi.name,
67+
progression_target=sample_kpi.progression_target,
68+
value_type=sample_kpi.value_type,
69+
value_min=sample_kpi.value_min,
70+
value_max=sample_kpi.value_max,
71+
living_lab_id="lab_test_001",
72+
value_before=0.5,
73+
value_after=0.8
74+
)
75+
76+
77+
@pytest.fixture
78+
def sample_kpi_definitions():
79+
"""List of KPI definitions for testing data loading."""
80+
return [
81+
KPI(
82+
id="kpi_1",
83+
name="Level of completion of SUMP measures",
84+
progression_target=1,
85+
value_type=KPIValueType.percentage,
86+
value_min=0.0,
87+
value_max=1.0
88+
),
89+
KPI(
90+
id="kpi_2",
91+
name="Modal split - car",
92+
progression_target=0,
93+
value_type=KPIValueType.percentage,
94+
value_min=0.0,
95+
value_max=1.0
96+
),
97+
KPI(
98+
id="kpi_3",
99+
name="Modal split - public transport",
100+
progression_target=1,
101+
value_type=KPIValueType.percentage,
102+
value_min=0.0,
103+
value_max=1.0
104+
)
105+
]

0 commit comments

Comments
 (0)