"""Unit tests for data_layer.reference_values (summary assembly, no DB).""" from datetime import date from decimal import Decimal from data_layer.reference_values import _entry_dict_from_ranked_row, build_summary_tiles_from_ranked_rows def test_build_summary_tiles_single_type_two_rows(): raw = [ { "type_key": "hr_max", "type_label": "HF max", "type_sort_order": 1, "value_data_type": "decimal", "rn": 1, "id": 2, "effective_date": "2026-04-01", "value_numeric": 180.0, "value_text": None, "unit": "bpm", }, { "type_key": "hr_max", "type_label": "HF max", "type_sort_order": 1, "value_data_type": "decimal", "rn": 2, "id": 1, "effective_date": "2026-03-01", "value_numeric": 175.0, "value_text": None, "unit": "bpm", }, ] tiles = build_summary_tiles_from_ranked_rows(raw) assert len(tiles) == 1 t = tiles[0] assert t["type_key"] == "hr_max" assert t["latest"]["value_numeric"] == 180.0 assert t["previous"]["value_numeric"] == 175.0 assert "sort_key" not in t def test_build_summary_tiles_multi_type_order(): raw = [ {"type_key": "b", "type_label": "B", "type_sort_order": 2, "value_data_type": "decimal", "rn": 1, "id": 1}, {"type_key": "a", "type_label": "A", "type_sort_order": 1, "value_data_type": "decimal", "rn": 1, "id": 2}, ] tiles = build_summary_tiles_from_ranked_rows(raw) assert [x["type_key"] for x in tiles] == ["a", "b"] def test_entry_dict_from_ranked_row_normalizes_decimal(): row = { "id": 1, "profile_id": "p", "reference_value_type_id": 9, "effective_date": date(2026, 4, 1), "value_numeric": Decimal("42.5"), "value_text": None, "unit": "bpm", "source": "lab", "confidence": "high", "method": "spiro", "notes": None, "extra": None, "created_at": date(2026, 4, 2), "updated_at": date(2026, 4, 2), "type_key": "hr_max", "type_label": "HF max", } out = _entry_dict_from_ranked_row(row) assert out["value_numeric"] == 42.5 assert out["effective_date"] == "2026-04-01"