fix: name assignee_child_ids in child validation errors (NQ67-ERR-001)

This commit is contained in:
2026-09-17 08:39:47 -04:00
parent f478528c67
commit 624cb7a53e
2 changed files with 25 additions and 11 deletions
@@ -200,15 +200,25 @@ async def create_quest_definition(
storage = schedule_rule_to_storage(rule) storage = schedule_rule_to_storage(rule)
dao = QuestDefinitionsDao(database) dao = QuestDefinitionsDao(database)
snapshot = await dao.create_with_rule_and_windows( try:
name, snapshot = await dao.create_with_rule_and_windows(
storage, name,
_now_stamp(), storage,
assignee_ids, _now_stamp(),
window_specs, assignee_ids,
description=description_value, window_specs,
icon=icon_value, description=description_value,
) icon=icon_value,
)
except ValueError as error:
# The DAO's assignee check names only the child; re-raise so the
# public contract names the field the caller actually passed.
message = str(error)
if message.startswith("child "):
raise ValueError(
f"assignee_child_ids: {message}"
) from error
raise
decoded_rule = schedule_rule_from_storage(storage) decoded_rule = schedule_rule_from_storage(storage)
return CreatedQuestDefinition( return CreatedQuestDefinition(
definition=snapshot.definition, definition=snapshot.definition,
+6 -2
View File
@@ -249,7 +249,9 @@ def test_create_rejects_inactive_child(tmp_path) -> None:
async def _body(database, children, rules, definitions, child): async def _body(database, children, rules, definitions, child):
inactive = await children.create("Bo", NOW) inactive = await children.create("Bo", NOW)
await children.set_active(inactive.id, False) await children.set_active(inactive.id, False)
with pytest.raises(ValueError, match="inactive"): with pytest.raises(
ValueError, match="assignee_child_ids.*inactive"
):
await create_quest_definition( await create_quest_definition(
database, database,
"Brush teeth", "Brush teeth",
@@ -264,7 +266,9 @@ def test_create_rejects_inactive_child(tmp_path) -> None:
def test_create_rejects_unknown_child(tmp_path) -> None: def test_create_rejects_unknown_child(tmp_path) -> None:
async def _body(database, children, rules, definitions, child): async def _body(database, children, rules, definitions, child):
with pytest.raises(ValueError, match="does not exist"): with pytest.raises(
ValueError, match="assignee_child_ids.*does not exist"
):
await create_quest_definition( await create_quest_definition(
database, "Brush teeth", _daily_rule(), [999], ["morning"] database, "Brush teeth", _daily_rule(), [999], ["morning"]
) )