from app.services.supplier_cleaning import infer_location, normalized_key, resolve_canonical_name, split_supplier_cell def test_split_supplier_cell_preserves_multiple_supplier_mentions() -> None: mentions = split_supplier_cell("内料:博元\n瓶子,盖子:皓盛/佛山执得") assert [item.name for item in mentions] == ["博元", "皓盛", "佛山执得"] assert mentions[0].material_type == "内料" assert mentions[1].material_type == "盖子" def test_empty_supplier_markers_are_ignored() -> None: assert split_supplier_cell("/") == [] assert normalized_key("佛山市执得包装有限公司") == "佛山市执得包装" assert infer_location("佛山市执得包装有限公司") == ("佛山", "广东") def test_purchase_order_full_name_wins_when_short_name_is_unambiguous() -> None: names = ["佛山市佳亿包装有限公司", "广州祥印包装有限公司"] assert resolve_canonical_name("佳亿", names) == ("佛山市佳亿包装有限公司", True) assert resolve_canonical_name("佛山执得", ["佛山市执得塑料制品有限公司"]) == ( "佛山市执得塑料制品有限公司", True, ) def test_material_and_factory_labels_are_not_supplier_names() -> None: mentions = split_supplier_cell("内料工厂:众绘\n软管工厂:永禾\n彩盒工厂:佳亿") assert [item.name for item in mentions] == ["众绘", "永禾", "佳亿"] assert all(item.role == "加工厂" for item in mentions)