Files
operating-room-monitor-server/backend/tests/test_voice_confirm.py
Kevin 1af442481e 重组为 backend/clients/docs 三层结构,并清理 git 污染。
将后端迁入 backend/,完善根目录 .gitignore,删除误提交的 .mypy_cache 缓存文件。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 16:02:25 +08:00

68 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from app.services.voice_confirm import (
build_prompt_text,
match_voice_choice_against_candidates,
parse_voice_choice,
)
def test_parse_voice_choice_substring() -> None:
assert parse_voice_choice("用的是纱布对吧", ["纱布", "缝线"]) == "纱布"
def test_parse_voice_choice_numeric() -> None:
assert parse_voice_choice("第2个", ["纱布", "缝线", "钳子"]) == "缝线"
def test_parse_voice_choice_ordinal_chinese() -> None:
opts = ["纱布", "缝线", "钳子"]
assert parse_voice_choice("第一个", opts) == "纱布"
assert parse_voice_choice("第一个。", opts) == "纱布"
assert parse_voice_choice("第2个", opts) == "缝线"
assert parse_voice_choice("第二", opts) == "缝线"
assert parse_voice_choice("选3", opts) == "钳子"
assert parse_voice_choice("选项2", ["纱布", "缝线"]) == "缝线"
def test_parse_voice_choice_single_chinese_digit_with_few_options() -> None:
assert parse_voice_choice("", ["纱布", "缝线"]) == "纱布"
assert parse_voice_choice("", ["纱布", "缝线"]) == "缝线"
def test_parse_voice_choice_negative() -> None:
assert parse_voice_choice("不是", ["纱布", "缝线"]) is None
def test_build_prompt_contains_options() -> None:
text = build_prompt_text([("纱布", 0.4), ("缝线", 0.3)])
assert text.startswith("请确认。")
assert "第1个纱布。" in text
assert "第2个缝线。" in text
def test_build_prompt_empty_options() -> None:
assert build_prompt_text([]) == "请确认。"
def test_parse_voice_choice_empty_options() -> None:
assert parse_voice_choice("第1个", []) is None
def test_match_voice_against_full_candidate_list() -> None:
assert (
match_voice_choice_against_candidates(
"刚才用的是止血钳",
["纱布", "缝线", "止血钳"],
)
== "止血钳"
)
def test_match_voice_longest_candidate_first() -> None:
assert (
match_voice_choice_against_candidates(
"拿的一次性止血钳",
["止血钳", "一次性止血钳"],
)
== "一次性止血钳"
)