import { describe, expect, it } from "vitest"; import { buildCcWorkOrderFormValue } from "@/components/CcWorkOrderForm"; import { extractAttachIdTokens, matchSegmentAttachments, } from "@/services/parse/match-segment-attachments"; const MAIL85_FILES = [ "YT2604021091=76件换标走HIA1卡派出库操作指令.xlsx", "FBA19HW52S0L-76CTN-HIA1-覆盖贴1箱贴2张.pdf", "X003UHDF7B-304PCS-覆盖贴1箱贴1张.pdf", ]; const MAIL84_FILES = [ "WL103276-SBD1(1).pdf", "WL103944-WL103940.pdf", "WL98967-VGT2(1).pdf", "WL99583-LAX9.pdf", "WHSU5574991 卡转海.zip", ]; describe("extractAttachIdTokens", () => { it("picks FBA / YT / FNSKU / WL, not ISO container", () => { const ids = extractAttachIdTokens( "柜号 WHSU8127240 原箱号 YT2604021091 FBA19HW52S0L X003UHDF7B WL103276 SBD1", ); expect(ids).toEqual( expect.arrayContaining([ "YT2604021091", "FBA19HW52S0L", "X003UHDF7B", "WL103276", ]), ); expect(ids).not.toContain("WHSU8127240"); }); }); describe("matchSegmentAttachments", () => { it("mail85: 76件换标段挂 3 个贴标文件;833件历史轮不挂", () => { const current = matchSegmentAttachments({ segmentText: [ "Dear,", "原箱号 YT2604021091=FBA199R49LD6-MDW2=76 件操作指令", "换标后单号: FBA19HW52S0L-2G1MCB6X-HIA1=76 件", "FNSKU : X003UHDF7B ( 304PCS )", ].join("\n"), filenames: MAIL85_FILES, isCurrent: true, }); expect(current).toEqual(MAIL85_FILES); const hist = matchSegmentAttachments({ segmentText: [ "Dear,", "原箱号 YT2604021486=833 件操作指令", "换标后单号:FBA19DS6CXV4-2G1XD81L-LGB8=87 件", ].join("\n"), filenames: MAIL85_FILES, isCurrent: false, }); expect(hist).toEqual([]); }); it("mail84: 卡转海/贴标交付段按 WL 唛头挂 PDF + zip;拦截段不挂", () => { const seaBody = [ "WHSU5574991", "1.WL104834-2 SCK8 2件", "2.", "WL103944-WL103940 2", "WL99583 LAX9 2", "WL103276 SBD1 1", "WL98967 VGT2 2", "以上货物需要卡转海 麻烦贴标交付,UPS默认一箱贴两张。", ].join("\n"); const sea = matchSegmentAttachments({ segmentText: seaBody, filenames: MAIL84_FILES, isCurrent: true, }); expect(sea).toEqual( expect.arrayContaining([ "WL103276-SBD1(1).pdf", "WL103944-WL103940.pdf", "WL98967-VGT2(1).pdf", "WL99583-LAX9.pdf", "WHSU5574991 卡转海.zip", ]), ); const intercept = matchSegmentAttachments({ segmentText: [ "注意:", "1.WL103516", "WL103616", "以上几票需要拦截 清单中已备注", "2.", "WL101167", "WL92334", "这2票改自提", ].join("\n"), filenames: MAIL84_FILES, isCurrent: false, }); expect(intercept).toEqual([]); }); it("skips screenshot and DO; packing xlsx only if named in segment", () => { const files = [ "3邮箱.pdf", "WHSU5574991-DO.pdf", "柜号:MATU2745683卡派资料.xlsx", "WL103276-SBD1.pdf", ]; const wo = matchSegmentAttachments({ segmentText: "WL103276 SBD1 卡转海 贴标交付", filenames: files, isCurrent: true, }); expect(wo).toEqual(["WL103276-SBD1.pdf"]); const named = matchSegmentAttachments({ segmentText: "请查收附件 柜号:MATU2745683卡派资料.xlsx", filenames: files, isCurrent: true, }); expect(named).toContain("柜号:MATU2745683卡派资料.xlsx"); expect(named).not.toContain("3邮箱.pdf"); expect(named).not.toContain("WHSU5574991-DO.pdf"); }); it("role-only 卡转海.zip 只挂当前段,不挂历史拦截", () => { const files = ["WHSU5574991 卡转海.zip"]; const current = matchSegmentAttachments({ segmentText: "以上货物需要卡转海 麻烦贴标交付", filenames: files, isCurrent: true, }); expect(current).toEqual(["WHSU5574991 卡转海.zip"]); const hist = matchSegmentAttachments({ segmentText: "以上货物需要卡转海 麻烦贴标交付", filenames: files, isCurrent: false, }); expect(hist).toEqual([]); }); }); describe("buildCcWorkOrderFormValue uses the same rule", () => { it("mail84 current 卡转海工单 F_AttachFile 含 WL PDF", () => { const v = buildCcWorkOrderFormValue({ subject: "拆柜清单更新 WHSU5574991", body: [ "WL103944-WL103940 2", "WL99583 LAX9 2", "以上货物需要卡转海 麻烦贴标交付", ].join("\n"), filenames: MAIL84_FILES, containerNo: "WHSU5574991", isCurrent: true, }); expect(v.F_AttachFile).toContain("WL103944-WL103940.pdf"); expect(v.F_AttachFile).toContain("WL99583-LAX9.pdf"); expect(v.F_AttachFile).toContain("卡转海.zip"); }); });