Merge branch 'develop' into feature/jzimmerman/INSR-8742
This commit is contained in:
commit
efee204fc8
18 changed files with 61 additions and 405 deletions
|
|
@ -63,7 +63,7 @@ const bailoutMessage = Object.freeze({
|
||||||
}),
|
}),
|
||||||
HeavyTruckVehicle: (carId) => ({
|
HeavyTruckVehicle: (carId) => ({
|
||||||
code: bailoutCode.HeavyTruckVehicle,
|
code: bailoutCode.HeavyTruckVehicle,
|
||||||
message: `User selected a heavy truck vehicle. Car ID: ${carId}`
|
message: `User selected a big truck that Safelite cannot service. Car ID: ${carId}`
|
||||||
}),
|
}),
|
||||||
NoPartsAvailable: () => ({
|
NoPartsAvailable: () => ({
|
||||||
code: bailoutCode.NoPartsAvailable,
|
code: bailoutCode.NoPartsAvailable,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
const vehicleLookupAlertTypes = Object.freeze({
|
const vehicleLookupAlertTypes = Object.freeze({
|
||||||
NOT_FOUND: 'notFound',
|
NOT_FOUND: 'notFound',
|
||||||
NOT_MATCHED: 'notMatched',
|
NOT_MATCHED: 'notMatched',
|
||||||
|
NO_SERVICE: 'noService',
|
||||||
TWO_IDENTICAL_YMM_MATCHED: 'twoIdenticalYMMMatched',
|
TWO_IDENTICAL_YMM_MATCHED: 'twoIdenticalYMMMatched',
|
||||||
PERFECT_MATCH: 'perfectMatch',
|
PERFECT_MATCH: 'perfectMatch'
|
||||||
NO_SERVICE: 'noService'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default vehicleLookupAlertTypes;
|
export default vehicleLookupAlertTypes;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ function canBailoutNavigateBack() {
|
||||||
case BailoutCode.VehicleNotFound:
|
case BailoutCode.VehicleNotFound:
|
||||||
case BailoutCode.RequestCallback:
|
case BailoutCode.RequestCallback:
|
||||||
case BailoutCode.TPANotEnabled:
|
case BailoutCode.TPANotEnabled:
|
||||||
|
case BailoutCode.CoverageCancelledByUser:
|
||||||
|
case BailoutCode.HeavyTruckVehicle:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -466,76 +466,5 @@ describe('address-lookup.vue', () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.vm.navigateForwardWithSingleCarMatch).toHaveBeenCalledTimes(1);
|
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);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -55,14 +55,6 @@
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
:isCollapsible="true"
|
:isCollapsible="true"
|
||||||
:isDismissible="false" />
|
:isDismissible="false" />
|
||||||
<alert
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
ref="alertNoService"
|
|
||||||
class="mt-5"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
:isCollapsible="true"
|
|
||||||
:isDismissable="false" />
|
|
||||||
<siteFooter
|
<siteFooter
|
||||||
ref="siteFooter"
|
ref="siteFooter"
|
||||||
class="mt-5"
|
class="mt-5"
|
||||||
|
|
@ -142,8 +134,7 @@ export default {
|
||||||
isCarIdDifferent: false,
|
isCarIdDifferent: false,
|
||||||
isSelectedGlassAvailableForVehicle: true,
|
isSelectedGlassAvailableForVehicle: true,
|
||||||
customAlertData: {},
|
customAlertData: {},
|
||||||
forwardButtonCarStyle: '',
|
forwardButtonCarStyle: ''
|
||||||
displayNoServiceAlert: false
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -261,9 +252,8 @@ export default {
|
||||||
const carFound = carsFound[0].vehicle;
|
const carFound = carsFound[0].vehicle;
|
||||||
|
|
||||||
if (!carFound.canSafeliteService) {
|
if (!carFound.canSafeliteService) {
|
||||||
this.displayNoServiceAlert = true;
|
this.mainStore.setBailout(bailoutMessage.HeavyTruckVehicle(carFound.carId));
|
||||||
showIssLoadingModal(false);
|
return this.$router.push({ name: 'bailout' });
|
||||||
return this.$refs.siteFooter.disableForwardButton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isCarIdDifferent = carFound.carId !== useMainStore().order.vehicle.carId;
|
this.isCarIdDifferent = carFound.carId !== useMainStore().order.vehicle.carId;
|
||||||
|
|
|
||||||
|
|
@ -247,94 +247,4 @@ describe('address-vehicles.vue', () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(arePagePrerequisitesValid).toBe(true);
|
expect(arePagePrerequisitesValid).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('selected vehicle is a non-serviceable big truck, display no service alert', async () => {
|
|
||||||
// Arrange
|
|
||||||
const { wrapper } = setupMocks({});
|
|
||||||
useMainStore().order.vehicle.carId = 'BIGTRUCKCARID';
|
|
||||||
useMainStore().applicationUser = {
|
|
||||||
pageData: {
|
|
||||||
'address-vehicles':
|
|
||||||
[
|
|
||||||
{
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKCARID',
|
|
||||||
make: 'Isuzu',
|
|
||||||
model: 'Reach',
|
|
||||||
style: 'Step Van',
|
|
||||||
year: 2016,
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: false
|
|
||||||
},
|
|
||||||
vin: 'BIGTRUCKVIN'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
selectedVehicleVin: 'BIGTRUCKVIN',
|
|
||||||
previouslyEnteredCarId: 'BIGTRUCKCARID'
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.selectedVehicle = {
|
|
||||||
vin: 'BIGTRUCKVIN',
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKCARID',
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await wrapper.vm.$nextTick();
|
|
||||||
|
|
||||||
// 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 { wrapper } = setupMocks({});
|
|
||||||
useMainStore().order.vehicle.carId = 'BIGTRUCKCARID2';
|
|
||||||
useMainStore().applicationUser = {
|
|
||||||
pageData: {
|
|
||||||
'address-vehicles':
|
|
||||||
[
|
|
||||||
{
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKCARID2',
|
|
||||||
make: 'Mack',
|
|
||||||
model: 'Terrapro',
|
|
||||||
style: 'Cabover',
|
|
||||||
year: 2024,
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: true
|
|
||||||
},
|
|
||||||
vin: 'BIGTRUCKVIN2'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
selectedVehicleVin: 'BIGTRUCKVIN2',
|
|
||||||
previouslyEnteredCarId: 'BIGTRUCKCARID2'
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.selectedVehicle = {
|
|
||||||
vin: 'BIGTRUCKVIN2',
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKCARID2',
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await wrapper.vm.$nextTick();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.findComponent({ ref: 'AlertNoService' }).exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,9 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
backButtonAction() {
|
backButtonAction() {
|
||||||
// route to move backwards
|
// route to move backwards
|
||||||
this.mainStore.resetBailout();
|
if (this.bailout.bailoutCode !== BailoutCode.HeavyTruckVehicle) {
|
||||||
|
this.mainStore.resetBailout();
|
||||||
|
}
|
||||||
this.$router.navigateWithSpinner(
|
this.$router.navigateWithSpinner(
|
||||||
this.navigationScenarios.CLICKED_BACK_PREVIOUS,
|
this.navigationScenarios.CLICKED_BACK_PREVIOUS,
|
||||||
this.$route
|
this.$route
|
||||||
|
|
|
||||||
|
|
@ -151,68 +151,6 @@ describe('license-plate-lookup.vue', () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.findComponent({ ref: 'alertVinNotFound' }).isVisible()).toBe(true);
|
expect(wrapper.findComponent({ ref: 'alertVinNotFound' }).isVisible()).toBe(true);
|
||||||
});
|
});
|
||||||
test('non-serviceable big truck found, display NoServiceAlert', async () => {
|
|
||||||
// Arrange
|
|
||||||
const mockRegistrationLicensePlate = {
|
|
||||||
licensePlate: 'BIGTRUCKTEST'
|
|
||||||
};
|
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
lookupVinByPlateResponse: {
|
|
||||||
vin: 'BIGTRUCKVIN',
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKTESTCARID',
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
useMainStore().order.vehicle.carId = 'BIGTRUCKTESTCARID';
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
licensePlate: mockRegistrationLicensePlate
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.navigateForward = jest.fn();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await wrapper.vm.forwardButtonAction();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.findComponent({ ref: 'alertNoService' }).isVisible()).toBe(true);
|
|
||||||
});
|
|
||||||
test('serviceable big truck found, do not display NoServiceAlert', async () => {
|
|
||||||
// Arrange
|
|
||||||
const mockRegistrationLicensePlate = {
|
|
||||||
licensePlate: 'BIGTRUCKTEST2'
|
|
||||||
};
|
|
||||||
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
lookupVinByPlateResponse: {
|
|
||||||
vin: 'BIGTRUCKVIN2',
|
|
||||||
vehicle: {
|
|
||||||
carId: 'BIGTRUCKTESTCARID2',
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
useMainStore().order.vehicle.carId = 'BIGTRUCKTESTCARID2';
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
licensePlate: mockRegistrationLicensePlate
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.navigateForward = jest.fn();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await wrapper.vm.forwardButtonAction();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.findComponent({ ref: 'alertNoService' }).exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('navigation', () => {
|
describe('navigation', () => {
|
||||||
|
|
|
||||||
|
|
@ -59,13 +59,6 @@
|
||||||
:manualCopy="AlertMatchedTwoIdenticalYMMVehicleBody"
|
:manualCopy="AlertMatchedTwoIdenticalYMMVehicleBody"
|
||||||
alertClass="alert-warning"
|
alertClass="alert-warning"
|
||||||
:isDismissible="false" />
|
:isDismissible="false" />
|
||||||
<alert
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
ref="alertNoService"
|
|
||||||
class="mt-5"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
:isDismissable="false" />
|
|
||||||
<siteFooter
|
<siteFooter
|
||||||
ref="siteFooter"
|
ref="siteFooter"
|
||||||
class="mt-5"
|
class="mt-5"
|
||||||
|
|
@ -156,8 +149,7 @@ export default {
|
||||||
isCarIdDifferent: false,
|
isCarIdDifferent: false,
|
||||||
customAlertData: {},
|
customAlertData: {},
|
||||||
isSelectedGlassAvailableForVehicle: true,
|
isSelectedGlassAvailableForVehicle: true,
|
||||||
forwardButtonCarStyle: '',
|
forwardButtonCarStyle: ''
|
||||||
displayNoServiceAlert: false
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -265,9 +257,11 @@ export default {
|
||||||
// Vehicle found from VIN lookup
|
// Vehicle found from VIN lookup
|
||||||
const vehicleFromLookup = vinLookupResponse.data.vehicle;
|
const vehicleFromLookup = vinLookupResponse.data.vehicle;
|
||||||
if (!vehicleFromLookup.canSafeliteService) {
|
if (!vehicleFromLookup.canSafeliteService) {
|
||||||
this.displayNoServiceAlert = true;
|
this.mainStore.setBailout({
|
||||||
showIssLoadingModal(false);
|
type: 'HeavyTruckVehicle',
|
||||||
return this.$refs.siteFooter.disableForwardButton();
|
carId: vehicleFromLookup.carId
|
||||||
|
});
|
||||||
|
return this.navigateForward();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the CarId has changed
|
// Check if the CarId has changed
|
||||||
|
|
@ -326,7 +320,6 @@ export default {
|
||||||
resetWarningsAndErrors() {
|
resetWarningsAndErrors() {
|
||||||
this.displayVinNotFoundAlert = false;
|
this.displayVinNotFoundAlert = false;
|
||||||
this.displayMatchedDifferentVehicleAlert = false;
|
this.displayMatchedDifferentVehicleAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@ import { getRandomString, getRandomInt } from '@/helpers/data-generation';
|
||||||
import endorsementOptions from '@/constants/endorsement-options';
|
import endorsementOptions from '@/constants/endorsement-options';
|
||||||
import { createTestingPinia } from '@pinia/testing';
|
import { createTestingPinia } from '@pinia/testing';
|
||||||
import vehicleSelectionOptions from '@/constants/vehicle-selection-options';
|
import vehicleSelectionOptions from '@/constants/vehicle-selection-options';
|
||||||
import bailoutCode from '@/constants/bailoutCode';
|
|
||||||
import bailoutMessage from '@/constants/bailoutMessage';
|
|
||||||
import issPageValues from '@/router/router-constants/issPage-values';
|
import issPageValues from '@/router/router-constants/issPage-values';
|
||||||
|
|
||||||
// Mock fetchCmsContentForPage
|
// Mock fetchCmsContentForPage
|
||||||
|
|
@ -720,54 +718,4 @@ describe('policy-vehicles.vue', () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.vm.selectedVehicleVin).toBe(vin);
|
expect(wrapper.vm.selectedVehicleVin).toBe(vin);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('selected vehicle is a non-serviceable big truck, display no service alert', async () => {
|
|
||||||
// Arrange
|
|
||||||
const vin = getRandomString(17, 17);
|
|
||||||
const policyVehicle = {
|
|
||||||
vin,
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: false
|
|
||||||
};
|
|
||||||
|
|
||||||
const { wrapper } = setupMocks({});
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
selectedVehicleVin: vin,
|
|
||||||
selectedPolicyVehicle: policyVehicle,
|
|
||||||
policyVehicles: [policyVehicle],
|
|
||||||
policyVinFound: true
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.displayNoServiceAlert = true;
|
|
||||||
await wrapper.vm.$nextTick();
|
|
||||||
|
|
||||||
// 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 vin = getRandomString(17, 17);
|
|
||||||
const policyVehicle = {
|
|
||||||
vin,
|
|
||||||
isBigTruck: true,
|
|
||||||
canSafeliteService: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const { wrapper } = setupMocks({});
|
|
||||||
|
|
||||||
await wrapper.setData({
|
|
||||||
selectedVehicleVin: vin,
|
|
||||||
selectedPolicyVehicle: policyVehicle,
|
|
||||||
policyVehicles: [policyVehicle],
|
|
||||||
policyVinFound: true
|
|
||||||
});
|
|
||||||
|
|
||||||
wrapper.vm.displayNoServiceAlert = false;
|
|
||||||
await wrapper.vm.$nextTick();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.findComponent({ ref: 'AlertNoService' }).exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,10 @@
|
||||||
buttonText="Add another vehicle"
|
buttonText="Add another vehicle"
|
||||||
class="w-100"
|
class="w-100"
|
||||||
@clickEvent="addAnotherVehicle" />
|
@clickEvent="addAnotherVehicle" />
|
||||||
<alert
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
ref="AlertNoService"
|
|
||||||
class="mt-3"
|
|
||||||
cmsWidgetName="AlertVehicleSelection"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
:isDismissable="false" />
|
|
||||||
<siteFooter
|
<siteFooter
|
||||||
ref="siteFooter"
|
ref="siteFooter"
|
||||||
cmsWidgetName="SiteFooterWidget"
|
cmsWidgetName="SiteFooterWidget"
|
||||||
:isForwardActionDisabled="!meta.valid || displayNoServiceAlert"
|
:isForwardActionDisabled="!meta.valid"
|
||||||
@ForwardClicked="forwardButtonAction"
|
@ForwardClicked="forwardButtonAction"
|
||||||
@backClicked="backButtonAction" />
|
@backClicked="backButtonAction" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -67,10 +60,10 @@ import {
|
||||||
} from '@/helpers/policy-vehicle-helper';
|
} from '@/helpers/policy-vehicle-helper';
|
||||||
import coverageType from '@/constants/coverage-type';
|
import coverageType from '@/constants/coverage-type';
|
||||||
import coverageStatuses from '@/constants/coverage-statuses';
|
import coverageStatuses from '@/constants/coverage-statuses';
|
||||||
import alert from '@/ux-components/alert/alert.vue';
|
|
||||||
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
||||||
import buttonMain from '@/ux-components/button-main/button-main.vue';
|
import buttonMain from '@/ux-components/button-main/button-main.vue';
|
||||||
import { buttonVariants } from '@/constants/component-variants';
|
import { buttonVariants } from '@/constants/component-variants';
|
||||||
|
import bailoutMessage from '@/constants/bailoutMessage';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'policy-vehicles',
|
name: 'policy-vehicles',
|
||||||
|
|
@ -80,8 +73,7 @@ export default {
|
||||||
siteHeader,
|
siteHeader,
|
||||||
siteFooter,
|
siteFooter,
|
||||||
policyVehiclesQuestion,
|
policyVehiclesQuestion,
|
||||||
Form,
|
Form
|
||||||
alert
|
|
||||||
},
|
},
|
||||||
mixins: [BaseFormMixin],
|
mixins: [BaseFormMixin],
|
||||||
async beforeRouteEnter(to, from, next) {
|
async beforeRouteEnter(to, from, next) {
|
||||||
|
|
@ -103,7 +95,6 @@ export default {
|
||||||
rules: {
|
rules: {
|
||||||
optionRequired: globalRules.OPTION_REQUIRED
|
optionRequired: globalRules.OPTION_REQUIRED
|
||||||
},
|
},
|
||||||
displayNoServiceAlert: false,
|
|
||||||
buttonVariants
|
buttonVariants
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
@ -147,7 +138,6 @@ export default {
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
async selectedVehicleVin(value) {
|
async selectedVehicleVin(value) {
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
if (value === vehicleSelectionOptions.VEHICLE_NOT_LISTED) {
|
if (value === vehicleSelectionOptions.VEHICLE_NOT_LISTED) {
|
||||||
// clear previously selected vehicle and image
|
// clear previously selected vehicle and image
|
||||||
this.mainStore.resetVehicleState();
|
this.mainStore.resetVehicleState();
|
||||||
|
|
@ -157,10 +147,6 @@ export default {
|
||||||
// get vehicle details from selected VIN
|
// get vehicle details from selected VIN
|
||||||
try {
|
try {
|
||||||
const vehicle = await this.lookupVehicleByVin(value);
|
const vehicle = await this.lookupVehicleByVin(value);
|
||||||
if (!vehicle?.data.canSafeliteService) {
|
|
||||||
this.displayNoServiceAlert = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (vehicle) {
|
if (vehicle) {
|
||||||
// save selected vehicle to the store
|
// save selected vehicle to the store
|
||||||
useMainStore().updateVehicle({
|
useMainStore().updateVehicle({
|
||||||
|
|
@ -201,6 +187,11 @@ export default {
|
||||||
try {
|
try {
|
||||||
const vehicleLookupResponse = await this.lookupVehicleByVin(this.selectedVehicleVin);
|
const vehicleLookupResponse = await this.lookupVehicleByVin(this.selectedVehicleVin);
|
||||||
|
|
||||||
|
if (!vehicleLookupResponse?.data.canSafeliteService) {
|
||||||
|
this.mainStore.setBailout(
|
||||||
|
bailoutMessage.HeavyTruckVehicle(vehicleLookupResponse?.data?.carId)
|
||||||
|
);
|
||||||
|
}
|
||||||
useMainStore().updateVehicle({
|
useMainStore().updateVehicle({
|
||||||
...vehicleLookupResponse.data,
|
...vehicleLookupResponse.data,
|
||||||
policyVehicleId: vehicle.id,
|
policyVehicleId: vehicle.id,
|
||||||
|
|
@ -242,6 +233,11 @@ export default {
|
||||||
{},
|
{},
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
} else if (this.mainStore.isBailout) {
|
||||||
|
this.$router.navigate(
|
||||||
|
this.navigationScenarios.BAILOUT,
|
||||||
|
this.$route
|
||||||
|
);
|
||||||
} else if (this.endorsementsForSelectedVehicle?.length > 0
|
} else if (this.endorsementsForSelectedVehicle?.length > 0
|
||||||
&& (this.endorsementsForSelectedVehicle?.includes(endorsementOptions.PARKING_GUARD)
|
&& (this.endorsementsForSelectedVehicle?.includes(endorsementOptions.PARKING_GUARD)
|
||||||
|| this.endorsementsForSelectedVehicle?.includes(endorsementOptions.EDUCATOR))
|
|| this.endorsementsForSelectedVehicle?.includes(endorsementOptions.EDUCATOR))
|
||||||
|
|
|
||||||
|
|
@ -46,18 +46,11 @@
|
||||||
:updateValues="updateStyleValues"
|
:updateValues="updateStyleValues"
|
||||||
validationRules="style-required"
|
validationRules="style-required"
|
||||||
inputId="styleQuestionField" />
|
inputId="styleQuestionField" />
|
||||||
<alert
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
ref="AlertNoService"
|
|
||||||
class="mt-5"
|
|
||||||
cmsWidgetName="AlertVehicleSelection"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
:isDismissable="false" />
|
|
||||||
<siteFooter
|
<siteFooter
|
||||||
ref="siteFooter"
|
ref="siteFooter"
|
||||||
class="mt-5"
|
class="mt-5"
|
||||||
cmsWidgetName="SiteFooterWidget"
|
cmsWidgetName="SiteFooterWidget"
|
||||||
:isForwardActionDisabled="!meta.valid || displayNoServiceAlert"
|
:isForwardActionDisabled="!meta.valid"
|
||||||
@ForwardClicked="forwardButtonAction"
|
@ForwardClicked="forwardButtonAction"
|
||||||
@backClicked="navigateBack" />
|
@backClicked="navigateBack" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -72,7 +65,6 @@ import siteHeader from '@/iss-components/site-header/site-header.vue';
|
||||||
import siteFooter from '@/iss-components/site-footer/site-footer.vue';
|
import siteFooter from '@/iss-components/site-footer/site-footer.vue';
|
||||||
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
||||||
import vehicleQuestion from '@/layouts/vehicle-selection/vehicle-question/vehicle-question.vue';
|
import vehicleQuestion from '@/layouts/vehicle-selection/vehicle-question/vehicle-question.vue';
|
||||||
import alert from '@/ux-components/alert/alert.vue';
|
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
|
|
||||||
// Supporting files
|
// Supporting files
|
||||||
|
|
@ -97,8 +89,7 @@ export default {
|
||||||
siteSubHeader,
|
siteSubHeader,
|
||||||
siteFooter,
|
siteFooter,
|
||||||
Form,
|
Form,
|
||||||
vehicleQuestion,
|
vehicleQuestion
|
||||||
alert
|
|
||||||
},
|
},
|
||||||
mixins: [baseFormMixin],
|
mixins: [baseFormMixin],
|
||||||
|
|
||||||
|
|
@ -131,15 +122,13 @@ export default {
|
||||||
selectedYear: year,
|
selectedYear: year,
|
||||||
selectedMake: make,
|
selectedMake: make,
|
||||||
selectedModel: model,
|
selectedModel: model,
|
||||||
selectedStyle: style,
|
selectedStyle: style
|
||||||
displayNoServiceAlert: false
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
selectedYear(value) {
|
selectedYear(value) {
|
||||||
this.resetAlert();
|
|
||||||
this.mainStore.updateVehicleYear(value);
|
this.mainStore.updateVehicleYear(value);
|
||||||
this.$refs.vehicleMakeQuestion.clearValues();
|
this.$refs.vehicleMakeQuestion.clearValues();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
@ -147,7 +136,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
selectedMake(value) {
|
selectedMake(value) {
|
||||||
this.resetAlert();
|
|
||||||
this.mainStore.updateVehicleMake(value);
|
this.mainStore.updateVehicleMake(value);
|
||||||
this.$refs.vehicleModelQuestion.clearValues();
|
this.$refs.vehicleModelQuestion.clearValues();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
@ -155,7 +143,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
selectedModel(value) {
|
selectedModel(value) {
|
||||||
this.resetAlert();
|
|
||||||
this.mainStore.updateVehicleModel(value);
|
this.mainStore.updateVehicleModel(value);
|
||||||
this.$refs.vehicleStyleQuestion.clearValues();
|
this.$refs.vehicleStyleQuestion.clearValues();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
@ -164,16 +151,7 @@ export default {
|
||||||
},
|
},
|
||||||
selectedStyle(value) {
|
selectedStyle(value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
this.resetAlert();
|
|
||||||
this.mainStore.updateVehicleStyle(value);
|
this.mainStore.updateVehicleStyle(value);
|
||||||
this.mainStore.setVehicle(
|
|
||||||
this.selectedYear,
|
|
||||||
this.selectedMake,
|
|
||||||
this.selectedModel,
|
|
||||||
this.selectedStyle
|
|
||||||
).then((result) => {
|
|
||||||
this.displayNoServiceAlert = !result.data.canSafeliteService;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -188,16 +166,6 @@ export default {
|
||||||
if (this.selectedModel) {
|
if (this.selectedModel) {
|
||||||
this.$refs.vehicleStyleQuestion.getNewValues();
|
this.$refs.vehicleStyleQuestion.getNewValues();
|
||||||
}
|
}
|
||||||
if (this.selectedStyle) {
|
|
||||||
this.mainStore.setVehicle(
|
|
||||||
this.selectedYear,
|
|
||||||
this.selectedMake,
|
|
||||||
this.selectedModel,
|
|
||||||
this.selectedStyle
|
|
||||||
).then((result) => {
|
|
||||||
this.displayNoServiceAlert = !result.data.canSafeliteService;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
|
|
@ -208,12 +176,23 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
navigateForward() {
|
navigateForward() {
|
||||||
this.mainStore.setVehicle().then(() => {
|
this.mainStore.setVehicle().then((result) => {
|
||||||
this.$router.navigate(
|
if (!result.data.canSafeliteService) {
|
||||||
this.navigationScenarios.CLICKED_FORWARD,
|
this.mainStore.setBailout(bailoutMessage.HeavyTruckVehicle(this.mainStore.order.vehicle.carId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mainStore.isBailout) {
|
||||||
|
return this.$router.navigate(
|
||||||
|
this.navigationScenarios.BAILOUT,
|
||||||
this.$route
|
this.$route
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return this.$router.navigate(
|
||||||
|
this.navigationScenarios.CLICKED_FORWARD,
|
||||||
|
this.$route
|
||||||
|
);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
async updateYearValues() {
|
async updateYearValues() {
|
||||||
|
|
|
||||||
|
|
@ -67,17 +67,4 @@ describe('vin-lookup-alerts.vue', () => {
|
||||||
|
|
||||||
expect(twoIdenticalYMMVehicleAlert).toBeVisible();
|
expect(twoIdenticalYMMVehicleAlert).toBeVisible();
|
||||||
});
|
});
|
||||||
test('NoServiceAlert is displayed on the screen', () => {
|
|
||||||
mountOptions.props = {
|
|
||||||
activeAlertType: vehicleLookupAlertTypes.NO_SERVICE
|
|
||||||
};
|
|
||||||
mountOptions.global.provide = {
|
|
||||||
vehicleFromLookup: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
const { queryByRole } = render(VinLookupAlertsComponent, mountOptions);
|
|
||||||
const noServiceAlert = queryByRole('alert', { name: 'no-service-alert' });
|
|
||||||
|
|
||||||
expect(noServiceAlert).toBeVisible();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -488,36 +488,6 @@ describe('vin-lookup.vue', () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
test('Display no service alert if entered vin cannot be serviced', async () => {
|
|
||||||
const user = userEvent.setup();
|
|
||||||
mountOptions.global.stubs.vinQuestion = false;
|
|
||||||
|
|
||||||
mountOptions.data = () => ({
|
|
||||||
vinWithNonMatchingCarId: false,
|
|
||||||
isCarIdDifferentFromTheStore: false,
|
|
||||||
vin: mockValidVin
|
|
||||||
});
|
|
||||||
|
|
||||||
getPartsOrQuestions.mockResponse = vehicleWithNoAdditionalPartsOrQuestionsMockResponse;
|
|
||||||
|
|
||||||
jest.spyOn(VinLookupComponent.methods, lookupVehicleByVin.methodName)
|
|
||||||
.mockResolvedValue(lookupVehicleByVinCannotService.mockResponse);
|
|
||||||
jest.spyOn(vehicleQuestionsMixin.methods, getPartsOrQuestions.methodName)
|
|
||||||
.mockResolvedValue(getPartsOrQuestions.mockResponse);
|
|
||||||
|
|
||||||
const { container } = render(VinLookupComponent, mountOptions);
|
|
||||||
|
|
||||||
const vinInput = container.querySelector(vinInputSelector);
|
|
||||||
await user.type(vinInput, mockValidVin);
|
|
||||||
|
|
||||||
const continueButton = container.querySelector(continueButtonQuerySelector);
|
|
||||||
await user.click(continueButton);
|
|
||||||
|
|
||||||
await flushPromises();
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(container).toContainHTML('noService');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('Policy Vehicle with invalid vin corrected. Click "Continue", execute navigate with navigationScenario.CORRECTED_VIN_FROM_POLICY_VEHICLE', async () => {
|
test('Policy Vehicle with invalid vin corrected. Click "Continue", execute navigate with navigationScenario.CORRECTED_VIN_FROM_POLICY_VEHICLE', async () => {
|
||||||
const user = userEvent.setup();
|
const user = userEvent.setup();
|
||||||
|
|
|
||||||
|
|
@ -179,9 +179,8 @@ export default {
|
||||||
const vehicleLookupResponse = await this.lookupVehicleByVin(this.vin);
|
const vehicleLookupResponse = await this.lookupVehicleByVin(this.vin);
|
||||||
|
|
||||||
if (!vehicleLookupResponse.data.canSafeliteService) {
|
if (!vehicleLookupResponse.data.canSafeliteService) {
|
||||||
this.activeVehicleLookupAlertType = vehicleLookupAlertTypes.NO_SERVICE;
|
this.mainStore.setBailout(bailoutMessage.HeavyTruckVehicle(vehicleLookupResponse.data.carId));
|
||||||
this.resetVehicleFromLookup();
|
this.resetVehicleFromLookup();
|
||||||
this.$refs.siteFooter.disableForwardButton();
|
|
||||||
showIssLoadingModal(false);
|
showIssLoadingModal(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -304,6 +304,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async forwardButtonAction() {
|
async forwardButtonAction() {
|
||||||
|
this.mainStore.resetVehicleState();
|
||||||
this.mainStore.updatePolicyData(this.welcomePageModel);
|
this.mainStore.updatePolicyData(this.welcomePageModel);
|
||||||
|
|
||||||
// We want to await this separately. It's quick and if this has an invalid zip we don't want to be waiting on the slower API calls
|
// We want to await this separately. It's quick and if this has an invalid zip we don't want to be waiting on the slower API calls
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,14 @@ export default {
|
||||||
const self = vm ?? this;
|
const self = vm ?? this;
|
||||||
const currentPage = self.$route.query.issPage;
|
const currentPage = self.$route.query.issPage;
|
||||||
|
|
||||||
|
if (self.mainStore.isBailout) {
|
||||||
|
self.$router.navigate(
|
||||||
|
self.navigationScenarios.BAILOUT,
|
||||||
|
self.$route
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const hasPartQuestions = this.hasPartQuestions(partsOrQuestions);
|
const hasPartQuestions = this.hasPartQuestions(partsOrQuestions);
|
||||||
const hasGlassLocationWithMultipleParts = this.hasGlassLocationWithMultipleParts(partsOrQuestions);
|
const hasGlassLocationWithMultipleParts = this.hasGlassLocationWithMultipleParts(partsOrQuestions);
|
||||||
const hasChildPartQuestions = this.hasChildPartQuestions(partsOrQuestions);
|
const hasChildPartQuestions = this.hasChildPartQuestions(partsOrQuestions);
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ const routingTable = () => [
|
||||||
{
|
{
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD,
|
scenario: navigationScenarios.CLICKED_FORWARD,
|
||||||
destinationIssPageValue: issPageValues.POLICY_HOLDER_DETAILS
|
destinationIssPageValue: issPageValues.POLICY_HOLDER_DETAILS
|
||||||
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.BAILOUT,
|
||||||
|
destinationIssPageValue: issPageValues.BAILOUT_PAGE
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue