diff --git a/custom_components/nestquest/quest_definitions.py b/custom_components/nestquest/quest_definitions.py index 1b5fa2b..28283e1 100644 --- a/custom_components/nestquest/quest_definitions.py +++ b/custom_components/nestquest/quest_definitions.py @@ -200,15 +200,25 @@ async def create_quest_definition( storage = schedule_rule_to_storage(rule) dao = QuestDefinitionsDao(database) - snapshot = await dao.create_with_rule_and_windows( - name, - storage, - _now_stamp(), - assignee_ids, - window_specs, - description=description_value, - icon=icon_value, - ) + try: + snapshot = await dao.create_with_rule_and_windows( + name, + storage, + _now_stamp(), + assignee_ids, + window_specs, + 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) return CreatedQuestDefinition( definition=snapshot.definition, diff --git a/tests/test_quest_definitions.py b/tests/test_quest_definitions.py index 2560dff..1f99808 100644 --- a/tests/test_quest_definitions.py +++ b/tests/test_quest_definitions.py @@ -249,7 +249,9 @@ def test_create_rejects_inactive_child(tmp_path) -> None: async def _body(database, children, rules, definitions, child): inactive = await children.create("Bo", NOW) 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( database, "Brush teeth", @@ -264,7 +266,9 @@ def test_create_rejects_inactive_child(tmp_path) -> None: def test_create_rejects_unknown_child(tmp_path) -> None: 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( database, "Brush teeth", _daily_rule(), [999], ["morning"] )