80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
import pytest
|
||
|
||
from review_agent.application_form_fill.services.field_merge import merge_fields, normalize_field_value, rank_source
|
||
|
||
|
||
def test_normalize_field_value_removes_whitespace():
|
||
assert normalize_field_value(" 2-8℃ 保存 \n 有效期12个月 ") == "2-8℃保存有效期12个月"
|
||
|
||
|
||
def test_rank_source_prefers_instructions():
|
||
assert rank_source("说明书") < rank_source("产品技术要求")
|
||
|
||
|
||
def test_merge_fields_prefers_instructions_and_marks_conflict():
|
||
regex_results = {
|
||
"fields": [
|
||
{
|
||
"key": "storage_condition_and_validity",
|
||
"label": "产品储存条件及有效期",
|
||
"value": "2-8℃保存,有效期12个月",
|
||
"source_file": "说明书.txt",
|
||
"source_role": "说明书",
|
||
"evidence": "产品储存条件及有效期:2-8℃保存,有效期12个月",
|
||
"confidence": 0.75,
|
||
},
|
||
{
|
||
"key": "storage_condition_and_validity",
|
||
"label": "产品储存条件及有效期",
|
||
"value": "-20℃保存",
|
||
"source_file": "产品技术要求.txt",
|
||
"source_role": "产品技术要求",
|
||
"evidence": "产品储存条件及有效期:-20℃保存",
|
||
"confidence": 0.8,
|
||
},
|
||
]
|
||
}
|
||
|
||
merged, conflicts = merge_fields(regex_results, {"fields": []})
|
||
|
||
field = merged["storage_condition_and_validity"]
|
||
assert field.value == "2-8℃保存,有效期12个月"
|
||
assert field.has_conflict is True
|
||
assert conflicts[0]["selected_value"] == "2-8℃保存,有效期12个月"
|
||
assert conflicts[0]["conflict_values"][0]["value"] == "-20℃保存"
|
||
|
||
|
||
def test_merge_fields_combines_consistent_values_without_conflict():
|
||
regex_results = {
|
||
"fields": [
|
||
{
|
||
"key": "product_name",
|
||
"label": "产品名称",
|
||
"value": "甲胎蛋白检测试剂盒",
|
||
"source_file": "说明书.txt",
|
||
"source_role": "说明书",
|
||
"evidence": "产品名称:甲胎蛋白检测试剂盒",
|
||
"confidence": 0.75,
|
||
}
|
||
]
|
||
}
|
||
llm_results = {
|
||
"fields": [
|
||
{
|
||
"key": "product_name",
|
||
"label": "产品名称",
|
||
"value": "甲胎蛋白 检测试剂盒",
|
||
"source_file": "产品技术要求.txt",
|
||
"source_role": "产品技术要求",
|
||
"evidence": "产品名称:甲胎蛋白 检测试剂盒",
|
||
"confidence": 0.9,
|
||
}
|
||
]
|
||
}
|
||
|
||
merged, conflicts = merge_fields(regex_results, llm_results)
|
||
|
||
assert merged["product_name"].value == "甲胎蛋白检测试剂盒"
|
||
assert merged["product_name"].has_conflict is False
|
||
assert conflicts == []
|