feat(datastore): add diaper and feeding tracking, automated update_website posthook, and morning_briefing
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user