From 5e204b51b3ff350d6a29816b711d26dd565463db Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 10 Sep 2025 15:36:02 -0400 Subject: [PATCH] unit tests and clean up --- .../address-lookup/address-lookup.spec.js | 36 ++++++++++++++ src/layouts/address-lookup/address-lookup.vue | 18 +++---- .../address-vehicles/address-vehicles.spec.js | 49 ++++++++++++++++++- .../address-vehicles/address-vehicles.vue | 16 +++++- .../license-plate-lookup.spec.js | 31 ++++++++++++ .../license-plate-lookup.vue | 17 +++---- .../policy-vehicles/policy-vehicles.spec.js | 27 +++++++++- .../policy-vehicles/policy-vehicles.vue | 8 +-- .../vin-lookup-alerts.spec.js | 13 +++++ src/layouts/vin-lookup/vin-lookup.spec.js | 12 ++--- src/store/store.spec.js | 14 ------ 11 files changed, 194 insertions(+), 47 deletions(-) diff --git a/src/layouts/address-lookup/address-lookup.spec.js b/src/layouts/address-lookup/address-lookup.spec.js index 6bf15d2e..dba49f52 100644 --- a/src/layouts/address-lookup/address-lookup.spec.js +++ b/src/layouts/address-lookup/address-lookup.spec.js @@ -468,5 +468,41 @@ describe('address-lookup.vue', () => { // 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); + }); }); }); diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index 24aa2f20..6c7bd99e 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -55,7 +55,7 @@ :isDismissible="false" /> { }); // TODO: Add () to toReturn and ensure test passes. - test.skip('Should return out of forwardButtonAction is lookupVin returns an error', async () => { + test('Should return out of forwardButtonAction is lookupVin returns an error', async () => { // Arrange const { wrapper } = setupMocks({}); wrapper.vm.navigateForwardWithSingleCarMatch = jest.fn(); @@ -248,4 +249,50 @@ describe('address-vehicles.vue', () => { // Assert 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: 2015, + 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); + }); + }); diff --git a/src/layouts/address-vehicles/address-vehicles.vue b/src/layouts/address-vehicles/address-vehicles.vue index 4dc43525..7f906b7f 100644 --- a/src/layouts/address-vehicles/address-vehicles.vue +++ b/src/layouts/address-vehicles/address-vehicles.vue @@ -26,6 +26,13 @@ :manualHeadline="AlertFoundMultipleVehiclesHeader" manualCopy="" :isDismissible="false" /> + { // Assert 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); + }); }); describe('navigation', () => { diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index 1df5b919..151fa580 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -49,7 +49,7 @@ :isDismissible="false" /> { // Assert 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); + }); }); diff --git a/src/layouts/policy-vehicles/policy-vehicles.vue b/src/layouts/policy-vehicles/policy-vehicles.vue index 10ef05d9..9972cb80 100644 --- a/src/layouts/policy-vehicles/policy-vehicles.vue +++ b/src/layouts/policy-vehicles/policy-vehicles.vue @@ -27,14 +27,14 @@ @@ -161,8 +161,10 @@ export default { this.displayGeneric = true; return; } - if (vehicle.data.isBigTruck && !vehicle.data.canSafeliteService) { + // check if vehicle is a non-serviceable big truck + if (vehicle?.data.isBigTruck && !vehicle?.data.canSafeliteService) { this.displayNoServiceAlert = true; + this.$refs.siteFooter.disableForwardButton(); } if (vehicle) { // save selected vehicle to the store diff --git a/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.spec.js b/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.spec.js index 6f6a3e41..c35c5b7c 100644 --- a/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.spec.js +++ b/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.spec.js @@ -68,4 +68,17 @@ describe('vin-lookup-alerts.vue', () => { 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(); + }); }); diff --git a/src/layouts/vin-lookup/vin-lookup.spec.js b/src/layouts/vin-lookup/vin-lookup.spec.js index 2ac22591..2d33af98 100644 --- a/src/layouts/vin-lookup/vin-lookup.spec.js +++ b/src/layouts/vin-lookup/vin-lookup.spec.js @@ -34,6 +34,7 @@ const lookupVehicleByVinCannotService = { mockResponse: { data: { carId: mockCarId, + isBigTruck: true, canSafeliteService: false } } @@ -494,13 +495,13 @@ describe('vin-lookup.vue', () => { ); }); }); - test('Bailout if entered vin cannot be serviced', async () => { + 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, + isCarIdDifferentFromTheStore: false, vin: mockValidVin }); @@ -521,12 +522,7 @@ describe('vin-lookup.vue', () => { await flushPromises(); await waitFor(() => { - expect(mockRouter.navigate).toHaveBeenCalledTimes(1); - expect(mockRouter.navigate) - .toHaveBeenCalledWith( - navigationScenarios.CLICKED_FORWARD_WITH_BAILOUT, - mockRoute - ); + expect(container).toContainHTML('noService'); }); }); diff --git a/src/store/store.spec.js b/src/store/store.spec.js index c53fa5ac..087187e5 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -238,20 +238,6 @@ describe('Store', () => { expect(store.order.insuranceCoverage.coverageType).toBe(expected); }); }); - it('setVehicle is bailout if the vehicle cannot be serviced by Safelite', () => { - // Arrange - const vehicle = { - carId: getRandomString(6, 6), - canSafeliteService: false - }; - - // Act - store.updateVehicle(vehicle); - - // Assert - expect(store.isBailout).toBe(true); - expect(store.bailoutCode).toBe(bailoutCode.HeavyTruckVehicle); - }); // TODO update test to work also checking store values it('setVehicle should call globalMethods.callHttpClient', () => {