145 lines
4.4 KiB
Python
145 lines
4.4 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(
|
|
"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)
|