Files
Construction-project-master/tests/test_generators.py
2026-04-03 09:08:08 +09:00

89 lines
2.9 KiB
Python

from pathlib import Path
from openpyxl import load_workbook
from civilplan_mcp.tools.boq_generator import generate_boq_excel
from civilplan_mcp.tools.doc_generator import generate_investment_doc
from civilplan_mcp.tools.drawing_generator import generate_svg_drawing
from civilplan_mcp.tools.quantity_estimator import estimate_quantities
from civilplan_mcp.tools.project_parser import parse_project
from civilplan_mcp.tools.unit_price_query import get_unit_prices
def _sample_inputs(tmp_path: Path) -> tuple[dict, dict, dict]:
project_spec = parse_project(
description="소로 신설 L=890m B=6m 아스콘 2차선 상하수도 경기도 둔턱지역 2026~2028"
)
project_spec["output_dir"] = str(tmp_path)
quantities = estimate_quantities(
road_class="소로",
length_m=890,
width_m=6.0,
terrain="구릉",
pavement_type="아스콘",
include_water_supply=True,
include_sewage=True,
include_retaining_wall=True,
include_bridge=False,
bridge_length_m=0.0,
)
unit_prices = get_unit_prices(region="경기도", year=2026)
return project_spec, quantities, unit_prices
def test_generate_boq_excel_creates_workbook(tmp_path: Path) -> None:
project_spec, quantities, unit_prices = _sample_inputs(tmp_path)
result = generate_boq_excel(
project_name="소로 개설(신설) 공사",
project_spec=project_spec,
quantities=quantities,
unit_prices=unit_prices,
region="경기도",
year=2026,
output_filename="boq.xlsx",
)
workbook = load_workbook(result["file_path"], data_only=False)
assert "사업내역서(BOQ)" in workbook.sheetnames
def test_generate_investment_doc_creates_docx(tmp_path: Path) -> None:
project_spec, quantities, unit_prices = _sample_inputs(tmp_path)
boq = generate_boq_excel(
project_name="소로 개설(신설) 공사",
project_spec=project_spec,
quantities=quantities,
unit_prices=unit_prices,
region="경기도",
year=2026,
output_filename="boq_for_doc.xlsx",
)
result = generate_investment_doc(
project_name="소로 개설(신설) 공사",
project_spec=project_spec,
quantities=quantities,
legal_procedures={"summary": {"total_procedures": 3}, "phases": {}},
boq_summary=boq["summary"],
requester="22B Labs",
output_filename="investment.docx",
)
assert Path(result["file_path"]).exists()
def test_generate_svg_drawing_creates_svg(tmp_path: Path) -> None:
project_spec, quantities, _ = _sample_inputs(tmp_path)
result = generate_svg_drawing(
drawing_type="횡단면도",
project_spec=project_spec,
quantities=quantities,
scale="1:200",
output_filename="road.svg",
)
content = Path(result["file_path"]).read_text(encoding="utf-8")
assert "<svg" in content