You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.2 KiB
83 lines
3.2 KiB
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);
|
|
}
|
|
});
|
|
});
|