DigitalConsumer.ISS/src/layouts/address-lookup/address-lookup.spec.js

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);
});
});
});