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 = '