Files
pleno-vue/tests/unit/pos-mobile-add-customer-autofill.spec.js
T
Jeppe BandJeppe Bundgaard aa5e0a5507 Add EAN to customer registration flows (#147)
* Add EAN to economic customer registration

* Focus EAN PR Playwright mapping

---------

Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk>
2026-07-06 18:12:05 +02:00

170 lines
5.2 KiB
JavaScript

import { describe, expect, it } from "vitest";
import {
applyPosAddCustomerSearchResult,
createPosAddCustomerFields,
createPosAddCustomerManualOverrides,
createPosAddCustomerRequestState,
nextPosAddCustomerRequestState,
resolvePosAddCustomerRequestState,
setPosAddCustomerManualOverride,
} from "@/components/displays/department/pos/steps/mobile/elements/posAddCustomerAutofill.js";
function createSearchResult(overrides = {}) {
return {
vat: 41004355,
name: "Truckwash ApS",
phone: "21754690",
email: "mikkel@truckwash.dk",
...overrides,
};
}
describe("POS mobile add-customer autofill", () => {
it("fills all eligible fields on the initial successful lookup", () => {
const nextFields = applyPosAddCustomerSearchResult({
fields: createPosAddCustomerFields(),
manualOverrides: createPosAddCustomerManualOverrides(),
searchResult: createSearchResult(),
notFoundLabel: "Not found",
});
expect(nextFields).toEqual({
cvr: "41004355",
companyPhone: "21754690",
invoiceEmail: "mikkel@truckwash.dk",
contactEmail: "mikkel@truckwash.dk",
contactPhone: "21754690",
ean: "",
});
});
it("updates only untouched fields when a later lookup resolves", () => {
const initialFields = applyPosAddCustomerSearchResult({
fields: createPosAddCustomerFields(),
manualOverrides: createPosAddCustomerManualOverrides(),
searchResult: createSearchResult(),
notFoundLabel: "Not found",
});
const nextFields = applyPosAddCustomerSearchResult({
fields: {
...initialFields,
companyPhone: "55550000",
},
manualOverrides: createPosAddCustomerManualOverrides({
companyPhone: true,
}),
searchResult: createSearchResult({
vat: 43423010,
name: "Wash Group ApS",
phone: "42331128",
email: "billing@wash-group.test",
}),
notFoundLabel: "Not found",
});
expect(nextFields).toEqual({
cvr: "43423010",
companyPhone: "55550000",
invoiceEmail: "billing@wash-group.test",
contactEmail: "billing@wash-group.test",
contactPhone: "42331128",
ean: "",
});
});
it("preserves manually edited fields across later autofill passes", () => {
const manualOverrides = createPosAddCustomerManualOverrides({
companyPhone: true,
contactEmail: true,
ean: true,
});
const nextFields = applyPosAddCustomerSearchResult({
fields: createPosAddCustomerFields({
cvr: "41004355",
companyPhone: "99998888",
invoiceEmail: "old-invoice@example.com",
contactEmail: "dispatch@example.com",
contactPhone: "21754690",
ean: "5790001234567",
}),
manualOverrides,
searchResult: createSearchResult({
vat: 43423010,
phone: "42331128",
email: "billing@wash-group.test",
}),
notFoundLabel: "Not found",
});
expect(nextFields.companyPhone).toBe("99998888");
expect(nextFields.contactEmail).toBe("dispatch@example.com");
expect(nextFields.invoiceEmail).toBe("billing@wash-group.test");
expect(nextFields.contactPhone).toBe("42331128");
expect(nextFields.cvr).toBe("43423010");
expect(nextFields.ean).toBe("5790001234567");
});
it("preserves manually entered EAN across later autofill passes", () => {
const nextFields = applyPosAddCustomerSearchResult({
fields: createPosAddCustomerFields({
ean: "5790001234567",
}),
manualOverrides: createPosAddCustomerManualOverrides({
ean: true,
}),
searchResult: createSearchResult({
ean: "5790007654321",
}),
notFoundLabel: "Not found",
});
expect(nextFields.ean).toBe("5790001234567");
});
it("refills a field after the operator clears a manual override", () => {
const withManualEdit = setPosAddCustomerManualOverride(
createPosAddCustomerManualOverrides({
companyPhone: true,
}),
"companyPhone",
""
);
expect(withManualEdit.companyPhone).toBe(false);
const nextFields = applyPosAddCustomerSearchResult({
fields: createPosAddCustomerFields({
companyPhone: "",
}),
manualOverrides: withManualEdit,
searchResult: createSearchResult({
phone: "42331128",
}),
notFoundLabel: "Not found",
});
expect(nextFields.companyPhone).toBe("42331128");
});
it("rejects slower stale responses after a newer lookup wins", () => {
const initialState = createPosAddCustomerRequestState();
const firstRequest = nextPosAddCustomerRequestState(initialState);
const secondRequest = nextPosAddCustomerRequestState(firstRequest.state);
const staleResolution = resolvePosAddCustomerRequestState(secondRequest.state, firstRequest.requestId);
const latestResolution = resolvePosAddCustomerRequestState(secondRequest.state, secondRequest.requestId);
expect(staleResolution.shouldApply).toBe(false);
expect(staleResolution.state).toEqual(secondRequest.state);
expect(latestResolution.shouldApply).toBe(true);
expect(latestResolution.state).toEqual({
latestRequestedId: secondRequest.requestId,
latestAppliedId: secondRequest.requestId,
});
});
});