Updated unit tests
This commit is contained in:
parent
884ab6018e
commit
7cb8ef3043
3 changed files with 322 additions and 118 deletions
|
|
@ -6,7 +6,6 @@ import { shallowMount } from "@vue/test-utils";
|
||||||
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
import { nextTick } from "vue";
|
|
||||||
import baseMixin from "../../mixins/base-mixin";
|
import baseMixin from "../../mixins/base-mixin";
|
||||||
|
|
||||||
// Mock basemixin
|
// Mock basemixin
|
||||||
|
|
@ -130,64 +129,67 @@ afterEach(() => {
|
||||||
describe("schedule.vue...", () => {
|
describe("schedule.vue...", () => {
|
||||||
describe("initial load", () => {
|
describe("initial load", () => {
|
||||||
test("should pass arePagePrerequisitesValid with a mobile order and no providerNumber", () => {
|
test("should pass arePagePrerequisitesValid with a mobile order and no providerNumber", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
||||||
store.getters.order.serviceLocation.provider = null;
|
store.getters.order.serviceLocation.provider = null;
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(arePagePrerequisitesValid).toBe(true);
|
expect(arePagePrerequisitesValid).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should pass arePagePrerequisitesValid with a inshop order and providerNumber", () => {
|
test("should pass arePagePrerequisitesValid with a inshop order and providerNumber", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(arePagePrerequisitesValid).toBe(true);
|
expect(arePagePrerequisitesValid).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should fail arePagePrerequisitesValid with a replace with no glass parts", async () => {
|
test("should fail arePagePrerequisitesValid with a replace with no glass parts", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
store.getters.order.lineItems.glassParts = [];
|
store.getters.order.lineItems.glassParts = [];
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const arePagePrerequisitesValid2 = await wrapper.vm.arePagePrerequisitesValid();
|
const arePagePrerequisitesValid2 = await wrapper.vm.arePagePrerequisitesValid();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(arePagePrerequisitesValid2).toBe(false);
|
expect(arePagePrerequisitesValid2).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should fail arePagePrerequisitesValid without isInsurance", () => {
|
test("should fail arePagePrerequisitesValid without isInsurance", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
store.getters.payment.isInsurance = null;
|
store.getters.payment.isInsurance = null;
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(arePagePrerequisitesValid).toBe(false);
|
expect(arePagePrerequisitesValid).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should return newShopTimeSlots when getAvailableDatesMethod is called", async () => {
|
test("should return newShopTimeSlots when getAvailableDatesMethod is called", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const newShopTimeSlots = await wrapper.vm.getAvailableDatesMethod(
|
const newShopTimeSlots = await wrapper.vm.getAvailableDatesMethod(
|
||||||
"2023-01-01",
|
"2023-01-01",
|
||||||
"2023-01-31"
|
"2023-01-31"
|
||||||
);
|
);
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(newShopTimeSlots).toStrictEqual({
|
expect(newShopTimeSlots).toStrictEqual({
|
||||||
days: [
|
days: [
|
||||||
{
|
{
|
||||||
|
|
@ -208,13 +210,13 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should call API service in day ranges of 34 or less when getAvailableDatesMethod is called with large date ranges", async () => {
|
test("should call API service in day ranges of 34 or less when getAvailableDatesMethod is called with large date ranges", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await wrapper.vm.getAvailableDates.call(
|
await wrapper.vm.getAvailableDates.call(
|
||||||
wrapper.vm,
|
wrapper.vm,
|
||||||
"2023-01-01",
|
"2023-01-01",
|
||||||
|
|
@ -223,7 +225,7 @@ describe("schedule.vue...", () => {
|
||||||
"123"
|
"123"
|
||||||
);
|
);
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(baseMixin.methods.dispatchStoreAction).toHaveBeenCalledTimes(3);
|
expect(baseMixin.methods.dispatchStoreAction).toHaveBeenCalledTimes(3);
|
||||||
expect(baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith(
|
expect(baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith(
|
||||||
"getShopTimeSlots",
|
"getShopTimeSlots",
|
||||||
|
|
@ -234,7 +236,7 @@ describe("schedule.vue...", () => {
|
||||||
|
|
||||||
describe("beforeRouteEnter function... ", () => {
|
describe("beforeRouteEnter function... ", () => {
|
||||||
test("should call next() and call all functions within next", async () => {
|
test("should call next() and call all functions within next", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
|
|
@ -244,7 +246,7 @@ describe("schedule.vue...", () => {
|
||||||
c(wrapper.vm);
|
c(wrapper.vm);
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await schedule.beforeRouteEnter.call(
|
await schedule.beforeRouteEnter.call(
|
||||||
wrapper.vm,
|
wrapper.vm,
|
||||||
{ query: { fmgPage: "schedule" } },
|
{ query: { fmgPage: "schedule" } },
|
||||||
|
|
@ -252,7 +254,7 @@ describe("schedule.vue...", () => {
|
||||||
nextFunction
|
nextFunction
|
||||||
);
|
);
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(nextFunction).toHaveBeenCalled();
|
expect(nextFunction).toHaveBeenCalled();
|
||||||
expect(wrapper.vm.setCmsContent).toHaveBeenCalledWith("content");
|
expect(wrapper.vm.setCmsContent).toHaveBeenCalledWith("content");
|
||||||
expect(wrapper.vm.$refs.datePicker.initializeComponent).toHaveBeenCalledWith(
|
expect(wrapper.vm.$refs.datePicker.initializeComponent).toHaveBeenCalledWith(
|
||||||
|
|
@ -279,7 +281,7 @@ describe("schedule.vue...", () => {
|
||||||
|
|
||||||
describe("computed properties...", () => {
|
describe("computed properties...", () => {
|
||||||
test("timeSlotsForSelectedDate should return timeslots if selected date is available", () => {
|
test("timeSlotsForSelectedDate should return timeslots if selected date is available", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [
|
days: [
|
||||||
|
|
@ -306,10 +308,10 @@ describe("schedule.vue...", () => {
|
||||||
selectedDate: "2022-11-11",
|
selectedDate: "2022-11-11",
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const testValue = wrapper.vm.timeSlotsForSelectedDate;
|
const testValue = wrapper.vm.timeSlotsForSelectedDate;
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(testValue).toStrictEqual(
|
expect(testValue).toStrictEqual(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
date: "2022-11-11",
|
date: "2022-11-11",
|
||||||
|
|
@ -318,7 +320,7 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("timeSlotsForSelectedDate should be null if no date has been selected", () => {
|
test("timeSlotsForSelectedDate should be null if no date has been selected", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [
|
days: [
|
||||||
|
|
@ -345,10 +347,10 @@ describe("schedule.vue...", () => {
|
||||||
selectedDate: undefined,
|
selectedDate: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const testValue = wrapper.vm.timeSlotsForSelectedDate;
|
const testValue = wrapper.vm.timeSlotsForSelectedDate;
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(testValue).toBe(null);
|
expect(testValue).toBe(null);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -356,75 +358,67 @@ describe("schedule.vue...", () => {
|
||||||
|
|
||||||
describe("schedule page methods...", () => {
|
describe("schedule page methods...", () => {
|
||||||
test("getServiceZipCtuCodeFromStore should return zipCodeCtu", () => {
|
test("getServiceZipCtuCodeFromStore should return zipCodeCtu", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const testValue = wrapper.vm.getServiceZipCtuCodeFromStore();
|
const testValue = wrapper.vm.getServiceZipCtuCodeFromStore();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(testValue).toStrictEqual("01234");
|
expect(testValue).toStrictEqual("01234");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("openInshopTimeSlotsModal should trigger openModal method", () => {
|
test("openInshopTimeSlotsModal should trigger openModal method", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
wrapper.vm.openInshopTimeSlotsModal();
|
wrapper.vm.openInshopTimeSlotsModal();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.$refs.timeSlotModalQuestion.openModal).toBeCalled();
|
expect(wrapper.vm.$refs.timeSlotModalQuestion.openModal).toBeCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("getSelectedRouteCode should return schedule routeCode", () => {
|
|
||||||
//Arrange
|
|
||||||
const { wrapper } = setupMocks({});
|
|
||||||
|
|
||||||
wrapper.vm.selectableDatesData = {
|
|
||||||
days: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
//Act
|
|
||||||
const testValue = wrapper.vm.getSelectedRouteCode();
|
|
||||||
|
|
||||||
//Assert
|
|
||||||
expect(testValue).toStrictEqual("000");
|
|
||||||
});
|
|
||||||
|
|
||||||
test("timeSlotModalClosed should null any selected date when there's no route code", () => {
|
test("timeSlotModalClosed should null any selected date when there's no route code", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapper.setData({
|
wrapper.setData({
|
||||||
selectedDate: "1980-05-05",
|
selectedDate: "1980-05-05",
|
||||||
});
|
});
|
||||||
wrapper.setData({
|
|
||||||
selectedTimeSlot: {
|
const selectedTimeSlotInfo = {
|
||||||
|
timeSlot: {
|
||||||
date: "2019-01-01",
|
date: "2019-01-01",
|
||||||
startTime: "09:00",
|
startTime: "09:00",
|
||||||
endTime: "10:00",
|
endTime: "10:00",
|
||||||
routeCode: null,
|
routeCode: null,
|
||||||
},
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.setData({
|
||||||
|
selectedTimeSlotInfo: selectedTimeSlotInfo,
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
wrapper.vm.timeSlotModalClosed();
|
wrapper.vm.timeSlotModalClosed();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.selectedDate).toBe(null);
|
expect(wrapper.vm.selectedDate).toBe(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("getDisplayTextForMilitaryTime should return the correctly formatted string", () => {
|
test("getDisplayTextForMilitaryTime should return the correctly formatted string", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
|
|
@ -432,13 +426,13 @@ describe("schedule.vue...", () => {
|
||||||
const timeInput1 = "15:00";
|
const timeInput1 = "15:00";
|
||||||
const timeInput2 = "15:30";
|
const timeInput2 = "15:30";
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
const testOutput1 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput1);
|
const testOutput1 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput1);
|
||||||
const testOutput2 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput2);
|
const testOutput2 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput2);
|
||||||
const testOutput3 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput1, true);
|
const testOutput3 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput1, true);
|
||||||
const testOutput4 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput2, true);
|
const testOutput4 = wrapper.vm.getDisplayTextForMilitaryTime(timeInput2, true);
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(testOutput1).toBe("3:00 PM");
|
expect(testOutput1).toBe("3:00 PM");
|
||||||
expect(testOutput2).toBe("3:30 PM");
|
expect(testOutput2).toBe("3:30 PM");
|
||||||
expect(testOutput3).toBe("3 PM");
|
expect(testOutput3).toBe("3 PM");
|
||||||
|
|
@ -446,7 +440,7 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("getDisplayTextForMilitaryTime should return the correctly formatted string", () => {
|
test("getDisplayTextForMilitaryTime should return the correctly formatted string", () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.selectableDatesData = {
|
wrapper.vm.selectableDatesData = {
|
||||||
days: [],
|
days: [],
|
||||||
|
|
@ -454,10 +448,10 @@ describe("schedule.vue...", () => {
|
||||||
wrapper.vm.$router.navigateWithoutSaving = jest.fn();
|
wrapper.vm.$router.navigateWithoutSaving = jest.fn();
|
||||||
wrapper.vm.$route = "testRoute";
|
wrapper.vm.$route = "testRoute";
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
wrapper.vm.backButtonAction();
|
wrapper.vm.backButtonAction();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.$router.navigateWithoutSaving).toBeCalledWith(
|
expect(wrapper.vm.$router.navigateWithoutSaving).toBeCalledWith(
|
||||||
"CLICKED_BACK",
|
"CLICKED_BACK",
|
||||||
"testRoute"
|
"testRoute"
|
||||||
|
|
@ -466,7 +460,7 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("forwardButtonAction should call route method navigateWithoutSaving", async () => {
|
test("forwardButtonAction should call route method navigateWithoutSaving", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
wrapper.vm.dispatchStoreAction = jest.fn(() => {
|
wrapper.vm.dispatchStoreAction = jest.fn(() => {
|
||||||
return {
|
return {
|
||||||
|
|
@ -477,15 +471,15 @@ describe("schedule.vue...", () => {
|
||||||
return {};
|
return {};
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await wrapper.vm.forwardButtonAction();
|
await wrapper.vm.forwardButtonAction();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalled();
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("for mobile appts, updateSupportingItems should call store action to save supporting items", async () => {
|
test("for mobile appts, updateSupportingItems should call store action to save supporting items", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
||||||
store.getters.lineItems.supportingItems = [
|
store.getters.lineItems.supportingItems = [
|
||||||
{
|
{
|
||||||
|
|
@ -514,10 +508,10 @@ describe("schedule.vue...", () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await wrapper.vm.updateSupportingItems();
|
await wrapper.vm.updateSupportingItems();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.dispatchStoreAction).toBeCalledWith(
|
expect(wrapper.vm.dispatchStoreAction).toBeCalledWith(
|
||||||
"saveSupportingItemsSuppressingStateResetting",
|
"saveSupportingItemsSuppressingStateResetting",
|
||||||
expect.arrayContaining([
|
expect.arrayContaining([
|
||||||
|
|
@ -530,7 +524,7 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("for Inshop appts, updateSupportingItems should call store action to save supporting items WITHOUT the EARLY BIRD supporting item", async () => {
|
test("for Inshop appts, updateSupportingItems should call store action to save supporting items WITHOUT the EARLY BIRD supporting item", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
store.getters.order.serviceLocation.appointmentType = "Inshop";
|
store.getters.order.serviceLocation.appointmentType = "Inshop";
|
||||||
store.getters.lineItems.supportingItems = [
|
store.getters.lineItems.supportingItems = [
|
||||||
{
|
{
|
||||||
|
|
@ -559,10 +553,10 @@ describe("schedule.vue...", () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await wrapper.vm.updateSupportingItems();
|
await wrapper.vm.updateSupportingItems();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.dispatchStoreAction).toBeCalledWith(
|
expect(wrapper.vm.dispatchStoreAction).toBeCalledWith(
|
||||||
"saveSupportingItemsSuppressingStateResetting",
|
"saveSupportingItemsSuppressingStateResetting",
|
||||||
expect.not.arrayContaining([
|
expect.not.arrayContaining([
|
||||||
|
|
@ -575,7 +569,7 @@ describe("schedule.vue...", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("if no EARLY BIRD supporting item, then updateSupportingItems should NOT call store action", async () => {
|
test("if no EARLY BIRD supporting item, then updateSupportingItems should NOT call store action", async () => {
|
||||||
//Arrange
|
// Arrange
|
||||||
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
store.getters.order.serviceLocation.appointmentType = "Mobile";
|
||||||
store.getters.lineItems.supportingItems = [];
|
store.getters.lineItems.supportingItems = [];
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
|
|
@ -595,10 +589,10 @@ describe("schedule.vue...", () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Act
|
// Act
|
||||||
await wrapper.vm.updateSupportingItems();
|
await wrapper.vm.updateSupportingItems();
|
||||||
|
|
||||||
//Assert
|
// Assert
|
||||||
expect(wrapper.vm.dispatchStoreAction).not.toBeCalled();
|
expect(wrapper.vm.dispatchStoreAction).not.toBeCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -2,30 +2,76 @@ import { shallowMount, flushPromises } from "@vue/test-utils";
|
||||||
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
||||||
import timeSlotModalQuestion from "@/layouts/schedule/time-slot-modal-question/time-slot-modal-question.vue";
|
import timeSlotModalQuestion from "@/layouts/schedule/time-slot-modal-question/time-slot-modal-question.vue";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
RouteCodeFlags,
|
RouteCodeFlags,
|
||||||
PREMIUM_TIME_SLOT_ID_FLAG,
|
PREMIUM_TIME_SLOT_ID_FLAG,
|
||||||
PREMIUM_FEE_PART_TYPE,
|
PREMIUM_FEE_PART_TYPE,
|
||||||
} from "@/constants/schedule-constants";
|
} from "@/constants/schedule-constants";
|
||||||
|
|
||||||
describe("time-slot-modal-list-button-question.vue", () => {
|
describe("time-slot-modal-question.vue", () => {
|
||||||
|
const timeSlotsForSelectedDate = {
|
||||||
|
date: "2023-09-02",
|
||||||
|
timeSlots: [
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*8 AM",
|
||||||
|
startTime: "08:00",
|
||||||
|
endTime: "09:00",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*830 AM",
|
||||||
|
startTime: "08:30",
|
||||||
|
endTime: "09:30",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*9 AM",
|
||||||
|
startTime: "09:00",
|
||||||
|
endTime: "10:00",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*930 AM",
|
||||||
|
startTime: "09:30",
|
||||||
|
endTime: "10:30",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*10 AM",
|
||||||
|
startTime: "10:00",
|
||||||
|
endTime: "11:00",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "03335-01820-S-B*20334*1030 AM",
|
||||||
|
startTime: "10:30",
|
||||||
|
endTime: "11:30",
|
||||||
|
offerPremium: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
test("When selected time slot is changed, a correctly formatted selectedTimeSlot should be emitted", async () => {
|
test("When selected time slot is changed, a correctly formatted selectedTimeSlot should be emitted", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const date = "2023-07-01";
|
const date = "2023-09-02";
|
||||||
const timeSlotId = "testRouteCodeId";
|
const routeCode = "03335-01820-S-B*20334*830 AM";
|
||||||
const startTime = "8:00 AM";
|
const startTime = "08:30";
|
||||||
const endTime = "8:30 AM";
|
const endTime = "09:30";
|
||||||
const jobMaxMinutes = 100;
|
const jobMaxMinutes = 100;
|
||||||
const jobMinMinutes = 50;
|
const jobMinMinutes = 50;
|
||||||
const expectedEmit = [
|
const expectedEmit = [
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
date: date,
|
timeSlot: {
|
||||||
routeCode: timeSlotId,
|
date: date,
|
||||||
startTime: startTime,
|
routeCode: routeCode,
|
||||||
endTime: endTime,
|
startTime: startTime,
|
||||||
jobMaxMinutes: jobMaxMinutes.toString(),
|
endTime: endTime,
|
||||||
jobMinMinutes: jobMinMinutes.toString(),
|
jobMaxMinutes: jobMaxMinutes.toString(),
|
||||||
|
jobMinMinutes: jobMinMinutes.toString(),
|
||||||
|
},
|
||||||
|
isPremiumAppointment: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
@ -35,22 +81,16 @@ describe("time-slot-modal-list-button-question.vue", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: timeSlotsForSelectedDate,
|
||||||
date: date,
|
|
||||||
timeSlots: [
|
|
||||||
{
|
|
||||||
id: timeSlotId,
|
|
||||||
startTime: startTime,
|
|
||||||
endTime: endTime,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
wrapper.vm.$refs.timeSlots.closeModal = jest.fn();
|
wrapper.vm.$refs.timeSlots.closeModal = jest.fn();
|
||||||
wrapper.vm.selectedTimeSlotId = timeSlotId;
|
|
||||||
|
await wrapper.setData({
|
||||||
|
selectedRouteCode: routeCode
|
||||||
|
})
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
wrapper.vm.setSelectedTimeSlot();
|
wrapper.vm.setSelectedTimeSlot();
|
||||||
|
|
@ -59,7 +99,8 @@ describe("time-slot-modal-list-button-question.vue", () => {
|
||||||
expect(wrapper.emitted()["update:modelValue"]).toEqual(expectedEmit);
|
expect(wrapper.emitted()["update:modelValue"]).toEqual(expectedEmit);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe("time-slot-modal-list-button-question.vue Supplemental information", () => {
|
|
||||||
|
describe("time-slot-modal-question.vue Supplemental information", () => {
|
||||||
test("The correct supplemental information should be obtained from CMS - Mobile - Not Premium ", async () => {
|
test("The correct supplemental information should be obtained from CMS - Mobile - Not Premium ", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const mobileCmsWidgetName = "MobileNotPremium";
|
const mobileCmsWidgetName = "MobileNotPremium";
|
||||||
|
|
@ -72,11 +113,13 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
||||||
mockCmsContent[mobileCmsWidgetName]["BodyText"]
|
mockCmsContent[mobileCmsWidgetName]["BodyText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("The correct supplemental information should be obtained from CMS - Mobile - Premium", async () => {
|
test("The correct supplemental information should be obtained from CMS - Mobile - Premium", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const mobileCmsWidgetName = "MobilePremium";
|
const mobileCmsWidgetName = "MobilePremium";
|
||||||
|
|
@ -89,11 +132,13 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
||||||
mockCmsContent[mobileCmsWidgetName]["BodyText"]
|
mockCmsContent[mobileCmsWidgetName]["BodyText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("No supplemental information should be obtained from CMS - Inshop", async () => {
|
test("No supplemental information should be obtained from CMS - Inshop", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const inshopWidgetName = "Inshop";
|
const inshopWidgetName = "Inshop";
|
||||||
|
|
@ -109,6 +154,7 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toBeNull();
|
expect(wrapper.vm.supplementalInformationBlock).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("No supplemental information should be obtained from CMS - Drop off, nothing selected", async () => {
|
test("No supplemental information should be obtained from CMS - Drop off, nothing selected", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const dropOffWidgetName = "Dropoff";
|
const dropOffWidgetName = "Dropoff";
|
||||||
|
|
@ -124,40 +170,72 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toBeNull();
|
expect(wrapper.vm.supplementalInformationBlock).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct supplemental information should be retrieved, Dropoff regular", async () => {
|
test("Correct supplemental information should be retrieved, Dropoff regular", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const dropOffWidgetName = "Dropoff";
|
const dropOffWidgetName = "Dropoff";
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test${ RouteCodeFlags.ALL_DAY_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
dropoffCmsWidgetName: dropOffWidgetName,
|
dropoffCmsWidgetName: dropOffWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
console.log(wrapper.vm.selectedRouteCode)
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
||||||
mockCmsContent[dropOffWidgetName]["BodyText"]
|
mockCmsContent[dropOffWidgetName]["BodyText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct supplemental information should be retrieved, Dropoff Overnight", async () => {
|
test("Correct supplemental information should be retrieved, Dropoff Overnight", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const overnightDropOffCmsWidgetName = "Overnight";
|
const overnightDropOffCmsWidgetName = "Overnight";
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test${ RouteCodeFlags.OVERNIGHT_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.OVERNIGHT_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
expect(wrapper.vm.supplementalInformationBlock).toEqual(
|
||||||
mockCmsContent[overnightDropOffCmsWidgetName]["BodyText"]
|
mockCmsContent[overnightDropOffCmsWidgetName]["BodyText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct supplemental information should be retrieved, Dropoff Sameday", async () => {
|
test("Correct supplemental information should be retrieved, Dropoff Sameday", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const sameDayDropOffCmsWidgetName = "Sameday";
|
const sameDayDropOffCmsWidgetName = "Sameday";
|
||||||
|
|
@ -167,13 +245,24 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
const endTime = "8:30 AM";
|
const endTime = "8:30 AM";
|
||||||
const jobMaxMinutes = 100;
|
const jobMaxMinutes = 100;
|
||||||
const jobMinMinutes = 50;
|
const jobMinMinutes = 50;
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test${ RouteCodeFlags.ALL_DAY_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -183,7 +272,7 @@ describe("time-slot-modal-list-button-question.vue Supplemental information", ()
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
|
|
@ -208,12 +297,24 @@ describe("time-slot-modal-list-button-question.vue Disclaimer", () => {
|
||||||
const jobMaxMinutes = 100;
|
const jobMaxMinutes = 100;
|
||||||
const jobMinMinutes = 50;
|
const jobMinMinutes = 50;
|
||||||
|
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `Test${ RouteCodeFlags.ALL_DAY_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -223,7 +324,7 @@ describe("time-slot-modal-list-button-question.vue Disclaimer", () => {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
|
|
@ -235,47 +336,88 @@ describe("time-slot-modal-list-button-question.vue Disclaimer", () => {
|
||||||
mockCmsContent[sameDayDropOffCmsWidgetName]["FooterText"]
|
mockCmsContent[sameDayDropOffCmsWidgetName]["FooterText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct disclaimer information should be retrieved, Dropoff regular", async () => {
|
test("Correct disclaimer information should be retrieved, Dropoff regular", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const dropOffWidgetName = "Dropoff";
|
const dropOffWidgetName = "Dropoff";
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `Test${ RouteCodeFlags.ALL_DAY_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
dropoffCmsWidgetName: dropOffWidgetName,
|
dropoffCmsWidgetName: dropOffWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.disclaimerTextBlockCopy).toEqual(
|
expect(wrapper.vm.disclaimerTextBlockCopy).toEqual(
|
||||||
mockCmsContent[dropOffWidgetName]["FooterText"]
|
mockCmsContent[dropOffWidgetName]["FooterText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct disclaimer information should be retrieved, Dropoff overnight", async () => {
|
test("Correct disclaimer information should be retrieved, Dropoff overnight", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const overnightDropOffCmsWidgetName = "Overnight";
|
const overnightDropOffCmsWidgetName = "Overnight";
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `Test${ RouteCodeFlags.OVERNIGHT_DROP_OFF }`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.OVERNIGHT_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.disclaimerTextBlockCopy).toEqual(
|
expect(wrapper.vm.disclaimerTextBlockCopy).toEqual(
|
||||||
mockCmsContent[overnightDropOffCmsWidgetName]["FooterText"]
|
mockCmsContent[overnightDropOffCmsWidgetName]["FooterText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("No disclaimer information should be retrieved, non-dropoff", async () => {
|
test("No disclaimer information should be retrieved, non-dropoff", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const inshopWidgetName = "Inshop";
|
const inshopWidgetName = "Inshop";
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "test" },
|
modelValue: modelValue,
|
||||||
appointmentType: "Inshop",
|
appointmentType: "Inshop",
|
||||||
cmsWidgetName: inshopWidgetName,
|
cmsWidgetName: inshopWidgetName,
|
||||||
},
|
},
|
||||||
|
|
@ -286,7 +428,7 @@ describe("time-slot-modal-list-button-question.vue Disclaimer", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("time-slot-modal-list-button-question.vue Duration", () => {
|
describe("time-slot-modal-question.vue Duration", () => {
|
||||||
test("The correct duration information should be displayed - Dropoff - Sameday ", async () => {
|
test("The correct duration information should be displayed - Dropoff - Sameday ", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const sameDayDropOffCmsWidgetName = "Sameday";
|
const sameDayDropOffCmsWidgetName = "Sameday";
|
||||||
|
|
@ -297,12 +439,24 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
const jobMaxMinutes = 100;
|
const jobMaxMinutes = 100;
|
||||||
const jobMinMinutes = 50;
|
const jobMinMinutes = 50;
|
||||||
|
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test` + RouteCodeFlags.ALL_DAY_DROP_OFF,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -312,7 +466,7 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
sameDayDropOffCmsWidgetName: sameDayDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
|
|
@ -324,30 +478,59 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
mockCmsContent[sameDayDropOffCmsWidgetName]["SubheaderText"]
|
mockCmsContent[sameDayDropOffCmsWidgetName]["SubheaderText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct duration information should be retrieved, Dropoff overnight", async () => {
|
test("Correct duration information should be retrieved, Dropoff overnight", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const overnightDropOffCmsWidgetName = "Overnight";
|
const overnightDropOffCmsWidgetName = "Overnight";
|
||||||
|
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test` + RouteCodeFlags.OVERNIGHT_DROP_OFF,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.OVERNIGHT_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
overnightDropOffCmsWidgetName: overnightDropOffCmsWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.durationTextBlockCopy).toEqual(
|
expect(wrapper.vm.durationTextBlockCopy).toEqual(
|
||||||
mockCmsContent[overnightDropOffCmsWidgetName]["SubheaderText"]
|
mockCmsContent[overnightDropOffCmsWidgetName]["SubheaderText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct duration information should be retrieved, Dropoff", async () => {
|
test("Correct duration information should be retrieved, Dropoff", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const dropoffCmsWidgetName = "Dropoff";
|
const dropoffCmsWidgetName = "Dropoff";
|
||||||
|
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test` + RouteCodeFlags.ALL_DAY_DROP_OFF,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
jobMaxMinutes: null,
|
||||||
|
jobMinMinutes: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
modelValue: { routeCode: "Test" + RouteCodeFlags.ALL_DAY_DROP_OFF },
|
modelValue: modelValue,
|
||||||
appointmentType: "Dropoff",
|
appointmentType: "Dropoff",
|
||||||
dropoffCmsWidgetName: dropoffCmsWidgetName,
|
dropoffCmsWidgetName: dropoffCmsWidgetName,
|
||||||
},
|
},
|
||||||
|
|
@ -358,25 +541,39 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
mockCmsContent[dropoffCmsWidgetName]["SubheaderText"]
|
mockCmsContent[dropoffCmsWidgetName]["SubheaderText"]
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct duration information should be retrieved, Inshop - convert to hours", async () => {
|
test("Correct duration information should be retrieved, Inshop - convert to hours", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const cmsWidgetName = "Inshop";
|
const cmsWidgetName = "Inshop";
|
||||||
|
|
||||||
|
const modelValue = {
|
||||||
|
timeSlot: {
|
||||||
|
routeCode: `test`,
|
||||||
|
date: null,
|
||||||
|
startTime: null,
|
||||||
|
endTime: null,
|
||||||
|
},
|
||||||
|
isPremiumAppointment: null,
|
||||||
|
}
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
customMountOptions: {
|
customMountOptions: {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: 180,
|
estimatedServiceMinutesMaximum: 180,
|
||||||
estimatedServiceMinutesMinimum: 120,
|
estimatedServiceMinutesMinimum: 120,
|
||||||
modelValue: { routeCode: "Test" },
|
modelValue: modelValue,
|
||||||
appointmentType: "Inshop",
|
appointmentType: "Inshop",
|
||||||
cmsWidgetName: cmsWidgetName,
|
cmsWidgetName: cmsWidgetName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
expect(wrapper.vm.durationTextBlockCopy).toEqual(
|
expect(wrapper.vm.durationTextBlockCopy).toEqual(
|
||||||
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 2 - 3 hours"
|
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 2 - 3 hours"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct duration information should be retrieved, Inshop - convert to minutes", async () => {
|
test("Correct duration information should be retrieved, Inshop - convert to minutes", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const cmsWidgetName = "Inshop";
|
const cmsWidgetName = "Inshop";
|
||||||
|
|
@ -396,6 +593,7 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 60 - 90 minutes"
|
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 60 - 90 minutes"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Correct duration information should be retrieved, Inshop - min = maximum time", async () => {
|
test("Correct duration information should be retrieved, Inshop - min = maximum time", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const cmsWidgetName = "Inshop";
|
const cmsWidgetName = "Inshop";
|
||||||
|
|
@ -415,6 +613,7 @@ describe("time-slot-modal-list-button-question.vue Duration", () => {
|
||||||
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 4 hours"
|
mockCmsContent[cmsWidgetName]["SubheaderText"] + " 4 hours"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("No duration information should be displayed, Mobile", async () => {
|
test("No duration information should be displayed, Mobile", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const mobileCmsWidgetName = "Mobile";
|
const mobileCmsWidgetName = "Mobile";
|
||||||
|
|
@ -450,7 +649,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -473,6 +672,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
};
|
};
|
||||||
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Available Timeslots should be formatted correctly - Dropoff - Overnight ", async () => {
|
test("Available Timeslots should be formatted correctly - Dropoff - Overnight ", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const overnightDropOffCmsWidgetName = "Overnight";
|
const overnightDropOffCmsWidgetName = "Overnight";
|
||||||
|
|
@ -488,7 +688,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -511,6 +711,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
};
|
};
|
||||||
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Available Timeslots should be formatted correctly - Dropoff", async () => {
|
test("Available Timeslots should be formatted correctly - Dropoff", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const dropoffCmsWidgetName = "Dropoff";
|
const dropoffCmsWidgetName = "Dropoff";
|
||||||
|
|
@ -526,7 +727,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -549,6 +750,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
};
|
};
|
||||||
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Available Timeslots should be formatted correctly - Mobile not premium", async () => {
|
test("Available Timeslots should be formatted correctly - Mobile not premium", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const mobileCmsWidgetName = "MobileNotPremium";
|
const mobileCmsWidgetName = "MobileNotPremium";
|
||||||
|
|
@ -564,7 +766,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -587,6 +789,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
};
|
};
|
||||||
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Available Timeslots should be formatted correctly - Mobile with premium", async () => {
|
test("Available Timeslots should be formatted correctly - Mobile with premium", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const mobilePremiumCmsWidgetName = "MobilePremium";
|
const mobilePremiumCmsWidgetName = "MobilePremium";
|
||||||
|
|
@ -605,7 +808,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
premiumAppointmentFee: {
|
premiumAppointmentFee: {
|
||||||
partType: PREMIUM_FEE_PART_TYPE,
|
partType: PREMIUM_FEE_PART_TYPE,
|
||||||
},
|
},
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -631,8 +834,10 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
buttonLabelSubCopy: "+$15.99",
|
buttonLabelSubCopy: "+$15.99",
|
||||||
value: timeSlotId + PREMIUM_TIME_SLOT_ID_FLAG,
|
value: timeSlotId + PREMIUM_TIME_SLOT_ID_FLAG,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
expect(wrapper.vm.availableTimeSlots[0]).toEqual(expectedTimeSlotObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Available Timeslots should be formatted correctly - Inshop", async () => {
|
test("Available Timeslots should be formatted correctly - Inshop", async () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
const cmsWidgetName = "Inshop";
|
const cmsWidgetName = "Inshop";
|
||||||
|
|
@ -648,7 +853,7 @@ describe("time-slot-modal-list-button-question.vue Available Timeslots", () => {
|
||||||
propsData: {
|
propsData: {
|
||||||
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
estimatedServiceMinutesMaximum: jobMaxMinutes,
|
||||||
estimatedServiceMinutesMinimum: jobMinMinutes,
|
estimatedServiceMinutesMinimum: jobMinMinutes,
|
||||||
dateAndTimeSlotData: {
|
timeSlotsForSelectedDate: {
|
||||||
date: date,
|
date: date,
|
||||||
timeSlots: [
|
timeSlots: [
|
||||||
{
|
{
|
||||||
|
|
@ -678,7 +883,7 @@ const mockCmsContent = {
|
||||||
HeaderText: "Mobile, not premium HeaderText",
|
HeaderText: "Mobile, not premium HeaderText",
|
||||||
},
|
},
|
||||||
MobilePremium: {
|
MobilePremium: {
|
||||||
"BodyText:": "Mobile, with premium BodyText",
|
BodyText: "Mobile, with premium BodyText",
|
||||||
FooterText: "Mobile, with premium FooterText",
|
FooterText: "Mobile, with premium FooterText",
|
||||||
SubheaderText: "Mobile, with premium SubheaderText",
|
SubheaderText: "Mobile, with premium SubheaderText",
|
||||||
HeaderText: "Mobile, with premium HeaderText",
|
HeaderText: "Mobile, with premium HeaderText",
|
||||||
|
|
|
||||||
|
|
@ -157,10 +157,12 @@ export default {
|
||||||
return this.$refs[this.modalName];
|
return this.$refs[this.modalName];
|
||||||
},
|
},
|
||||||
supplementalInformationBlock() {
|
supplementalInformationBlock() {
|
||||||
|
console.log(this.selectedRouteCode)
|
||||||
let appointmentTypeCmsWidgetName;
|
let appointmentTypeCmsWidgetName;
|
||||||
if (this.appointmentType === AppointmentTypeStrings.IN_SHOP) {
|
if (this.appointmentType === AppointmentTypeStrings.IN_SHOP) {
|
||||||
return null;
|
return null;
|
||||||
} else if (this.appointmentType === AppointmentTypeStrings.MOBILE) {
|
} else if (this.appointmentType === AppointmentTypeStrings.MOBILE) {
|
||||||
|
|
||||||
appointmentTypeCmsWidgetName = this.selectedRouteCode?.includes(
|
appointmentTypeCmsWidgetName = this.selectedRouteCode?.includes(
|
||||||
PREMIUM_TIME_SLOT_ID_FLAG
|
PREMIUM_TIME_SLOT_ID_FLAG
|
||||||
)
|
)
|
||||||
|
|
@ -177,6 +179,7 @@ export default {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.getCmsContent(
|
return this.getCmsContent(
|
||||||
appointmentTypeCmsWidgetName,
|
appointmentTypeCmsWidgetName,
|
||||||
cmsWidgetFieldMappings.SUPPLEMENTAL_INFORMATION
|
cmsWidgetFieldMappings.SUPPLEMENTAL_INFORMATION
|
||||||
|
|
@ -433,7 +436,9 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.modelValue?.isPremiumAppointment) {
|
if (this.modelValue?.isPremiumAppointment) {
|
||||||
selectedRouteCode = this.addPremiumFlagToInput(this.modelValue?.timeSlot?.routeCode);
|
selectedRouteCode = this.addPremiumFlagToInput(
|
||||||
|
this.modelValue?.timeSlot?.routeCode
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
selectedRouteCode = this.modelValue?.timeSlot?.routeCode;
|
selectedRouteCode = this.modelValue?.timeSlot?.routeCode;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue