Skip to content

Commit f2a0c2e

Browse files
committed
Fix reform-id calibration test coverage
1 parent f536847 commit f2a0c2e

4 files changed

Lines changed: 58 additions & 7 deletions

File tree

policyengine_us_data/db/create_database_tables.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,15 +506,21 @@ def create_database(
506506
# Create validation triggers
507507
create_validation_triggers(engine)
508508

509-
# Create SQL views
509+
create_or_replace_views(engine)
510+
511+
logger.info(f"Database and tables created successfully at {db_uri}")
512+
return engine
513+
514+
515+
def create_or_replace_views(engine) -> None:
516+
"""Refresh SQL views so existing databases pick up schema changes."""
510517
with engine.connect() as conn:
518+
conn.execute(text("DROP VIEW IF EXISTS stratum_domain"))
519+
conn.execute(text("DROP VIEW IF EXISTS target_overview"))
511520
conn.execute(text(STRATUM_DOMAIN_VIEW))
512521
conn.execute(text(TARGET_OVERVIEW_VIEW))
513522
conn.commit()
514523

515-
logger.info(f"Database and tables created successfully at {db_uri}")
516-
return engine
517-
518524

519525
if __name__ == "__main__":
520526
engine = create_database()

policyengine_us_data/tests/test_calibration/test_unified_calibration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def test_county_var_uses_county_values(self):
459459
person_hh_idx = np.array([0, 1, 2, 3])
460460

461461
builder = UnifiedMatrixBuilder.__new__(UnifiedMatrixBuilder)
462-
hh_vars, _ = builder._assemble_clone_values(
462+
hh_vars, _, _ = builder._assemble_clone_values(
463463
state_values,
464464
clone_states,
465465
person_hh_idx,
@@ -499,7 +499,7 @@ def test_non_county_var_uses_state_values(self):
499499
person_hh_idx = np.array([0, 1, 2, 3])
500500

501501
builder = UnifiedMatrixBuilder.__new__(UnifiedMatrixBuilder)
502-
hh_vars, _ = builder._assemble_clone_values(
502+
hh_vars, _, _ = builder._assemble_clone_values(
503503
state_values,
504504
clone_states,
505505
person_hh_idx,

policyengine_us_data/tests/test_calibration/test_unified_matrix_builder.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,11 @@ def test_reform_targets_preserved(self):
212212
def test_inactive_targets_are_excluded(self):
213213
b = self._make_builder(time_period=2024)
214214
df = b._query_targets({"stratum_ids": [1], "variables": ["aca_ptc"]})
215-
baseline_rows = df[(df["variable"] == "aca_ptc") & (df["reform_id"] == 0)]
215+
baseline_rows = df[
216+
(df["variable"] == "aca_ptc")
217+
& (df["reform_id"] == 0)
218+
& (df["stratum_id"] == 1)
219+
]
216220
self.assertEqual(len(baseline_rows), 1)
217221
self.assertEqual(int(baseline_rows.iloc[0]["period"]), 2022)
218222
self.assertEqual(float(baseline_rows.iloc[0]["value"]), 10000.0)
@@ -526,6 +530,7 @@ def test_return_structure_no_takeup(self, mock_msim_cls, mock_gcv):
526530
sim=None,
527531
target_vars={"snap"},
528532
constraint_vars={"income"},
533+
reform_vars=set(),
529534
geography=geo,
530535
rerandomize_takeup=False,
531536
)
@@ -560,6 +565,7 @@ def test_fresh_sim_per_state(self, mock_msim_cls, mock_gcv):
560565
sim=None,
561566
target_vars={"snap"},
562567
constraint_vars=set(),
568+
reform_vars=set(),
563569
geography=geo,
564570
rerandomize_takeup=False,
565571
)
@@ -582,6 +588,7 @@ def test_state_fips_set_correctly(self, mock_msim_cls, mock_gcv):
582588
sim=None,
583589
target_vars={"snap"},
584590
constraint_vars=set(),
591+
reform_vars=set(),
585592
geography=geo,
586593
rerandomize_takeup=False,
587594
)
@@ -617,6 +624,7 @@ def test_takeup_vars_forced_true(self, mock_msim_cls, mock_gcv):
617624
sim=None,
618625
target_vars={"snap"},
619626
constraint_vars=set(),
627+
reform_vars=set(),
620628
geography=geo,
621629
rerandomize_takeup=True,
622630
)
@@ -664,6 +672,7 @@ def test_count_vars_skipped(self, mock_msim_cls, mock_gcv):
664672
sim=None,
665673
target_vars={"snap", "snap_count"},
666674
constraint_vars=set(),
675+
reform_vars=set(),
667676
geography=geo,
668677
rerandomize_takeup=False,
669678
)
@@ -914,6 +923,7 @@ def test_workers_gt1_creates_pool(self, mock_msim_cls, mock_gcv, mock_pool_cls):
914923
sim=None,
915924
target_vars={"snap"},
916925
constraint_vars=set(),
926+
reform_vars=set(),
917927
geography=geo,
918928
rerandomize_takeup=False,
919929
workers=2,
@@ -939,6 +949,7 @@ def test_workers_1_skips_pool(self, mock_msim_cls, mock_gcv):
939949
sim=None,
940950
target_vars={"snap"},
941951
constraint_vars=set(),
952+
reform_vars=set(),
942953
geography=geo,
943954
rerandomize_takeup=False,
944955
workers=1,

policyengine_us_data/tests/test_database.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import hashlib
2+
from sqlalchemy import text
23

34
import pytest
45
from sqlalchemy.exc import IntegrityError
@@ -8,6 +9,7 @@
89
Stratum,
910
StratumConstraint,
1011
Target,
12+
create_or_replace_views,
1113
create_database,
1214
)
1315

@@ -226,6 +228,38 @@ def test_target_with_null_source(engine):
226228
assert retrieved.source is None
227229

228230

231+
def test_create_database_refreshes_existing_views(tmp_path):
232+
db_uri = f"sqlite:///{tmp_path / 'test.db'}"
233+
engine = create_database(db_uri)
234+
235+
with engine.connect() as conn:
236+
conn.execute(text("DROP VIEW target_overview"))
237+
conn.execute(
238+
text(
239+
"""
240+
CREATE VIEW target_overview AS
241+
SELECT
242+
t.target_id,
243+
t.stratum_id,
244+
t.variable,
245+
t.value,
246+
t.period,
247+
t.active
248+
FROM targets t
249+
"""
250+
)
251+
)
252+
conn.commit()
253+
254+
create_or_replace_views(engine)
255+
256+
with engine.connect() as conn:
257+
cursor = conn.execute(text("SELECT * FROM target_overview LIMIT 0"))
258+
columns = [desc[0] for desc in cursor.cursor.description]
259+
260+
assert "reform_id" in columns
261+
262+
229263
def test_valid_geographic_hierarchy(engine):
230264
"""CD under its correct state should succeed."""
231265
with Session(engine) as session:

0 commit comments

Comments
 (0)