feat(datastore): add diaper and feeding tracking, automated update_website posthook, and morning_briefing

This commit is contained in:
Moritz Graf
2026-10-11 12:16:24 +02:00
parent 80e38ab64a
commit 967909c3a7
4 changed files with 1074 additions and 3 deletions
+62
View File
@@ -675,5 +675,67 @@ def test_cli_rejects_invalid_kind(temp_datastore: DatastoreEngine):
assert "Invalid kind 'true'" in proc.stderr
def test_diaper_logging(temp_datastore: DatastoreEngine):
"""Verifies diaper change events, feedback, and DuckDB views."""
res = temp_datastore.add_event(
kind="diaper.change",
subject="mila",
actor="agent:hebamme",
start="2026-10-11T09:45:00+02:00",
payload={"pee": True, "poo": True, "texture": "normal"},
)
assert res["status"] == "success"
feedback = res["feedback"]
assert feedback["total_changes"] == 1
assert feedback["wet_count"] == 1
assert feedback["dirty_count"] == 1
assert "1 gewechselt" in feedback["day_total_formatted"]
# Add second diaper (only pee)
res2 = temp_datastore.add_event(
kind="diaper.change",
subject="mila",
actor="agent:hebamme",
start="2026-10-11T12:30:00+02:00",
payload={"pee": True, "poo": False},
)
assert res2["status"] == "success"
feedback2 = res2["feedback"]
assert feedback2["total_changes"] == 2
assert feedback2["wet_count"] == 2
assert feedback2["dirty_count"] == 1
# Check v_diaper and v_diaper_daily views
rows = temp_datastore.query("SELECT * FROM v_diaper WHERE subject = 'mila'")
assert len(rows) == 2
daily = temp_datastore.query("SELECT * FROM v_diaper_daily WHERE subject = 'mila' AND log_date = '2026-10-11'")
assert len(daily) == 1
assert daily[0]["total_changes"] == 2
assert daily[0]["wet_count"] == 2
assert daily[0]["dirty_count"] == 1
def test_feeding_logging(temp_datastore: DatastoreEngine):
"""Verifies feeding bottle events, feedback, and DuckDB views."""
res = temp_datastore.add_event(
kind="feeding.bottle",
subject="mila",
actor="agent:hebamme",
start="2026-10-11T06:30:00+02:00",
payload={"amount_ml": 180, "consumed_ml": 160, "milk_type": "pre"},
)
assert res["status"] == "success"
feedback = res["feedback"]
assert feedback["bottle_count"] == 1
assert feedback["total_consumed_ml"] == 160.0
assert "160 ml getrunken" in feedback["day_total_formatted"]
# Check v_feeding_daily view
daily = temp_datastore.query("SELECT * FROM v_feeding_daily WHERE subject = 'mila' AND log_date = '2026-10-11'")
assert len(daily) == 1
assert daily[0]["bottle_count"] == 1
assert daily[0]["total_consumed_ml"] == 160.0