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

147 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
陆运五套询价必填校验。不连 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.schema.field_validate import (
display_name,
harvest_oral_land_vehicle,
promote_land_vehicle_from_container,
shape_facts_for_chosen_mode,
validate_required_fields,
)
class LandFieldValidateTest(unittest.TestCase):
def test_ltl_missing_volume(self):
got = validate_required_fields(
facts={"起运港": "广州", "目的港": "深圳", "品名": "衣服", "毛重": "50kg"},
business_line="LAND",
land_subtype="国内运输拼车",
)
self.assertFalse(got["ok"])
self.assertIn("体积", got["missing"])
def test_hk_lcl_skips_vehicle(self):
"""中港零担/集拼:询价不要车型/数量。"""
got = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "香港",
"品名": "衣服",
},
business_line="LAND",
land_subtype="中港零担/集拼",
)
self.assertTrue(got["ok"])
self.assertNotIn("车型/数量", got["missing"])
self.assertNotIn("体积", got["missing"])
self.assertNotIn("毛重", got["missing"])
def test_hk_full_truck_requires_vehicle(self):
"""中港整车:询价必填车型/数量。"""
missing = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "香港",
"品名": "衣服",
},
business_line="LAND",
land_subtype="中港整车",
)
self.assertFalse(missing["ok"])
self.assertIn("车型/数量", missing["missing"])
got = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "香港",
"品名": "衣服",
"车型/数量": "9米6/1",
},
business_line="LAND",
land_subtype="中港整车",
)
self.assertTrue(got["ok"])
self.assertEqual(got["facts"]["车型/数量"], "9米6/1")
def test_domestic_ftl_one_field(self):
got = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "深圳",
"品名": "衣服",
"车型/数量": "9米6/1",
},
business_line="LAND",
land_subtype="国内运输整车",
)
self.assertTrue(got["ok"])
self.assertEqual(got["facts"]["车型/数量"], "9米6/1")
def test_cross_ftl_folds_split_keys(self):
got = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "河内",
"品名": "衣服",
"车型": "9米6",
"数量": "1",
},
business_line="LAND",
land_subtype="跨境整车",
)
self.assertTrue(got["ok"])
self.assertEqual(got["facts"]["车型/数量"], "9米6/1")
def test_harvest_45hq_xiangche(self):
"""口语 45HQ(13.5厢车)必须写入车型/数量。"""
text = (
"陆运,苏州市到谅山,中越整车,通信机柜及线缆配件,"
"45HQ(13.5厢车),9.11"
)
got = harvest_oral_land_vehicle(text, {})
self.assertIn("45HQ", got.get("车型/数量", ""))
self.assertIn("厢车", got.get("车型/数量", ""))
def test_promote_container_to_land_vehicle(self):
"""陆运误入箱型箱量时改写到车型/数量,收口后仍保留。"""
promoted = promote_land_vehicle_from_container(
{"箱型箱量": "45HQ(13.5厢车)", "品名": "机柜"}
)
self.assertEqual(promoted.get("车型/数量"), "45HQ(13.5厢车)")
shaped = shape_facts_for_chosen_mode(promoted, "LAND")
self.assertEqual(shaped.get("车型/数量"), "45HQ(13.5厢车)")
self.assertFalse(shaped.get("箱型箱量"))
def test_quote_date_defaults(self):
got = validate_required_fields(
facts={
"起运港": "广州",
"目的港": "深圳",
"品名": "衣服",
"体积": "100CBM",
"毛重": "50kg",
},
business_line="LAND",
land_subtype="国内运输拼车",
)
self.assertTrue(got["ok"])
self.assertRegex(got["facts"]["报价日期"], r"^\d{4}-\d{2}-\d{2}$")
def test_land_display_names(self):
self.assertEqual(display_name("起运港", "LAND"), "始发站")
self.assertEqual(display_name("品名", "LAND"), "货物品名")
if __name__ == "__main__":
unittest.main()