Merge pull request #97 from copenhagentruckwash/fix-auto-selection-of-customer-suggestions

Fix stale POS customer suggestion auto-selection
This commit is contained in:
Jeppe B
2026-06-02 00:13:59 +02:00
committed by GitHub
2 changed files with 72 additions and 1 deletions
@@ -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 = [];
}
}
@@ -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: {