diff --git a/src/components/forms/department/pos/input/vehicleCustomerSuggestionsPos.vue b/src/components/forms/department/pos/input/vehicleCustomerSuggestionsPos.vue index 354511d7..679f17be 100644 --- a/src/components/forms/department/pos/input/vehicleCustomerSuggestionsPos.vue +++ b/src/components/forms/department/pos/input/vehicleCustomerSuggestionsPos.vue @@ -52,6 +52,7 @@ const customer_suggestions = ref([ const isSettingCustomer = ref(false); const isSettingCustomerToInteger = ref(0); const isSettingCustomerStartTime = ref(null); +let customerSuggestionsRequestId = 0; const isSettingCustomerTo = (customer_number) => { return isSettingCustomerToInteger.value === parseInt(customer_number); @@ -88,10 +89,17 @@ const getCustomerSuggestions = () => { if (!props.reg_1) { return; } + const requestedReg1 = props.reg_1; + const requestId = ++customerSuggestionsRequestId; + SessionUser.request("/department/vehicle/customer-suggestions", "GET", { - reg_1: props.reg_1, + reg_1: requestedReg1, }) .then((response) => { + if (requestId !== customerSuggestionsRequestId || requestedReg1 !== props.reg_1) { + return; + } + // Assuming the response contains an array of customer suggestions console.log("Customer suggestions:", response.data.data); let suggestions = []; @@ -126,6 +134,7 @@ watch( if (newValue) { getCustomerSuggestions(); } else { + customerSuggestionsRequestId += 1; customer_suggestions.value = []; } } diff --git a/tests/unit/vehicle-customer-suggestions-pos.spec.js b/tests/unit/vehicle-customer-suggestions-pos.spec.js index f4a29db5..caa7f0e2 100644 --- a/tests/unit/vehicle-customer-suggestions-pos.spec.js +++ b/tests/unit/vehicle-customer-suggestions-pos.spec.js @@ -79,6 +79,68 @@ describe("VehicleCustomerSuggestionsPos", () => { ]); }); + it("ignores stale auto-apply responses for previous plates", async () => { + const requests = []; + requestMock.mockImplementation((url, method, params) => { + let resolve; + const promise = new Promise((promiseResolve) => { + resolve = promiseResolve; + }); + requests.push({ params, resolve }); + return promise; + }); + + const wrapper = mountWithApp(VehicleCustomerSuggestionsPos, { + props: { + reg_1: "OLD123", + selectionSource: "none", + }, + }); + + await wrapper.setProps({ reg_1: "NEW456" }); + + expect(requests.map((request) => request.params.reg_1)).toEqual(["OLD123", "NEW456"]); + + requests[1].resolve({ + data: { + data: [ + { + id: 42, + customer_number: 67890, + customer_name: "Current Customer", + barred: false, + }, + ], + }, + }); + await flushPromises(); + + requests[0].resolve({ + data: { + data: [ + { + id: 41, + customer_number: 12345, + customer_name: "Stale Customer", + barred: false, + }, + ], + }, + }); + await flushPromises(); + + expect(wrapper.emitted("customerSelected")).toEqual([ + [ + { + customerNumber: 67890, + source: "auto", + }, + ], + ]); + expect(wrapper.text()).toContain("Current Customer"); + expect(wrapper.text()).not.toContain("Stale Customer"); + }); + it("keeps the only suggestion manual once another selection source is active", async () => { requestMock.mockResolvedValue({ data: {