78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from dataclasses import asdict
|
||
|
||
from genesis.data_models import (
|
||
CellComment, CellFormatting, CellValue, Confidence, ElementType,
|
||
ExcelTable, ExtractionMethod, ImageAnalysis, ParsedTemplate, Provenance,
|
||
RelationType, RuleDocument, SheetType, StructuredSource,
|
||
)
|
||
|
||
|
||
def test_sheettype_has_8_members():
|
||
assert len(SheetType) == 8
|
||
assert SheetType.FUNCTION.value == "FUNCTION"
|
||
assert SheetType.GENERIC.value == "GENERIC"
|
||
|
||
|
||
def test_value_enum_members():
|
||
assert ElementType.FUNCTION.value == "機能"
|
||
assert RelationType.USE.value == "利用"
|
||
assert Confidence.HIGH.value == "high"
|
||
assert ExtractionMethod.OPENPYXL.value == "openpyxl"
|
||
|
||
|
||
def test_cellformatting_defaults():
|
||
fmt = CellFormatting()
|
||
assert fmt.strikethrough is False
|
||
assert fmt.font_color is None
|
||
assert fmt.bg_color is None
|
||
|
||
|
||
def test_cellvalue_forward_reference_works():
|
||
"""CellValue 引用后置定义的 CellFormatting/CellComment(future.annotations 落地)"""
|
||
prov = Provenance(file_name="f.xlsx", sheet_name="S", row=1, column="A", column_header="h")
|
||
cv = CellValue(
|
||
value="x",
|
||
provenance=prov,
|
||
formatting=CellFormatting(strikethrough=True),
|
||
comment=CellComment(author="reviewer", text="check", source_uri="f.xlsx#S!A1"),
|
||
)
|
||
assert cv.formatting.strikethrough is True
|
||
assert cv.comment.author == "reviewer"
|
||
|
||
|
||
def test_excel_table_references_sheettype():
|
||
table = ExcelTable(
|
||
name="機能一覧",
|
||
detected_type=SheetType.FUNCTION,
|
||
extraction_method=ExtractionMethod.OPENPYXL.value,
|
||
headers=["機能ID", "機能名"],
|
||
rows=[],
|
||
)
|
||
assert table.detected_type is SheetType.FUNCTION
|
||
assert table.extraction_method == "openpyxl"
|
||
|
||
|
||
def test_structured_source_assembles_all():
|
||
source = StructuredSource(
|
||
tables=[],
|
||
template=ParsedTemplate(file_name="t.docx", sections=[], placeholders={}, styles={}),
|
||
rule_docs=[RuleDocument(
|
||
file_name="記入規則.docx", category="write", markdown_content="# 規則",
|
||
source_path="samples/記入規則.docx", file_type="word", hash="abc",
|
||
)],
|
||
image_analyses=[ImageAnalysis(
|
||
image_ref="img1", description="画面遷移図", confidence=0.9,
|
||
source_uri="f.xlsx#S!A1", sheet_name="S", anchor_cell="A1", status="recognized",
|
||
)],
|
||
existing_system=None,
|
||
comments=[],
|
||
)
|
||
assert source.rule_docs[0].category == "write"
|
||
assert source.image_analyses[0].nearby_text == ""
|
||
|
||
|
||
def test_asdict_serializable():
|
||
prov = Provenance(file_name="f.xlsx", sheet_name="S", row=1, column="A", column_header="h")
|
||
d = asdict(CellValue(value=1, provenance=prov))
|
||
assert d["provenance"]["row"] == 1
|