fix: name assignee_child_ids in child validation errors (NQ67-ERR-001)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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"]
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user