CASH-2916 | Update unit tests

This commit is contained in:
scottkiener-at-safelite 2026-07-07 13:10:06 -04:00
parent 8e44d75a54
commit 8384d9a237
2 changed files with 131 additions and 0 deletions

View file

@ -2,6 +2,7 @@ import { shallowMount } from "@vue/test-utils";
import scheduling from "./scheduling";
import { getMountOptions } from "@/helpers/unit-test-helper.js";
import { settleAllPromises } from "@/helpers/layout-helper";
import store from "@/store";
jest.mock("@/store", () => ({
dispatch: jest.fn().mockResolvedValue(null),
@ -107,5 +108,69 @@ describe("scheduling.vue", () => {
await expect(wrapper.vm.handleRequestMoreDates()).resolves.toBeUndefined();
wrapper.unmount();
});
test("batches inshop provider requests into a single getShopTimeSlotsV2 call", async () => {
store.dispatch.mockClear();
settleAllPromises.mockResolvedValueOnce({
inshopTimeSlots: {
providerTimeSlots: [
{ providerNumber: "05018", days: [{ date: "2026-07-22", timeSlots: [] }] },
{ providerNumber: "05019", days: [{ date: "2026-07-22", timeSlots: [] }] },
],
},
});
const { wrapper } = setupMocks();
wrapper.vm.inShopProvidersAndTimeslots = [
{ provider: { providerNumber: "05018" }, timeSlots: { days: [] } },
{ provider: { providerNumber: "05019" }, timeSlots: { days: [] } },
];
wrapper.vm.datePickerEndDate = "2026-07-21";
await wrapper.vm.handleRequestMoreDates();
const shopTimeSlotDispatches = store.dispatch.mock.calls.filter(
([actionName]) => actionName === "getShopTimeSlotsV2"
);
expect(shopTimeSlotDispatches).toHaveLength(1);
expect(shopTimeSlotDispatches[0][1].payload.providerNumbers).toEqual(["05018", "05019"]);
expect(shopTimeSlotDispatches[0][1].payload.endDate).toBeDefined();
wrapper.unmount();
});
test("maps batched inshop providerTimeSlots back onto provider entries", async () => {
settleAllPromises.mockResolvedValueOnce({
inshopTimeSlots: {
providerTimeSlots: [
{
providerNumber: "05018",
days: [{ date: "2026-07-22", timeSlots: [{ id: "slot-a" }] }],
},
{
providerNumber: "05019",
days: [{ date: "2026-07-22", timeSlots: [{ id: "slot-b" }] }],
},
],
},
});
const { wrapper } = setupMocks();
wrapper.vm.inShopProvidersAndTimeslots = [
{ provider: { providerNumber: "05018" }, timeSlots: { days: [] } },
{ provider: { providerNumber: "05019" }, timeSlots: { days: [] } },
];
wrapper.vm.datePickerEndDate = "2026-07-21";
await wrapper.vm.handleRequestMoreDates();
expect(wrapper.vm.inShopProvidersAndTimeslots[0].timeSlots.days).toHaveLength(1);
expect(wrapper.vm.inShopProvidersAndTimeslots[0].timeSlots.days[0].timeSlots[0].id).toBe(
"slot-a"
);
expect(wrapper.vm.inShopProvidersAndTimeslots[1].timeSlots.days[0].timeSlots[0].id).toBe(
"slot-b"
);
wrapper.unmount();
});
});
});

View file

@ -3,6 +3,7 @@ import store from "@/store";
import { mutations, state, actions, getters } from "@/store";
import { storeMutations } from "@/constants/store-mutations";
import { storeActions } from "@/constants/store-actions";
import { endpoints } from "@/constants/endpoints.js";
import { sessionStorageKeyConstants } from "@/constants/session-storage";
import { experimentTriggers } from "@/constants/experiments";
import { routeData } from "@/router/constants/routes";
@ -3631,6 +3632,71 @@ describe("Actions", () => {
);
});
});
describe("v2 time slot actions", () => {
const buildTimeSlotContext = () => ({
state,
getters: {
payment: { billToAccountNumber: "87291" },
},
});
it("getShopTimeSlotsV2 calls v2 shop endpoint with providerNumbers and endDate", async () => {
const context = buildTimeSlotContext();
globalMethods.callHttpClient.mockResolvedValue({ data: { providerTimeSlots: [] } });
await actions.getShopTimeSlotsV2(context, {
payload: {
startDate: "2026-07-07",
endDate: "2026-07-21",
shopAppointmentType: "InshopOrDropoff",
providerNumbers: ["05018", "05019"],
},
pageNameToLog: "scheduling",
});
expect(globalMethods.callHttpClient).toHaveBeenCalledWith(
expect.objectContaining({
method: endpoints.GetShopTimeSlotsV2.method,
endpoint: endpoints.GetShopTimeSlotsV2.url,
payload: expect.objectContaining({
startDate: "2026-07-07",
endDate: "2026-07-21",
providerNumbers: ["05018", "05019"],
shopAppointmentType: "InshopOrDropoff",
}),
})
);
});
it("getMobileTimeSlotsV2 calls v2 mobile endpoint with endDate", async () => {
const context = buildTimeSlotContext();
globalMethods.callHttpClient.mockResolvedValue({ data: { days: [] } });
await actions.getMobileTimeSlotsV2(context, {
payload: {
startDate: "2026-07-07",
endDate: "2026-07-21",
zipCode: "43235",
},
pageNameToLog: "scheduling",
});
expect(globalMethods.callHttpClient).toHaveBeenCalledWith(
expect.objectContaining({
method: endpoints.GetMobileTimeSlotsV2.method,
endpoint: endpoints.GetMobileTimeSlotsV2.url,
payload: expect.objectContaining({
startDate: "2026-07-07",
endDate: "2026-07-21",
zipCode: "43235",
}),
})
);
});
});
});
describe("submittedStateRevision", () => {