aps-agent/tests/golden/test_folder_pack.py

72 lines
2.9 KiB
Python

# ============================================================
# 工程目录深度解析 + 按目录排产意图
# ============================================================
from __future__ import annotations
import os
from pathlib import Path
from server.agent_core.intent import parse_fast
from server.aps_domain.folder_pack import analyze_work_dir
from server.state.seed import seed_world
def test_analyze_work_dir_reads_xlsx(tmp_path: Path, monkeypatch):
# 最小可解析 CSV 订单表
orders = tmp_path / "订单.csv"
orders.write_text(
"订单号,产品编码,数量,交期,客户\n"
"SO001,P-1,10,2026-08-01,甲\n",
encoding="utf-8-sig",
)
mats = tmp_path / "物料.csv"
mats.write_text(
"编码,名称,类型,单位,库存\n"
"P-1,成品A,FINISHED_PRODUCT,件,100\n",
encoding="utf-8-sig",
)
class FakePS:
def snapshot(self, include_messages=False):
return {
"projects": [{"id": "p1", "name": "测", "workDir": str(tmp_path)}],
"sessions": [{"id": "s1", "projectId": "p1"}],
"files": [],
}
monkeypatch.setattr("server.state.projects.get_project_store", lambda: FakePS())
world = seed_world()
report = analyze_work_dir(world, "s1")
assert report["ok"] is True
assert report["totalOk"] >= 1
assert any(f["name"] == "订单.csv" for f in report["files"])
assert "字段" in report["markdown"] or any(f.get("headers") for f in report["files"])
assert "样例" in report["markdown"] or any(f.get("samples") for f in report["files"])
def test_schedule_intent_from_messy_zh():
world = seed_world()
assert parse_fast("以上数据根据排产你要怎么数据", world).intent == "folder.schedule"
assert parse_fast("解析工程目录", world).intent == "folder.analyze"
def test_kangni_style_headers_soft_preview():
"""康尼现场表头(料号/订单数量/计划结束时间…)应被 soft 识别为有效行。"""
from server.aps_domain.importers import preview_file, detect_field_map
world = seed_world()
csv = (
"订单代码,WBS号,料号,物料描述,计划结束时间,订单数量,项目名称\n"
"102285668,WBS1,28200003654300,承载机构,2026-08-08,1,穗莞深项目\n"
).encode("utf-8-sig")
preview = preview_file("订单.csv", csv, world, soft=True, kind_hint="orders")
assert preview["totalOk"] == 1
row = preview["batches"][0]["okRows"][0]
assert row["productCode"] == "28200003654300"
assert row["quantity"] == 1
assert row["deliveryDate"].startswith("2026-08-08")
assert row["customerName"] == "穗莞深项目"
fmap = detect_field_map("orders", ["订单代码", "料号", "订单数量", "计划结束时间", "项目名称"])
targets = {m["target"] for m in fmap}
assert {"productCode", "quantity", "deliveryDate", "customerName", "orderNo"} <= targets