Files
DEMO-AGENT/tests/test_application_form_fill_template_config.py

98 lines
2.8 KiB
Python

import copy
import pytest
from review_agent.application_form_fill.services.template_config import (
DEFAULT_CONFIG_PATH,
compute_config_hash,
load_template_config,
validate_template_config,
)
def test_template_config_loads_and_validates_default_yaml(settings):
config = load_template_config()
errors = validate_template_config(config)
assert errors == []
assert config["version"] == "application_form_templates_v1"
registration = next(item for item in config["templates"] if item["code"] == "registration_certificate")
assert registration["file_format"] == "docx"
assert {field["key"] for field in registration["fields"]} >= {
"applicant_name",
"product_name",
"package_specification",
"main_components",
"intended_use",
"storage_condition_and_validity",
"attachments",
}
assert all(field["target"]["type"] == "table_row" for field in registration["fields"])
assert len(compute_config_hash(DEFAULT_CONFIG_PATH)) == 64
def test_template_config_reports_missing_source_dir():
config = load_template_config()
config["source_dir"] = "docs/not-exists"
errors = validate_template_config(config)
assert any("source_dir 不存在" in error for error in errors)
def test_template_config_reports_duplicate_code():
config = load_template_config()
duplicate = copy.deepcopy(config["templates"][0])
config["templates"].append(duplicate)
errors = validate_template_config(config)
assert any("模板 code 重复" in error for error in errors)
def test_template_config_reports_missing_source_file():
config = load_template_config()
config["templates"][0]["source_file"] = "missing.docx"
errors = validate_template_config(config)
assert any("source_file 不存在" in error for error in errors)
def test_template_config_reports_unsupported_target_type():
config = load_template_config()
config["templates"][0]["fields"][0]["target"]["type"] = "content_control"
errors = validate_template_config(config)
assert any("target.type 不支持" in error for error in errors)
def test_template_config_loads_custom_path(tmp_path):
config_path = tmp_path / "templates.yaml"
config_path.write_text(
"""
version: custom
source_dir: .
templates:
- code: custom_template
name: Custom
source_file: source.docx
output_label: Custom
file_format: docx
fields:
- key: product_name
label: 产品名称
target:
type: table_row
row_label: 产品名称
""".strip(),
encoding="utf-8",
)
(tmp_path / "source.docx").write_bytes(b"docx")
config = load_template_config(config_path)
assert validate_template_config(config, base_dir=tmp_path) == []
assert compute_config_hash(config_path)