DigitalConsumer.FixMyGlass/src/layouts/confirmation/confirmation.spec.js
CarlNation 3ad2e4ed28 CSR-2303 tests for itac and nocomp
CSR-2303 tests for itac and nocomp
2024-11-05 08:09:33 -05:00

718 lines
21 KiB
JavaScript

// Components
import confirmation from "@/layouts/confirmation/confirmation.vue";
import { AppointmentTypeStrings, RouteCodeFlags } from "@/constants/schedule-constants";
import { applicationConfig } from "@/constants/application-config.js";
// Supporting Files
import { shallowMount } from "@vue/test-utils";
import { nextTick } from "vue";
import { getMountOptions } from "@/helpers/unit-test-helper.js";
import store from "@/store";
import router from "@/router";
import experimentMixin from "@/mixins/experiment-mixin.js";
import { experimentSettings } from "@/constants/experiments";
const mockExperimentSettings = experimentSettings;
// Mock our module for promises.
jest.mock("@/helpers/layout-helper.js", () => ({
settleAllPromises: jest.fn(),
}));
var wordingText = "wording Text {custom:ADDRESS}";
beforeEach(() => {
jest.restoreAllMocks();
jest.clearAllMocks();
store.getters = {
order: {
schedule: {
date: "2023-01-01",
startTime: "09:00",
endTime: "10:00",
routeCode: "000",
},
lineItems: {
glassParts: [
{
partNumber: "ABC123",
},
],
supportingItems: [],
},
serviceLocation: {
appointmentType: AppointmentTypeStrings.IN_SHOP,
address: "test",
address2: "123",
city: "test",
state: "AZ",
appointmentType: "Inshop",
zipCode: "12345",
zipCodeCtu: "01234",
provider: {
providerNumber: "123",
address: {
streetAddress: "test1",
city: "test",
state: "AZ",
zipCode: "12345",
zipCodeCtu: "01234",
},
},
},
damage: {
isRepair: false,
},
referralNumber: "1234567",
vehicle: {
year: "2004",
make: "Ford",
model: "F Series F250",
},
customer: {
emailAddress: "test@test.com",
},
policy: {
isNoComp: false,
}
},
damage: {},
payment: {
isInsurance: true,
},
lineItems: {
glassParts: [],
supportingItems: [],
},
};
});
afterEach(() => {
store.getters = {};
jest.restoreAllMocks();
jest.clearAllMocks();
});
describe("confirmation.vue", () => {
const realLocation = window.location;
beforeAll(() => {
delete window.location;
window.location = { ...realLocation, assign: jest.fn() };
});
afterAll(() => {
window.location = realLocation;
});
test("arePagePrerequisitesValid should be true ", async () => {
//Arrange
const { wrapper } = setupMocks({});
//Act
let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid();
await nextTick();
//Assert
expect(arePagePrerequisitesValid).toBe(true);
});
test("'Back to safelite.com' button should take user back to safelite.com", async () => {
//Arrange
const { wrapper } = setupMocks({});
//Act
await wrapper.vm.forwardButtonAction();
//Assert
expect(window.location.assign).toHaveBeenCalled();
});
});
describe("computed properties...", () => {
test("ScheduleDateFormatted should return date in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
startTime: "09:00",
endTime: "11:00",
date: "2023-01-01",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ScheduleDateFormatted;
// Assert
expect(testValue).toEqual("Sunday, January 1");
});
test("ScheduleTimeFormatted should return mobile time in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
startTime: "09:00",
endTime: "11:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.ScheduleTimeFormatted;
// Assert
expect(testValue).toEqual("Between 9 AM - 11 AM");
});
test("ScheduleTimeFormatted should return DROP_OFF time in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
startTime: "09:00",
endTime: "11:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.DROP_OFF;
// Act
const testValue = wrapper.vm.ScheduleTimeFormatted;
// Assert
expect(testValue).toEqual("Drop off before 9:30 AM");
});
test("ScheduleTimeFormatted should return Inshop time in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
startTime: "09:00",
endTime: "11:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.IN_SHOP;
// Act
const testValue = wrapper.vm.ScheduleTimeFormatted;
// Assert
expect(testValue).toEqual("at 9:00 AM");
});
test("AppointmentWordingText should return mobile text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.AppointmentWordingText;
// Assert
expect(testValue).toEqual("wording Text test, 123,<br/> test, AZ 12345");
});
test("AppointmentWordingText should return DROP_OFF text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.DROP_OFF;
// Act
const testValue = wrapper.vm.AppointmentWordingText;
// Assert
expect(testValue).toEqual("wording Text test1,<br/> test, AZ 12345");
});
test("AppointmentWordingText should return IN_SHOP text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.AppointmentWordingText;
// Assert
expect(testValue).toEqual("wording Text test1,<br/> test, AZ 12345");
});
test("ConfirmationEmailText should return text in expected format.", () => {
//Arrange
wordingText = "{custom:MY_ACCOUNT_URL}";
const { wrapper } = setupMocks({});
// Act
const testValue = wrapper.vm.ConfirmationEmailText;
// Assert
expect(testValue).toEqual(applicationConfig.MY_ACCOUNT);
});
test("ScheduleDate should return date in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2023-01-01",
endTime: "10:00",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ScheduleDate;
// Assert
expect(testValue).toEqual("2023-01-01");
});
test("ScheduleStartTime should return time in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
startTime: "09:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ScheduleStartTime;
// Assert
expect(testValue).toEqual("09:00");
});
test("ScheduleEndTime should return time in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ScheduleEndTime;
// Assert
expect(testValue).toEqual("10:00");
});
test("InShopWordingText should return text in expected format.", () => {
//Arrange
wordingText = "InShopWordingText format";
const { wrapper } = setupMocks({});
// Act
const testValue = wrapper.vm.InShopWordingText;
// Assert
expect(testValue).toEqual(wordingText);
});
test("MobileWordingText should return text in expected format.", () => {
//Arrange
wordingText = "MobileWordingText format";
const { wrapper } = setupMocks({});
// Act
const testValue = wrapper.vm.MobileWordingText;
// Assert
expect(testValue).toEqual(wordingText);
});
test("DropOffWordingText should return text in expected format.", () => {
//Arrange
wordingText = "DropOffWordingText format";
const { wrapper } = setupMocks({});
// Act
const testValue = wrapper.vm.DropOffWordingText;
// Assert
expect(testValue).toEqual(wordingText);
});
test("ServiceLocationFullAddress should return text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ServiceLocationFullAddress;
// Assert
expect(testValue).toEqual("test, 123,<br/> test, AZ 12345");
});
test("ProviderFullAddress should return text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
serviceLocation: store.getters.order.serviceLocation,
};
// Act
const testValue = wrapper.vm.ProviderFullAddress;
// Assert
expect(testValue).toEqual("test1,<br/> test, AZ 12345");
});
test("Appointment Duration should return text in expected format.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
};
// Act
const testValue = wrapper.vm.AppointmentDuration;
// Assert
expect(testValue).toEqual("Duration: 1 - 2 hours");
});
test("Appointment Duration should return with correct duration values in expected format for hours.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
};
// Act
const testValue = wrapper.vm.AppointmentDuration;
// Assert
expect(testValue).toEqual("Duration: 1 - 2 hours");
});
test("Appointment Duration should return with correct duration values in expected format for minutes.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 45,
jobMinMinutes: 30,
routeCode: "",
},
};
// Act
const testValue = wrapper.vm.AppointmentDuration;
// Assert
expect(testValue).toEqual("Duration: 30 - 45 minutes");
});
test("Appointment Duration should return with All Day.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 45,
jobMinMinutes: 30,
routeCode: RouteCodeFlags.ALL_DAY_DROP_OFF,
},
};
// Act
const testValue = wrapper.vm.AppointmentDuration;
// Assert
expect(testValue).toEqual("Duration: All Day");
});
test("Appointment Duration should return with Overnight.", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
date: "2024-09-28",
jobMaxMinutes: 45,
jobMinMinutes: 30,
routeCode: RouteCodeFlags.OVERNIGHT_DROP_OFF,
},
};
// Act
const testValue = wrapper.vm.AppointmentDuration;
// Assert
expect(testValue).toEqual("Duration: Overnight");
});
test("NoComp should return false for shouldHideRecalibration", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isNoComp: true,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
test("Itac should return false for shouldHideRecalibration", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: true,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
test("Not Itac/NoComp with Recal should return true for shouldHideRecalibration", async () => {
//Arrange
const { wrapper } = setupMocks({});
const lineItems = {
glassParts: [{
partType: "RECALIBRATION",
}]
};
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: false,
isNoComp: false,
},
lineItems: {
glassParts: {
partType: "Recalibration",
}
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.setData({ lineItems: lineItems });
await wrapper.vm.$nextTick();
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(true);
});
test ("Itac/NoComp with Recal should return false for shouldHideRecalibration", async () => {
//Arrange
const { wrapper } = setupMocks({});
const lineItems = {
glassParts: [{
partType: "RECALIBRATION",
}]
};
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: true,
isNoComp: false,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.setData({ lineItems: lineItems });
await wrapper.vm.$nextTick();
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
});
function setupMocks({ customMountOptions }) {
const mountOptions = getMountOptions({
...customMountOptions,
});
mountOptions.mixins = [
{
methods: {
getCmsContent: jest.fn().mockImplementation(() => {
return wordingText;
}),
getSettingValue: jest.fn((settingName) => {
if (settingName === experimentSettings.RECAL_PRICE_REMOVE) {
return "true";
}
return "false";
}),
},
},
];
const wrapper = shallowMount(confirmation, mountOptions);
return { wrapper };
}