import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { enableTestModeEnv, disableTestModeEnv } from "@/services/test/test-mode-env"; import { loadAllEmailFixtures } from "@/services/test/email-fixture-library"; import { evaluateEmailFixture } from "@/services/test/evaluate-email-fixture"; import type { EmailFixtureExpected } from "@/services/test/email-fixture-library"; import type { FixtureExtractActual } from "@/services/test/evaluate-email-fixture"; function assertExpected(id: string, actual: FixtureExtractActual, expected: EmailFixtureExpected) { expect(actual.pull, `${id} pull`).toBe(expected.pull !== false); if (expected.pipeline_mail_type) { expect(actual.pipeline_mail_type, `${id} pipeline_mail_type`).toBe( expected.pipeline_mail_type, ); } else { expect(actual.mail_type, `${id} mail_type`).toBe(expected.mail_type); } expect(actual.status, `${id} status`).toBe(expected.status); if (expected.last_error === "missing_columns") { expect(actual.last_error, `${id} last_error`).toMatch(/^missing_columns/); } else { expect(actual.last_error, `${id} last_error`).toBe(expected.last_error); } if (expected.container_no) { expect(actual.container_no, `${id} container_no`).toBe(expected.container_no); } if ( expected.selected_attachment && /\.(xlsx|xls|csv)$/i.test(expected.selected_attachment) ) { expect(actual.selected_attachment, `${id} selected_attachment`).toBe( expected.selected_attachment, ); } if (expected.selected_attachment === null) { expect(actual.selected_attachment, `${id} selected_attachment`).toBeNull(); } if (expected.shipment_count != null) { expect(actual.shipment_count, `${id} shipment_count`).toBe(expected.shipment_count); } if (expected.valid_shipment_count != null) { expect(actual.valid_shipment_count, `${id} valid_shipment_count`).toBe( expected.valid_shipment_count, ); } if (expected.missing_columns) { expect(actual.missing_columns, `${id} missing_columns`).toBe(true); } if (expected.shipments) { for (let i = 0; i < expected.shipments.length; i++) { const exp = expected.shipments[i]; const row = actual.shipments[i]; expect(row, `${id} shipment[${i}]`).toBeTruthy(); if (exp.F_FBACode != null) expect(row.F_FBACode, id).toBe(exp.F_FBACode); if (exp.F_Transporter != null) { expect(row.F_Transporter, id).toBe(exp.F_Transporter); } if (exp.F_CTNS != null) expect(row.F_CTNS, id).toBe(exp.F_CTNS); if (exp.row_status) expect(row.row_status, id).toBe(exp.row_status); if (exp.F_Expected_DeliveryDateB === null) { expect(row.F_Expected_DeliveryDateB ?? null, id).toBeNull(); } } } } describe("parse extract vs fixture expected.json", () => { beforeAll(() => { enableTestModeEnv(); }); afterAll(() => { disableTestModeEnv(); }); it("runs every fixture and matches expected.json", async () => { const all = await loadAllEmailFixtures(); expect(all.length).toBeGreaterThanOrEqual(15); for (const f of all) { const actual = await evaluateEmailFixture(f); assertExpected(f.id, actual, f.expected); } }); });