Files
Cognitive_Agent/tests/unit/test_saved_mode_management_intent.py
T

165 lines
5.3 KiB
Python

from __future__ import annotations
import pytest
from cognitive_agent.application.mode_profile_intent import (
is_mode_profile_query,
is_mode_profile_update_shape,
parse_mode_profile_delete,
parse_mode_profile_update,
)
@pytest.mark.parametrize(
("message", "expected"),
(
(
"把阅读模式中空调温度调整到26度",
("阅读模式", "空调温度调整到26度"),
),
(
"调整办公模式,把办公模式的副驾空调温度调整为26度。",
("办公模式", "副驾空调温度调整为26度"),
),
(
"请帮我把“阅读模式”里的空调温度改成25度吧。",
("阅读模式", "空调温度改成25度"),
),
(
"将看书模式里的风量设置成2档",
("看书模式", "风量设置成2档"),
),
(
"麻烦调整一下阅读模式:遮阳帘设置为50%",
("阅读模式", "遮阳帘设置为50%"),
),
(
"阅读模式内的阅读灯打开",
("阅读模式", "阅读灯打开"),
),
),
)
def test_saved_mode_update_parser_accepts_natural_variants(
message: str,
expected: tuple[str, str],
) -> None:
assert parse_mode_profile_update(message) == expected
@pytest.mark.parametrize("change", (
"第二阶段保持30秒", "第二阶段持续16分钟", "循环21次", "重复两次",
"重复1.5次", "持续30秒", "全部阶段持续2分钟",
))
def test_schedule_update_predicates_stay_on_control_plane_even_when_bounds_are_invalid(change):
assert parse_mode_profile_update(f"把上车预热模式的{change}") == ("上车预热模式", change)
@pytest.mark.parametrize("message", (
"把上车预热模式的第二阶段保持30秒合适吗?",
"不要把上车预热模式的第二阶段保持30秒",
"上车预热模式的第二阶段不要保持30秒",
"把上车预热模式的重复两次,但是不要保存",
"解释把上车预热模式的重复两次",
"创建一个上车预热模式,第二阶段保持30秒",
))
def test_schedule_update_predicates_do_not_authorize_queries_negation_or_creation(message):
assert parse_mode_profile_update(message) is None
@pytest.mark.parametrize(
"message",
(
"把空调温度调整到26度",
"副驾空调温度调到26度",
"执行阅读模式",
"进入阅读模式",
"删除阅读模式",
"不要修改阅读模式中的空调温度",
"阅读模式中空调温度是多少?",
"把阅读模式中空调温度调整到26度合适吗?",
"如何调整阅读模式中的空调温度?",
"用户说‘把阅读模式中空调温度调整到26度’",
),
)
def test_saved_mode_update_parser_rejects_controls_questions_and_quoted_examples(
message: str,
) -> None:
assert parse_mode_profile_update(message) is None
def test_negated_mode_update_shape_is_preserved_but_never_actionable() -> None:
message = "把观影模式的遮阳帘打开到100%,但是不要执行"
assert is_mode_profile_update_shape(message)
assert parse_mode_profile_update(message) is None
@pytest.mark.parametrize(
("message", "expected_name"),
(
("删除阅读模式", "阅读模式"),
("删除一下阅读模式。", "阅读模式"),
("请帮我删除一下看书模式吧", "看书模式"),
("麻烦移除阅读模式!", "阅读模式"),
("把阅读模式删掉", "阅读模式"),
("把“阅读模式”删除。", "阅读模式"),
),
)
def test_saved_mode_delete_parser_accepts_explicit_imperative_variants(
message: str,
expected_name: str,
) -> None:
assert parse_mode_profile_delete(message) == expected_name
@pytest.mark.parametrize(
"message",
(
"删除模式",
"删除功能模式",
"不要删除阅读模式",
"先别把阅读模式删掉",
"删除阅读模式会怎样?",
"可以删除阅读模式吗?",
"如何删除阅读模式?",
"阅读模式不存在就删除",
"用户说‘删除阅读模式’",
"执行阅读模式",
"关闭阅读模式",
"取消阅读模式",
),
)
def test_saved_mode_delete_parser_rejects_ambiguous_or_non_imperative_text(
message: str,
) -> None:
assert parse_mode_profile_delete(message) is None
@pytest.mark.parametrize(
"message",
(
"办公模式下会控制哪些车端设备,执行哪些动作?",
"阅读模式里都有哪些动作",
"看书模式会把空调设置为多少度?",
"请展示一下阅读模式的设备和参数",
"办公模式包含什么配置",
),
)
def test_saved_mode_detail_questions_are_classified_as_queries(message: str) -> None:
assert is_mode_profile_query(message)
assert parse_mode_profile_update(message) is None
assert parse_mode_profile_delete(message) is None
@pytest.mark.parametrize(
"message",
(
"把办公模式的副驾空调温度调整为26度",
"删除办公模式",
"执行办公模式",
"副驾空调温度调整为26度",
),
)
def test_mutations_and_immediate_controls_are_not_detail_queries(message: str) -> None:
assert not is_mode_profile_query(message)