411 lines
15 KiB
JavaScript
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
|
|
]);
|
|
});
|
|
});
|
|
});
|