diff --git a/src/helpers/damage-review-content-generator.js b/src/helpers/damage-review-content-generator.js new file mode 100644 index 00000000..a6d8f7b5 --- /dev/null +++ b/src/helpers/damage-review-content-generator.js @@ -0,0 +1,71 @@ +import damageLocationsSelected from '@/constants/damage-locations-selected.js'; + +function getLocationAnswer(damageLocation, locationAnswers) { + return locationAnswers?.find((answer) => answer.Name === damageLocation); +} + +function getGlassPieces(damageLocation, glassToReplace) { + return glassToReplace?.filter((item) => item.glassLocation === damageLocation); +} + +function getWindshieldCopy(answerContent, glassToReplace, isRepair) { + const windshieldPieces = getGlassPieces(damageLocationsSelected.WINDSHIELD, glassToReplace); + return isRepair || !!windshieldPieces?.length ? [answerContent?.Text] : []; +} + +function getRearCopy(answerContent, glassToReplace) { + const rearPieces = getGlassPieces(damageLocationsSelected.REAR, glassToReplace); + return rearPieces?.length ? [answerContent?.Text] : []; +} + +function generateBulletedListFromAnswers(answers) { + const items = answers.map((answer) => `
  • ${answer.Text}
  • `); + return ``; +} + +function getSideCopy(location, locationAnswers, damageAnswers, glassToReplace) { + const sideItems = getGlassPieces(location, glassToReplace); + const damageAnswersOnOrder = damageAnswers?.filter((answer) => + sideItems?.some((glassPiece) => answer.Name === glassPiece.glassName)); + + return sideItems?.length + ? [ + locationAnswers?.Text, + generateBulletedListFromAnswers(damageAnswersOnOrder) + ] + : []; +} + +function getDamageDisplayContent( + locationAnswers, + driverSideDamageAnswers, + passengerSideDamageAnswers, + glassToReplace, + isRepair +) { + return [ + ...getWindshieldCopy( + getLocationAnswer(damageLocationsSelected.WINDSHIELD, locationAnswers), + glassToReplace, + isRepair + ), + ...getSideCopy( + damageLocationsSelected.DRIVER, + getLocationAnswer(damageLocationsSelected.DRIVER, locationAnswers), + driverSideDamageAnswers, + glassToReplace + ), + ...getSideCopy( + damageLocationsSelected.PASSENGER, + getLocationAnswer(damageLocationsSelected.PASSENGER, locationAnswers), + passengerSideDamageAnswers, + glassToReplace + ), + ...getRearCopy( + getLocationAnswer(damageLocationsSelected.REAR, locationAnswers), + glassToReplace + ) + ]; +} + +export { getDamageDisplayContent, getLocationAnswer }; diff --git a/src/helpers/damage-review-content-generator.spec.js b/src/helpers/damage-review-content-generator.spec.js new file mode 100644 index 00000000..8a20d7d7 --- /dev/null +++ b/src/helpers/damage-review-content-generator.spec.js @@ -0,0 +1,411 @@ +import { getDamageDisplayContent, getLocationAnswer } from '@/helpers/damage-review-content-generator.js'; +import damageLocationsSelected from '@/constants/damage-locations-selected'; + +const testConstants = { + cmsConstants: { + widgetNames: { + locations: 'DamageLocationsWidget', + driverDamages: 'DriverDamagesWidget', + passengerDamages: 'PassengerDamagesWidget' + }, + damageLocations: { + windshield: damageLocationsSelected.WINDSHIELD, + driver: damageLocationsSelected.DRIVER, + passenger: damageLocationsSelected.PASSENGER, + rear: damageLocationsSelected.REAR + }, + damageNames: { + vent: damageLocationsSelected.VENT, + front: damageLocationsSelected.FRONT, + back: damageLocationsSelected.BACK, + quarter: damageLocationsSelected.QUARTER, + side: damageLocationsSelected.SIDEDOOR + }, + locationCopy: { + windshield: 'Windshield copy', + driver: 'Driver copy', + passenger: 'Passenger copy', + rear: 'Rear copy' + }, + damageCopy: { + vent: 'Vent copy', + front: 'Front copy', + back: 'Back copy', + quarter: 'Quarter copy', + side: 'Side copy' + }, + imageId: '00000000-0000-0000-0000-000000000000' + }, + glassItems: { + windshield: { + glassLocation: damageLocationsSelected.WINDSHIELD, + glassName: damageLocationsSelected.SINGLE + }, + rear: { + glassLocation: damageLocationsSelected.REAR, + glassName: damageLocationsSelected.STATIONARY + }, + passengerItems: { + vent: { + glassLocation: damageLocationsSelected.PASSENGER, + glassName: damageLocationsSelected.VENT + }, + front: { + glassLocation: damageLocationsSelected.PASSENGER, + glassName: damageLocationsSelected.FRONT + }, + back: { + glassLocation: damageLocationsSelected.PASSENGER, + glassName: damageLocationsSelected.BACK + }, + quarter: { + glassLocation: damageLocationsSelected.PASSENGER, + glassName: damageLocationsSelected.QUARTER + }, + side: { + glassLocation: damageLocationsSelected.PASSENGER, + glassName: damageLocationsSelected.SIDEDOOR + } + }, + driverItems: { + vent: { + glassLocation: damageLocationsSelected.DRIVER, + glassName: damageLocationsSelected.VENT + }, + front: { + glassLocation: damageLocationsSelected.DRIVER, + glassName: damageLocationsSelected.FRONT + }, + back: { + glassLocation: damageLocationsSelected.DRIVER, + glassName: damageLocationsSelected.BACK + }, + quarter: { + glassLocation: damageLocationsSelected.DRIVER, + glassName: damageLocationsSelected.QUARTER + }, + side: { + glassLocation: damageLocationsSelected.DRIVER, + glassName: damageLocationsSelected.SIDEDOOR + } + } + } +}; +const cmsContent = { + DamageLocationsWidget: { + Answers: [ + { + Name: testConstants.cmsConstants.damageLocations.windshield, + Text: testConstants.cmsConstants.locationCopy.windshield, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageLocations.driver, + Text: testConstants.cmsConstants.locationCopy.driver, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: testConstants.cmsConstants.widgetNames.driverDamages + }, + { + Name: testConstants.cmsConstants.damageLocations.passenger, + Text: testConstants.cmsConstants.locationCopy.passenger, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: testConstants.cmsConstants.widgetNames.passengerDamages + }, + { + Name: testConstants.cmsConstants.damageLocations.rear, + Text: testConstants.cmsConstants.locationCopy.rear, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + } + ] + }, + DriverDamagesWidget: { + Answers: [ + { + Name: testConstants.cmsConstants.damageNames.vent, + Text: testConstants.cmsConstants.damageCopy.vent, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.front, + Text: testConstants.cmsConstants.damageCopy.front, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.back, + Text: testConstants.cmsConstants.damageCopy.back, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.quarter, + Text: testConstants.cmsConstants.damageCopy.quarter, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.side, + Text: testConstants.cmsConstants.damageCopy.side, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + } + ] + }, + PassengerDamagesWidget: { + Answers: [ + { + Name: testConstants.cmsConstants.damageNames.vent, + Text: testConstants.cmsConstants.damageCopy.vent, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.front, + Text: testConstants.cmsConstants.damageCopy.front, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.back, + Text: testConstants.cmsConstants.damageCopy.back, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.quarter, + Text: testConstants.cmsConstants.damageCopy.quarter, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + }, + { + Name: testConstants.cmsConstants.damageNames.side, + Text: testConstants.cmsConstants.damageCopy.side, + SubText: '', + ImageId: testConstants.cmsConstants.imageId, + Image: '', + SubWidgetName: '' + } + ] + } +}; + +describe('damage-review-content-generator', () => { + describe('getLocationAnswer', () => { + test('answer with damage location name match', () => { + // Arrange + const damageLocation = 'matching name'; + const expected = { Name: damageLocation }; + const locationAnswers = [{ Name: 'non matching name' }, expected]; + + // Act + const result = getLocationAnswer(damageLocation, locationAnswers); + + // Assert + expect(result).toEqual(expected); + }); + test('no damage location name match', () => { + // Arrange + const damageLocation = 'random string'; + const locationAnswers = [{ Name: 'non matching name' }]; + + // Act + const result = getLocationAnswer(damageLocation, locationAnswers); + + // Assert + expect(result).toBe(undefined); + }); + test.each([ + [[]], + [null], + [undefined] + ])('location answers %p', (locationAnswers) => { + // Arrange + const damageLocation = 'some string'; + + // Act + const result = getLocationAnswer(damageLocation, locationAnswers); + + // Assert + expect(result).toBe(undefined); + }); + }); + describe('Correctly assembles damage info into a display string', () => { + const locationAnswers = cmsContent.DamageLocationsWidget.Answers; + test('Shows windshield copy when windshield damage is included', async () => { + // Arrange + const glassToReplace = [testConstants.glassItems.windshield]; + const isRepair = false; + + // Act + const result = getDamageDisplayContent(locationAnswers, null, null, glassToReplace, isRepair); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.windshield + ]); + }); + + test('Windshield copy is shown when order is a repair', async () => { + // Arrange + const glassToReplace = []; + const isRepair = true; + + // Act + const result = getDamageDisplayContent(locationAnswers, null, null, glassToReplace, isRepair); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.windshield + ]); + }); + + test('Rear windshield copy shows when rear damage is present', async () => { + // Arrange + const glassToReplace = [testConstants.glassItems.rear]; + const isRepair = false; + + // Act + const result = getDamageDisplayContent(locationAnswers, null, null, glassToReplace, isRepair); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.rear + ]); + }); + + test('Driver side copy and items are shown when driver side damage is present', async () => { + // Arrange + const driverSideDamageAnswers = cmsContent.DriverDamagesWidget.Answers; + const glassToReplace = [ + testConstants.glassItems.driverItems.back, + testConstants.glassItems.driverItems.front + ]; + const isRepair = false; + const expectedList = ''; + + // Act + const result = getDamageDisplayContent( + locationAnswers, + driverSideDamageAnswers, + null, + glassToReplace, + isRepair + ); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.driver, + expectedList + ]); + }); + + test('Passenger side copy and items are shown when passenger side damage is present', async () => { + // Arrange + const passengerSideDamageAnswers = cmsContent.PassengerDamagesWidget.Answers; + const glassToReplace = [ + testConstants.glassItems.passengerItems.quarter, + testConstants.glassItems.passengerItems.vent, + testConstants.glassItems.passengerItems.side + ]; + const isRepair = false; + const expectedList = ''; + + // Act + const result = getDamageDisplayContent( + locationAnswers, + null, + passengerSideDamageAnswers, + glassToReplace, + isRepair + ); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.passenger, + expectedList + ]); + }); + + test('All relevant sections are shown in order in multiglass scenario', async () => { + // Arrange + const driverSideDamageAnswers = cmsContent.DriverDamagesWidget.Answers; + const passengerSideDamageAnswers = cmsContent.PassengerDamagesWidget.Answers; + const glassToReplace = [ + testConstants.glassItems.windshield, + testConstants.glassItems.rear, + testConstants.glassItems.driverItems.vent, + testConstants.glassItems.driverItems.front, + testConstants.glassItems.driverItems.back, + testConstants.glassItems.passengerItems.quarter, + testConstants.glassItems.passengerItems.back, + testConstants.glassItems.passengerItems.side + ]; + const isRepair = false; + const expectedDriverDamageList = ''; + const expectedPassengerDamageList = ''; + + // Act + const result = getDamageDisplayContent( + locationAnswers, + driverSideDamageAnswers, + passengerSideDamageAnswers, + glassToReplace, + isRepair + ); + + // Assert + expect(result).toStrictEqual([ + testConstants.cmsConstants.locationCopy.windshield, + testConstants.cmsConstants.locationCopy.driver, + expectedDriverDamageList, + testConstants.cmsConstants.locationCopy.passenger, + expectedPassengerDamageList, + testConstants.cmsConstants.locationCopy.rear + ]); + }); + }); +}); diff --git a/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.spec.js b/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.spec.js index 4a0a2fa7..5e369a72 100644 --- a/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.spec.js +++ b/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.spec.js @@ -2,113 +2,16 @@ import damageReview from '@/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.vue'; // Supporting Files +import { createTestingPinia } from '@pinia/testing'; +import { useMainStore } from '@/store'; import { shallowMount } from '@vue/test-utils'; import { getMountOptions } from '@/helpers/unit-test-helper.js'; -import damageLocationsSelected from '@/constants/damage-locations-selected'; +import { getDamageDisplayContent } from '@/helpers/damage-review-content-generator.js'; -const testConstants = { - cmsConstants: { - widgetNames: { - header: 'DamageReviewWidget', - locations: 'DamageLocationsWidget', - driverDamages: 'DriverDamagesWidget', - passengerDamages: 'PassengerDamagesWidget' - }, - header: { - text: 'Damage' - }, - damageLocations: { - windshield: damageLocationsSelected.WINDSHIELD, - driver: damageLocationsSelected.DRIVER, - passenger: damageLocationsSelected.PASSENGER, - rear: damageLocationsSelected.REAR - }, - damageNames: { - vent: damageLocationsSelected.VENT, - front: damageLocationsSelected.FRONT, - back: damageLocationsSelected.BACK, - quarter: damageLocationsSelected.QUARTER, - side: damageLocationsSelected.SIDEDOOR - }, - locationCopy: { - windshield: 'Windshield copy', - driver: 'Driver copy', - passenger: 'Passenger copy', - rear: 'Rear copy' - }, - damageCopy: { - vent: 'Vent copy', - front: 'Front copy', - back: 'Back copy', - quarter: 'Quarter copy', - side: 'Side copy' - }, - imageId: '00000000-0000-0000-0000-000000000000' - }, - makeBulletedList: (items) => { - let list = ''; - - return list; - }, - glassItems: { - windshield: { - glassLocation: damageLocationsSelected.WINDSHIELD, - glassName: damageLocationsSelected.SINGLE - }, - rear: { - glassLocation: damageLocationsSelected.REAR, - glassName: damageLocationsSelected.STATIONARY - }, - passengerItems: { - vent: { - glassLocation: damageLocationsSelected.PASSENGER, - glassName: damageLocationsSelected.VENT - }, - front: { - glassLocation: damageLocationsSelected.PASSENGER, - glassName: damageLocationsSelected.FRONT - }, - back: { - glassLocation: damageLocationsSelected.PASSENGER, - glassName: damageLocationsSelected.BACK - }, - quarter: { - glassLocation: damageLocationsSelected.PASSENGER, - glassName: damageLocationsSelected.QUARTER - }, - side: { - glassLocation: damageLocationsSelected.PASSENGER, - glassName: damageLocationsSelected.SIDEDOOR - } - }, - driverItems: { - vent: { - glassLocation: damageLocationsSelected.DRIVER, - glassName: damageLocationsSelected.VENT - }, - front: { - glassLocation: damageLocationsSelected.DRIVER, - glassName: damageLocationsSelected.FRONT - }, - back: { - glassLocation: damageLocationsSelected.DRIVER, - glassName: damageLocationsSelected.BACK - }, - quarter: { - glassLocation: damageLocationsSelected.DRIVER, - glassName: damageLocationsSelected.QUARTER - }, - side: { - glassLocation: damageLocationsSelected.DRIVER, - glassName: damageLocationsSelected.SIDEDOOR - } - } - } -}; +jest.mock('@/helpers/damage-review-content-generator.js', () => ({ + getDamageDisplayContent: jest.fn(), + getLocationAnswer: jest.fn() +})); let cmsContent; const mockMixin = { @@ -117,15 +20,22 @@ const mockMixin = { } }; -function getShallowMountedComponent(initialData = {}, methodToRun = () => {}) { +function getShallowMountedComponent(mainInitialState = {}, initialData = {}, methodToRun = () => {}) { const mountOptions = getMountOptions({ router: { navigate: jest.fn() } }); + const testingPinia = createTestingPinia({ + initialState: { + main: mainInitialState + } + }); + useMainStore(testingPinia); methodToRun(); + mountOptions.global.plugins = [testingPinia]; mountOptions.data = () => ( initialData ); @@ -137,300 +47,32 @@ function getShallowMountedComponent(initialData = {}, methodToRun = () => {}) { } beforeEach(() => { - cmsContent = { - DamageReviewWidget: { - Text: testConstants.cmsConstants.header.text - }, - DamageLocationsWidget: { - Answers: [ - { - Name: testConstants.cmsConstants.damageLocations.windshield, - Text: testConstants.cmsConstants.locationCopy.windshield, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageLocations.driver, - Text: testConstants.cmsConstants.locationCopy.driver, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: testConstants.cmsConstants.widgetNames.driverDamages - }, - { - Name: testConstants.cmsConstants.damageLocations.passenger, - Text: testConstants.cmsConstants.locationCopy.passenger, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: testConstants.cmsConstants.widgetNames.passengerDamages - }, - { - Name: testConstants.cmsConstants.damageLocations.rear, - Text: testConstants.cmsConstants.locationCopy.rear, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - } - ] - }, - DriverDamagesWidget: { - Answers: [ - { - Name: testConstants.cmsConstants.damageNames.vent, - Text: testConstants.cmsConstants.damageCopy.vent, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.front, - Text: testConstants.cmsConstants.damageCopy.front, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.back, - Text: testConstants.cmsConstants.damageCopy.back, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.quarter, - Text: testConstants.cmsConstants.damageCopy.quarter, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.side, - Text: testConstants.cmsConstants.damageCopy.side, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - } - ] - }, - PassengerDamagesWidget: { - Answers: [ - { - Name: testConstants.cmsConstants.damageNames.vent, - Text: testConstants.cmsConstants.damageCopy.vent, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.front, - Text: testConstants.cmsConstants.damageCopy.front, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.back, - Text: testConstants.cmsConstants.damageCopy.back, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.quarter, - Text: testConstants.cmsConstants.damageCopy.quarter, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - }, - { - Name: testConstants.cmsConstants.damageNames.side, - Text: testConstants.cmsConstants.damageCopy.side, - SubText: '', - ImageId: testConstants.cmsConstants.imageId, - Image: '', - SubWidgetName: '' - } - ] - } - }; + getDamageDisplayContent.mockClear(); }); describe('Damage Review Block', () => { - describe('Correctly assembles damage info into a display string', () => { - test('Shows windshield copy when windshield damage is included', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, + test('computed displayContent calls getDamageDisplayContent with expected', () => { + // Arrange + const glassToReplace = ['front-window', 'side-window']; + const isRepair = false; + const initialStore = { + order: { damage: { - isRepair: false, - glassToReplace: [testConstants.glassItems.windshield] + glassToReplace, + isRepair } - }); + } + }; + const expected = ['a', 'v', 'n']; + getDamageDisplayContent.mockImplementationOnce(() => expected); + const { wrapper } = getShallowMountedComponent(initialStore, {}); - // Act - await wrapper.vm.$nextTick(); + // Act + const result = wrapper.vm.displayContent; - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.windshield - ]); - }); - - test('Windshield copy is shown when order is a repair', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, - damage: { - isRepair: true, - numberOfChips: 2, - glassToReplace: [] - } - }); - - // Act - await wrapper.vm.$nextTick(); - - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.windshield - ]); - }); - - test('Rear windshield copy shows when rear damage is present', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, - damage: { - isRepair: false, - numberOfChips: null, - glassToReplace: [testConstants.glassItems.rear] - } - }); - - // Act - await wrapper.vm.$nextTick(); - - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.rear - ]); - }); - - test('Driver side copy and items are shown when driver side damage is present', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, - damage: { - isRepair: false, - numberOfChips: null, - glassToReplace: [ - testConstants.glassItems.driverItems.back, - testConstants.glassItems.driverItems.front - ] - } - }); - - // Act - await wrapper.vm.$nextTick(); - - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.driver, - testConstants.makeBulletedList([ - testConstants.cmsConstants.damageCopy.front, - testConstants.cmsConstants.damageCopy.back - ]) - ]); - }); - - test('Passenger side copy and items are shown when passenger side damage is present', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, - damage: { - isRepair: false, - numberOfChips: null, - glassToReplace: [ - testConstants.glassItems.passengerItems.quarter, - testConstants.glassItems.passengerItems.vent, - testConstants.glassItems.passengerItems.side - ] - } - }); - - // Act - await wrapper.vm.$nextTick(); - - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.passenger, - testConstants.makeBulletedList([ - testConstants.cmsConstants.damageCopy.vent, - testConstants.cmsConstants.damageCopy.quarter, - testConstants.cmsConstants.damageCopy.side - ]) - ]); - }); - - test('All relevant sections are shown in order in multiglass scenario', async () => { - // Arrange - const { wrapper } = getShallowMountedComponent({ - cmsWidgetName: testConstants.cmsConstants.widgetNames.header, - damageLocationsWidgetName: testConstants.cmsConstants.widgetNames.locations, - damage: { - isRepair: false, - numberOfChips: null, - glassToReplace: [ - testConstants.glassItems.windshield, - testConstants.glassItems.rear, - testConstants.glassItems.driverItems.vent, - testConstants.glassItems.driverItems.front, - testConstants.glassItems.driverItems.back, - testConstants.glassItems.passengerItems.quarter, - testConstants.glassItems.passengerItems.back, - testConstants.glassItems.passengerItems.side - ] - } - }); - - // Act - await wrapper.vm.$nextTick(); - - // Assert - expect(wrapper.vm.displayContent).toStrictEqual([ - testConstants.cmsConstants.locationCopy.windshield, - testConstants.cmsConstants.locationCopy.driver, - testConstants.makeBulletedList([ - testConstants.cmsConstants.damageCopy.vent, - testConstants.cmsConstants.damageCopy.front, - testConstants.cmsConstants.damageCopy.back - ]), - testConstants.cmsConstants.locationCopy.passenger, - testConstants.makeBulletedList([ - testConstants.cmsConstants.damageCopy.back, - testConstants.cmsConstants.damageCopy.quarter, - testConstants.cmsConstants.damageCopy.side - ]), - testConstants.cmsConstants.locationCopy.rear - ]); - }); + // Assert + expect(result).toStrictEqual(expected); + expect(getDamageDisplayContent).toBeCalledTimes(1); + expect(getDamageDisplayContent).toBeCalledWith([], [], [], glassToReplace, isRepair); }); }); diff --git a/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.vue b/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.vue index 589862c0..ac93b4bf 100644 --- a/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.vue +++ b/src/layouts/payment-method/review-dropdown/review-sections/damage-review/damage-review.vue @@ -6,6 +6,8 @@ diff --git a/src/store/index.js b/src/store/index.js index 0249b80c..facfa026 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -13,7 +13,6 @@ import damageLocationsSelected from '@/constants/damage-locations-selected'; import coverageStatuses from '@/constants/coverage-statuses'; import { AppointmentTypeStrings, PREMIUM_FEE_PART_TYPE } from '@/constants/schedule-constants'; import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper'; -// import endorsementOptions from '@/constants/endorsement-options'; const storeId = 'main'; @@ -220,6 +219,7 @@ export const useMainStore = defineStore({ lineItems: (state) => state.order.lineItems, payment: (state) => state.order.payment, policy: (state) => state.order.policy, + hasExactlyOneChip: () => state.order.damage.numberOfChips === 1, hasAnyNonWindshieldGlassParts: (s) => !s.order.policy.isDamageGlassOnly, isMobileAppointment: (state) => state.order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE || state.order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP,