CASH-2916 | Update unit tests
This commit is contained in:
parent
8e44d75a54
commit
8384d9a237
2 changed files with 131 additions and 0 deletions
|
|
@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue