- 新增 evidence_model.py:统一证据模型(source_type + images 列表),访问器兼容旧 image_b64/image_mime 单图字段 - phases/evidence.py:新增 collect() 多源分发 seam(仅 CAD)、capture_images() 整体+等分象限多图(结束复位视口)、sub_windows() - phases/review.py:多图逐张下采样喂 LLM,payload 增加 source_type - config.py:EVIDENCE_DETAIL_TILES=4 / EVIDENCE_MAX_IMAGES=5(默认开启多图) - 新增 tests/test_evidence_model.py,更新 evidence/review 断言与 fakes 归一
101 lines
2.8 KiB
Python
101 lines
2.8 KiB
Python
"""`dwg_review.evidence_model` 单元测试。"""
|
|
|
|
from dwg_review import evidence_model as em
|
|
|
|
|
|
def test_make_image_defaults():
|
|
assert em.make_image("QUJD") == {"b64": "QUJD", "mime": "image/png", "label": None}
|
|
|
|
|
|
def test_make_image_custom():
|
|
assert em.make_image("QUJD", "image/jpeg", "tile-1") == {
|
|
"b64": "QUJD",
|
|
"mime": "image/jpeg",
|
|
"label": "tile-1",
|
|
}
|
|
|
|
|
|
def test_make_image_empty_mime_falls_back():
|
|
assert em.make_image("x", "")["mime"] == "image/png"
|
|
|
|
|
|
def test_source_type_of_default_cad():
|
|
assert em.source_type_of({}) == em.SOURCE_CAD
|
|
assert em.source_type_of(None) == em.SOURCE_CAD
|
|
assert em.source_type_of({"source_type": ""}) == em.SOURCE_CAD
|
|
|
|
|
|
def test_source_type_of_explicit():
|
|
assert em.source_type_of({"source_type": "pdf"}) == "pdf"
|
|
assert em.source_type_of({"source_type": "image"}) == "image"
|
|
|
|
|
|
def test_evidence_images_new_form():
|
|
ev = {
|
|
"images": [
|
|
em.make_image("A", label="overall"),
|
|
em.make_image("B", label="tile-1"),
|
|
]
|
|
}
|
|
out = em.evidence_images(ev)
|
|
assert [i["b64"] for i in out] == ["A", "B"]
|
|
assert [i["label"] for i in out] == ["overall", "tile-1"]
|
|
|
|
|
|
def test_evidence_images_filters_empty_b64():
|
|
ev = {"images": [{"b64": "", "mime": "image/png"}, {"b64": "A"}]}
|
|
out = em.evidence_images(ev)
|
|
assert len(out) == 1
|
|
assert out[0]["b64"] == "A"
|
|
|
|
|
|
def test_evidence_images_legacy_fallback():
|
|
ev = {"image_b64": "LEG", "image_mime": "image/jpeg"}
|
|
assert em.evidence_images(ev) == [
|
|
{"b64": "LEG", "mime": "image/jpeg", "label": None}
|
|
]
|
|
|
|
|
|
def test_evidence_images_legacy_default_mime():
|
|
assert em.evidence_images({"image_b64": "LEG"})[0]["mime"] == "image/png"
|
|
|
|
|
|
def test_evidence_images_empty():
|
|
assert em.evidence_images({}) == []
|
|
assert em.evidence_images(None) == []
|
|
assert em.evidence_images({"images": []}) == []
|
|
|
|
|
|
def test_evidence_images_prefers_new_over_legacy():
|
|
ev = {"images": [em.make_image("NEW")], "image_b64": "OLD"}
|
|
assert [i["b64"] for i in em.evidence_images(ev)] == ["NEW"]
|
|
|
|
|
|
def test_primary_image_prefers_overall():
|
|
ev = {
|
|
"images": [
|
|
em.make_image("A", label="tile-1"),
|
|
em.make_image("B", label="overall"),
|
|
]
|
|
}
|
|
assert em.primary_image(ev)["b64"] == "B"
|
|
|
|
|
|
def test_primary_image_first_when_no_overall():
|
|
ev = {"images": [em.make_image("A", label="tile-1"), em.make_image("B")]}
|
|
assert em.primary_image(ev)["b64"] == "A"
|
|
|
|
|
|
def test_primary_image_none_when_empty():
|
|
assert em.primary_image({}) is None
|
|
|
|
|
|
def test_image_labels():
|
|
ev = {
|
|
"images": [
|
|
em.make_image("A", label="overall"),
|
|
em.make_image("B", label="tile-1"),
|
|
]
|
|
}
|
|
assert em.image_labels(ev) == ["overall", "tile-1"]
|