541 lines
17 KiB
JavaScript
541 lines
17 KiB
JavaScript
// Components
|
|
import addressLookup from '@/layouts/address-lookup/address-lookup.vue';
|
|
|
|
// Supporting Files
|
|
import baseMixin from '@/mixins/base-mixin';
|
|
import settleAllPromises from '@/helpers/layout-helper.js';
|
|
import { shallowMount } from '@vue/test-utils';
|
|
import { getMountOptions } from '@/helpers/unit-test-helper.js';
|
|
import { useMainStore } from '@/store';
|
|
import navigationScenarios from '@/router/router-constants/navigation-scenarios';
|
|
|
|
jest.mock('@/helpers/damage-helper', () => ({
|
|
isGlassAvailableForCarId: jest.fn().mockImplementation(() => true),
|
|
getDamageString: jest.fn()
|
|
}));
|
|
|
|
// Mock our module for promises.
|
|
jest.mock('@/helpers/layout-helper.js', () => jest.fn());
|
|
|
|
/** @ignore */
|
|
function setupMocks({
|
|
lookupVinbyAddressResponse,
|
|
partsOrQuestions = [],
|
|
isStatePermissible = true,
|
|
vinVehicles = [],
|
|
carId = 'C0000',
|
|
route = null
|
|
}) {
|
|
useMainStore().lookupVinByAddress = jest.fn().mockImplementation(() => Promise.resolve({
|
|
data: lookupVinbyAddressResponse || {
|
|
isStatePermissible: true,
|
|
vinVehicles: [
|
|
{
|
|
vin: 'TEST_VIN',
|
|
vehicle: {
|
|
carId: 'CARID'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}));
|
|
|
|
useMainStore().getPartsOrQuestions = jest.fn().mockImplementation(() => Promise.resolve({
|
|
data: {
|
|
partsOrQuestions
|
|
}
|
|
}));
|
|
|
|
const wrapper = shallowMount(
|
|
addressLookup,
|
|
getMountOptions({
|
|
route: route || undefined,
|
|
router: {
|
|
navigate: jest.fn()
|
|
},
|
|
mainStore: {
|
|
order: {
|
|
vehicle: {
|
|
carId,
|
|
registration: {
|
|
licensePlate: 'TESTPLATE',
|
|
zipCode: '12345'
|
|
}
|
|
},
|
|
customer: {
|
|
emailAddress: 'test@test.com'
|
|
},
|
|
serviceLocation: {
|
|
zipCode: '11111'
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
);
|
|
|
|
const apiResponses = {
|
|
vinLookupResponse: {
|
|
isStatePermissible,
|
|
vinVehicles
|
|
}
|
|
};
|
|
|
|
settleAllPromises.mockImplementation(() => apiResponses);
|
|
|
|
wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => '');
|
|
wrapper.vm.setCmsContent = jest.fn();
|
|
wrapper.vm.$router.navigateWithSpinner = jest.fn();
|
|
wrapper.vm.navigateBack = baseMixin.methods.navigateBack;
|
|
wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn();
|
|
wrapper.vm.$refs.siteFooter.disableForwardButton = jest.fn();
|
|
wrapper.vm.$refs.siteFooter.enableForwardAction = jest.fn();
|
|
|
|
return { wrapper };
|
|
}
|
|
|
|
describe('address-lookup.vue', () => {
|
|
describe('page level alerts', () => {
|
|
test('if the address matches a different vehicle display the Matched Different VehicleAlert', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
vinVehicles: [
|
|
{
|
|
vehicle: {
|
|
carId: 'C00000',
|
|
canSafeliteService: true
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID2';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertMatchedDifferentVehicle' }).isVisible()).toBe(true);
|
|
});
|
|
|
|
test('if the address matches two identical YMM vehicles, then display Two Identical YMM Vehicle alert', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
vinVehicles: [
|
|
{
|
|
vehicle: {
|
|
carId: 'C00000',
|
|
canSafeliteService: true
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID2';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
},
|
|
isTwoIdenticalYMMVehicleFound: true
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertMatchedTwoIdenticalYMMVehicle' }).isVisible()).toBe(true);
|
|
});
|
|
|
|
test('if the looking up VIN by address is not allowed in the state selected display the Vin Lookup By HomeAddress Not Allowed Alert',
|
|
async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
isStatePermissible: false,
|
|
lookupVinbyAddressResponse: {
|
|
isStatePermissible: false,
|
|
vinVehicles: [
|
|
{
|
|
vin: 'TEST_VIN',
|
|
vehicle: {
|
|
carId: 'CARID'
|
|
}
|
|
},
|
|
{
|
|
vin: 'TEST_VIN2',
|
|
vehicle: {
|
|
carId: 'CARID2'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertVinLookupsByHomeAddressNotAllowed' }).isVisible()).toBe(true);
|
|
}
|
|
);
|
|
|
|
test('if no vehicles found, display Vin Not Found alert', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
lookupVinbyAddressResponse: {
|
|
isStatePermissible: true,
|
|
vinVehicles: [] // Return no vehicles
|
|
}
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
wrapper.vm.navigateForward = jest.fn();
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertVinNotFound' }).isVisible()).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('navigation', () => {
|
|
test('if the back button is clicked, navigate back', async () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateBack();
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalled();
|
|
});
|
|
|
|
test('if the car entered matches one of the vehicles found navigate forward', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
vinVehicles: [
|
|
{
|
|
vehicle: {
|
|
carId: 'C11111',
|
|
canSafeliteService: true
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
await wrapper.setData({
|
|
previouslyEnteredCarId: 'C11111',
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
wrapper.vm.navigateForward = jest.fn();
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.vm.navigateForward).toHaveBeenCalled();
|
|
});
|
|
|
|
test('if the car entered does not match any of the multiple vehicles found, navigate to address-vehicles page', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
isStatePermissible: true,
|
|
vinVehicles: [
|
|
{
|
|
vin: 'TEST_VIN',
|
|
vehicle: {
|
|
carId: 'CARID'
|
|
}
|
|
},
|
|
{
|
|
vin: 'TEST_VIN2',
|
|
vehicle: {
|
|
carId: 'CARID2'
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID_A';
|
|
|
|
const carsFound = [
|
|
{
|
|
vin: 'TEST_VIN',
|
|
vehicle: {
|
|
carId: 'CARID'
|
|
}
|
|
},
|
|
{
|
|
vin: 'TEST_VIN2',
|
|
vehicle: {
|
|
carId: 'CARID2'
|
|
}
|
|
}
|
|
];
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
wrapper.vm.updateVehicleInfo = jest.fn();
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(
|
|
navigationScenarios.CLICKED_FORWARD_WITH_MULTIPLE_VEHICLES,
|
|
undefined,
|
|
{},
|
|
{},
|
|
carsFound
|
|
);
|
|
});
|
|
|
|
test('if a different vehicle is found than the one entered and the selected glass is not available for that vehicle, navigate back to vehicle-damage page',
|
|
async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
isStatePermissible: true
|
|
});
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
},
|
|
isCarIdDifferent: true,
|
|
isSelectedGlassAvailableForVehicle: false
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID';
|
|
|
|
const carsFound = [
|
|
{
|
|
vin: 'TEST_VIN2',
|
|
vehicle: {
|
|
carId: 'C0000'
|
|
}
|
|
}
|
|
];
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(carsFound);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(
|
|
navigationScenarios.SELECTED_VIN_WITH_MISMATCHED_GLASS,
|
|
undefined,
|
|
{},
|
|
{ displayVehicleChangeAlert: true }
|
|
);
|
|
}
|
|
);
|
|
|
|
test('single car was found and matches entered vehicle => navigateForwardWithSingleCarMatch', async () => {
|
|
// Arrange
|
|
|
|
const carsFound = [
|
|
{
|
|
vin: 'TEST_VIN_2',
|
|
vehicle: {
|
|
carId: 'C0000'
|
|
}
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({}, {});
|
|
wrapper.vm.navigateForwardWithSingleCarMatch = jest.fn();
|
|
|
|
useMainStore().order.vehicle.carId = 'C0000';
|
|
|
|
// Act
|
|
wrapper.vm.navigateForward(carsFound);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.navigateForwardWithSingleCarMatch).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('multiple cars were found and one matches entered vehicle => navigateForwardWithSingleCarMatch', async () => {
|
|
// Arrange
|
|
const carsFound = [
|
|
{
|
|
vin: 'TEST_VIN_1',
|
|
vehicle: {
|
|
carId: 'C0000'
|
|
}
|
|
},
|
|
{
|
|
vin: 'TEST_VIN_2',
|
|
vehicle: {
|
|
carId: 'CARID2'
|
|
}
|
|
},
|
|
{
|
|
vin: 'TEST_VIN_3',
|
|
vehicle: {
|
|
carId: 'CARID3'
|
|
}
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({});
|
|
wrapper.vm.navigateForwardWithSingleCarMatch = jest.fn();
|
|
|
|
useMainStore().order.vehicle.carId = 'CARID3';
|
|
|
|
// Act
|
|
wrapper.vm.navigateForward(carsFound);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.navigateForwardWithSingleCarMatch).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('selected vehicle is a non-serviceable big truck, display no service alert', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
vinVehicles: [
|
|
{
|
|
vehicle: {
|
|
carId: 'BIGTRUCKCARID',
|
|
isBigTruck: true,
|
|
canSafeliteService: false
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'BIGTRUCKCARID';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.forwardButtonAction();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertNoService' }).isVisible()).toBe(true);
|
|
});
|
|
test('selected vehicle is a serviceable big truck, do not display no service alert', async () => {
|
|
// Arrange
|
|
const mockRegistrationAddress = {
|
|
streetAddress: '1234 Main St',
|
|
city: 'Columbus',
|
|
state: 'OH',
|
|
zipCode: '43215'
|
|
};
|
|
|
|
const { wrapper } = setupMocks({
|
|
vinVehicles: [
|
|
{
|
|
vehicle: {
|
|
carId: 'BIGTRUCKCARID2',
|
|
isBigTruck: true,
|
|
canSafeliteService: true
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
useMainStore().order.vehicle.carId = 'BIGTRUCKCARID2';
|
|
|
|
await wrapper.setData({
|
|
customerQuestions: {
|
|
addressQuestions: mockRegistrationAddress
|
|
}
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.$nextTick();
|
|
|
|
// Assert
|
|
expect(wrapper.findComponent({ ref: 'alertNoService' }).exists()).toBe(false);
|
|
});
|
|
});
|
|
});
|