Files
inquiry_robot/inquiry-agent/tests/test_land_collab_fields.py
T

103 lines
4.0 KiB
Python

"""
陆运群协同项:六套名单、展示名、预填、口语危险品。
不连企微 / TMS / 主账。
"""
from __future__ import annotations
import os
import sys
import unittest
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
if ROOT not in sys.path:
sys.path.insert(0, ROOT)
from agent.llm.extract_text import extract_collab_fields
from agent.schema.field_validate import (
collab_display_name,
collab_fields_for_ticket,
harvest_oral_collab,
land_collab_fields,
pick_collab_from_facts,
)
class LandCollabFieldsTest(unittest.TestCase):
def test_domestic_ltl_keys(self):
keys = land_collab_fields("国内运输拼车", "国内长途/零担")
self.assertEqual(keys, ("客户名称", "包装方式", "货值", "是否为危险品"))
def test_domestic_ftl_longhaul_keys(self):
keys = land_collab_fields("国内运输整车", "国内长途/零担")
self.assertEqual(keys, ("客户名称", "货值", "包装方式", "是否为危险品"))
def test_domestic_ftl_order(self):
keys = land_collab_fields("国内运输整车", "国内城配/拖车/打包")
self.assertEqual(keys, ("客户名称", "货值", "包装方式", "是否为危险品"))
def test_cross_ftl_no_vehicle(self):
keys = land_collab_fields("跨境整车", "东南亚")
self.assertIn("HS编码", keys)
self.assertNotIn("车型/数量", keys)
def test_hk_ftl_has_vehicle(self):
keys = land_collab_fields("中港整车", "中港/中亚/中欧")
self.assertIn("车型/数量", keys)
self.assertEqual(keys[0], "客户名称")
def test_unlisted_pair_empty(self):
self.assertEqual(land_collab_fields("国内运输拼车", "东南亚"), ())
def test_land_hs_display(self):
self.assertEqual(collab_display_name("HS编码", "LAND"), "海关编码")
self.assertEqual(collab_display_name("HS编码", "SEA"), "商品海关编码")
def test_ticket_sea_air(self):
self.assertIn("是否含电", collab_fields_for_ticket({}, "SEA"))
self.assertEqual(
collab_fields_for_ticket({}, "AIR"),
("是否含电", "是否含磁"),
)
def test_pick_skips_inquiry_vehicle(self):
got = pick_collab_from_facts(
{"包装方式": "纸箱", "车型/数量": "9米/1", "海关编码": "8479"},
land_collab_fields("跨境整车", "东南亚"),
)
self.assertEqual(got.get("包装方式"), "纸箱")
self.assertEqual(got.get("HS编码"), "8479")
self.assertNotIn("车型/数量", got)
def test_dg_oral(self):
self.assertEqual(harvest_oral_collab("普货")["是否为危险品"], "否")
self.assertEqual(harvest_oral_collab("危险品")["是否为危险品"], "是")
self.assertEqual(harvest_oral_collab("不是危险品")["是否为危险品"], "否")
def test_labeled_without_colon(self):
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
got = extract_collab_fields(
"客户名称张三 包装方式编织袋 货值 10万",
allowed_keys=allowed,
)
self.assertEqual(got.get("客户名称"), "张三")
self.assertEqual(got.get("包装方式"), "编织袋")
self.assertEqual(got.get("货值"), "10万")
def test_bare_pack_ignored(self):
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
self.assertEqual(extract_collab_fields("编织袋", allowed_keys=allowed), {})
def test_trade_terms_filtered_for_ltl(self):
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
got = extract_collab_fields("客户名称张三,贸易条款 FOB", allowed_keys=allowed)
self.assertEqual(got, {"客户名称": "张三"})
def test_sea_labeled_still_works(self):
got = extract_collab_fields("贸易条款:FOB")
self.assertEqual(got.get("贸易条款"), "FOB")
if __name__ == "__main__":
unittest.main()