DigitalConsumer.ISS/src/helpers/damage-review-content-generator.spec.js
2024-01-22 16:14:49 -05:00

411 lines
15 KiB
JavaScript

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 = '<ul>'
+ `<li>${testConstants.cmsConstants.damageCopy.front}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.back}</li>`
+ '</ul>';
// 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 = '<ul>'
+ `<li>${testConstants.cmsConstants.damageCopy.vent}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.quarter}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.side}</li>`
+ '</ul>';
// 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 = '<ul>'
+ `<li>${testConstants.cmsConstants.damageCopy.vent}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.front}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.back}</li>`
+ '</ul>';
const expectedPassengerDamageList = '<ul>'
+ `<li>${testConstants.cmsConstants.damageCopy.back}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.quarter}</li>`
+ `<li>${testConstants.cmsConstants.damageCopy.side}</li>`
+ '</ul>';
// 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
]);
});
});
});