1019 lines
32 KiB
JavaScript
1019 lines
32 KiB
JavaScript
import * as servicePackageHelper from "@/helpers/service-package-helper";
|
|
import { partTypeStrings } from "@/constants/part-type-strings";
|
|
import { damageLocationsSelected as glassLocations } from "@/constants/damage-locations-selected";
|
|
import { packageNames } from "@/constants/package-names";
|
|
|
|
describe("service-package-helper.js", () => {
|
|
describe("containsLineItemWithPartType", () => {
|
|
it("Returns true when type is present", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const partType = partTypeStrings.RAIN_REPEL;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsLineItemWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Returns true when type is present multiple times", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const partType = partTypeStrings.FRONT_WIPER;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsLineItemWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Returns false when type is not present", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
];
|
|
const partType = partTypeStrings.RAIN_REPEL;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsLineItemWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Returns false with empty array", () => {
|
|
// Arrange
|
|
const lineItems = [];
|
|
const partType = partTypeStrings.RAIN_REPEL;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsLineItemWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("findLineItemsWithPartType", () => {
|
|
it("Returns an item of the same type when present", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const partType = partTypeStrings.RAIN_REPEL;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.findLineItemsWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(1);
|
|
expect(result[0].partType).toEqual(partType);
|
|
});
|
|
|
|
it("Returns an empty array when no matching items are present", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
passengerFrontWiperLineItem,
|
|
driverFrontWiperLineItem,
|
|
];
|
|
const partType = partTypeStrings.RAIN_REPEL;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.findLineItemsWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(0);
|
|
});
|
|
|
|
it("Returns all matching items when multiple are present", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const partType = partTypeStrings.FRONT_WIPER;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.findLineItemsWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(2);
|
|
expect(result[0].partType).toEqual(partType);
|
|
expect(result[1].partType).toEqual(partType);
|
|
expect(result[0].partNumber).not.toEqual(result[1].partNumber);
|
|
});
|
|
|
|
it("Is not case sensitive", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const partType = "rAin REpeL";
|
|
|
|
// Act
|
|
const result = servicePackageHelper.findLineItemsWithPartType(partType, lineItems);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(1);
|
|
expect(result[0].partType).toEqual(partTypeStrings.RAIN_REPEL);
|
|
});
|
|
});
|
|
|
|
describe("getVapsLineItems", () => {
|
|
it("Returns line items matching given types", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
|
|
const vapTypes = [partTypeStrings.RAIN_REPEL];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getVapsLineItems(lineItems, vapTypes);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(1);
|
|
expect(result[0].partType).toEqual(partTypeStrings.RAIN_REPEL);
|
|
});
|
|
|
|
it("Returns all matching line items, when multiple match a single type", () => {
|
|
// Arrange
|
|
const lineItems = [
|
|
recalLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
|
|
const vapTypes = [partTypeStrings.FRONT_WIPER];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getVapsLineItems(lineItems, vapTypes);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(2);
|
|
expect(result[0].partType).toEqual(partTypeStrings.FRONT_WIPER);
|
|
expect(result[1].partType).toEqual(partTypeStrings.FRONT_WIPER);
|
|
expect(result[0].partNumber).not.toEqual(result[1].partNumber);
|
|
});
|
|
|
|
it("Returns only line items in the given set", () => {
|
|
// Arrange
|
|
const lineItems = [recalLineItem, passengerFrontWiperLineItem, rainRepelLineItem];
|
|
|
|
const vapTypes = [partTypeStrings.FRONT_WIPER];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getVapsLineItems(lineItems, vapTypes);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(1);
|
|
expect(result[0].partType).toEqual(partTypeStrings.FRONT_WIPER);
|
|
expect(result[0].partNumber).toEqual(passengerFrontWiperLineItem.partNumber);
|
|
});
|
|
|
|
it("Returns all matching items when multiple vap types are requested", () => {
|
|
// Arrange
|
|
const lineItems = [recalLineItem, passengerFrontWiperLineItem, rainRepelLineItem];
|
|
|
|
const vapTypes = [partTypeStrings.FRONT_WIPER, partTypeStrings.RAIN_REPEL];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getVapsLineItems(lineItems, vapTypes);
|
|
|
|
// Assert
|
|
expect(result.length).toBe(2);
|
|
expect(result[0].partType).not.toEqual(result[1].partType);
|
|
});
|
|
});
|
|
|
|
describe("containsGlassPieceWithLocation", () => {
|
|
it("Returns true when location is present", () => {
|
|
// Arrange
|
|
const locations = [frontWindshieldGlass, sideGlass];
|
|
|
|
const locationName = glassLocations.WINDSHIELD;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsGlassPieceWithLocation(
|
|
locationName,
|
|
locations
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Returns true when location is present multiple times", () => {
|
|
// Arrange
|
|
const locations = [frontWindshieldGlass, frontWindshieldGlass, sideGlass];
|
|
|
|
const locationName = glassLocations.WINDSHIELD;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsGlassPieceWithLocation(
|
|
locationName,
|
|
locations
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Returns false when location is not present", () => {
|
|
// Arrange
|
|
const locations = [frontWindshieldGlass, sideGlass];
|
|
|
|
const locationName = glassLocations.REAR;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsGlassPieceWithLocation(
|
|
locationName,
|
|
locations
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Returns false with empty array", () => {
|
|
// Arrange
|
|
const locations = [];
|
|
|
|
const locationName = glassLocations.WINDSHIELD;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsGlassPieceWithLocation(
|
|
locationName,
|
|
locations
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Is not case sensitive", () => {
|
|
// Arrange
|
|
const locations = [frontWindshieldGlass, sideGlass];
|
|
|
|
const locationName = "windShieLd";
|
|
|
|
// Act
|
|
const result = servicePackageHelper.containsGlassPieceWithLocation(
|
|
locationName,
|
|
locations
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("getAvailablePackages", () => {
|
|
it("Returns two packages when there is not a viable tier-two option.", () => {
|
|
// Arrange
|
|
const damageLocations = [sideGlass];
|
|
|
|
const availableLineItems = [rainRepelLineItem];
|
|
|
|
// Act
|
|
const results = servicePackageHelper.getAvailablePackages(
|
|
damageLocations,
|
|
availableLineItems,
|
|
false
|
|
);
|
|
|
|
// Assert
|
|
expect(results.length).toBe(2);
|
|
expect(results[0].packageName).toEqual(packageNames.TIER_ONE);
|
|
expect(results[1].packageName).toEqual(packageNames.TIER_THREE);
|
|
});
|
|
|
|
it("Returns three packages when wipers are available in tier two", () => {
|
|
// Arrange
|
|
const damageLocations = [rearWindshieldGlass];
|
|
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
|
|
// Act
|
|
const results = servicePackageHelper.getAvailablePackages(
|
|
damageLocations,
|
|
availableLineItems,
|
|
true
|
|
);
|
|
|
|
// Assert
|
|
expect(results.length).toBe(3);
|
|
expect(results[0].packageName).toEqual(packageNames.TIER_ONE);
|
|
expect(results[1].packageName).toEqual(packageNames.TIER_TWO);
|
|
expect(results[2].packageName).toEqual(packageNames.TIER_THREE);
|
|
});
|
|
});
|
|
|
|
describe("getPackageContents", () => {
|
|
describe("Match figma cases", () => {
|
|
test.todo("Implement specific cases.");
|
|
});
|
|
});
|
|
|
|
describe("shouldFrontWipersBeAvailable", () => {
|
|
it("Should be available in tier 2 and 3 if windshield damage and available", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultTwo = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultTwo).toBe(true);
|
|
expect(resultThree).toBe(true);
|
|
});
|
|
|
|
it("Should be available in tier 2 and 3 if repair and available", () => {
|
|
// Arrange
|
|
const damageLocations = [];
|
|
const availableLineItems = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
const isRepair = true;
|
|
|
|
// Act
|
|
const resultTwo = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultTwo).toBe(true);
|
|
expect(resultThree).toBe(true);
|
|
});
|
|
|
|
it("Should not be available in tier 2 if not windshield damage or repair", () => {
|
|
// Arrange
|
|
const damageLocations = [];
|
|
const availableLineItems = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Should be available in tier 3 even if not windshield repair or replace", () => {
|
|
// Arrange
|
|
const damageLocations = [];
|
|
const availableLineItems = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Should not be available in any tier if not available.", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [];
|
|
const isRepair = true;
|
|
|
|
// Act
|
|
const resultOne = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_ONE
|
|
);
|
|
const resultTwo = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultOne).toBe(false);
|
|
expect(resultTwo).toBe(false);
|
|
expect(resultThree).toBe(false);
|
|
});
|
|
|
|
it("Should not be available in tier 1", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
const isRepair = true;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldFrontWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_ONE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("shouldRearWipersBeAvailable", () => {
|
|
it("Should be available in tier 2 and 3 if rear damage and available", () => {
|
|
// Arrange
|
|
const damageLocations = [rearWindshieldGlass];
|
|
const availableLineItems = [rearWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultTwo = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultTwo).toBe(true);
|
|
expect(resultThree).toBe(true);
|
|
});
|
|
|
|
it("Should not be available in tier 2 if not rear damage", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [rearWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Should be available in tier 3 without rear damage, if available and no front wipers available", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [rearWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("Should not be available in tier 3 without rear damage if front wipers are available", () => {
|
|
// Arrange
|
|
const damageLocations = [];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("Should not be available in any tier if not available", () => {
|
|
// Arrange
|
|
const damageLocations = [rearWindshieldGlass];
|
|
const availableLineItems = [];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultOne = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_ONE
|
|
);
|
|
const resultTwo = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultOne).toBe(false);
|
|
expect(resultTwo).toBe(false);
|
|
expect(resultThree).toBe(false);
|
|
});
|
|
|
|
it("Should not be available in tier 1", () => {
|
|
// Arrange
|
|
const damageLocations = [rearWindshieldGlass];
|
|
const availableLineItems = [rearWiperLineItem];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldRearWipersBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_ONE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("shouldRainRepelBeAvailable", () => {
|
|
it("Should generally be available only in tier 3", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
rainRepelLineItem,
|
|
driverFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
recalLineItem,
|
|
];
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultOne = servicePackageHelper.shouldRainRepelBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_ONE
|
|
);
|
|
const resultTwo = servicePackageHelper.shouldRainRepelBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_TWO
|
|
);
|
|
const resultThree = servicePackageHelper.shouldRainRepelBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(resultOne).toBe(false);
|
|
expect(resultTwo).toBe(false);
|
|
expect(resultThree).toBe(true);
|
|
});
|
|
|
|
it("Should not be available in a specific scenario", () => {
|
|
// Arrange
|
|
// SPECIFICALLY: no front windshield
|
|
const damageLocations = [rearWindshieldGlass];
|
|
const availableLineItems = [
|
|
rainRepelLineItem,
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
];
|
|
// SPECIFICALLY: not repair
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.shouldRainRepelBeAvailable(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
packageNames.TIER_THREE
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("getLowestTierForType", () => {
|
|
it("Should return the tier for items available in one tier only", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass, rearWindshieldGlass];
|
|
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getLowestTierForType(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
partTypeStrings.RAIN_REPEL
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_THREE);
|
|
});
|
|
|
|
it("Should return tier 2 for items in tier 2 and 3", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass, rearWindshieldGlass];
|
|
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultFront = servicePackageHelper.getLowestTierForType(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
partTypeStrings.FRONT_WIPER
|
|
);
|
|
const resultRear = servicePackageHelper.getLowestTierForType(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
partTypeStrings.REAR_WIPER
|
|
);
|
|
|
|
// Assert
|
|
expect(resultFront).toEqual(packageNames.TIER_TWO);
|
|
expect(resultRear).toEqual(packageNames.TIER_TWO);
|
|
});
|
|
|
|
it("Should return tier 1 for any item not in any tier", () => {
|
|
// Arrange
|
|
const damageLocations = [rearWindshieldGlass];
|
|
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
];
|
|
|
|
const isRepair = false;
|
|
|
|
// Act
|
|
const resultFront = servicePackageHelper.getLowestTierForType(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
partTypeStrings.RAIN_REPEL
|
|
);
|
|
|
|
// Assert
|
|
expect(resultFront).toEqual(packageNames.TIER_ONE);
|
|
});
|
|
});
|
|
|
|
describe("getHighestRequiredTier", () => {
|
|
it("Should return the highest tier among items", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [driverFrontWiperLineItem, passengerFrontWiperLineItem, rainRepelLineItem];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestRequiredTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_THREE);
|
|
});
|
|
|
|
it("Should not return a higher tier than items require", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestRequiredTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_TWO);
|
|
});
|
|
|
|
it("Should return tier 1 for empty set", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestRequiredTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_ONE);
|
|
});
|
|
|
|
it("Should return tier 1 if no vaps are part of tiers", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [recalLineItem];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestRequiredTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_ONE);
|
|
});
|
|
});
|
|
|
|
describe("getHighestSatisfiedTier", () => {
|
|
it("Should return the highest tier if multiple are satisfied", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass, rearWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rainRepelLineItem,
|
|
rearWiperLineItem,
|
|
];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestFullySatisfiedTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_THREE);
|
|
});
|
|
|
|
it("Should only return *satisfied* tier", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [driverFrontWiperLineItem, passengerFrontWiperLineItem];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestFullySatisfiedTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_TWO);
|
|
});
|
|
|
|
it("Should not return a tier if it is only partially satisfied", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [rainRepelLineItem];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestFullySatisfiedTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_ONE);
|
|
});
|
|
|
|
it("Should return tier 1 if no vaps are selected.", () => {
|
|
// Arrange
|
|
const damageLocations = [frontWindshieldGlass];
|
|
const availableLineItems = [
|
|
driverFrontWiperLineItem,
|
|
passengerFrontWiperLineItem,
|
|
rearWiperLineItem,
|
|
rainRepelLineItem,
|
|
];
|
|
const isRepair = false;
|
|
const vaps = [];
|
|
|
|
// Act
|
|
const result = servicePackageHelper.getHighestFullySatisfiedTier(
|
|
damageLocations,
|
|
availableLineItems,
|
|
isRepair,
|
|
vaps
|
|
);
|
|
|
|
// Assert
|
|
expect(result).toEqual(packageNames.TIER_ONE);
|
|
});
|
|
});
|
|
});
|
|
|
|
// Constants
|
|
|
|
const recalLineItem = {
|
|
partNumber: "RECAL STATIC",
|
|
Description: "Recalibration",
|
|
partType: "recalibration",
|
|
Quantity: "1",
|
|
price: 150.0,
|
|
};
|
|
|
|
const driverFrontWiperLineItem = {
|
|
partNumber: "SBB16",
|
|
description: "SAFELITE BEAM BLADE 16",
|
|
partType: "FRONT WIPER",
|
|
price: 32.64,
|
|
};
|
|
|
|
const passengerFrontWiperLineItem = {
|
|
partNumber: "SBB26",
|
|
description: "SAFELITE BEAM BLADE 26",
|
|
partType: "FRONT WIPER",
|
|
price: 53.04,
|
|
};
|
|
|
|
const rearWiperLineItem = {
|
|
partNumber: "SBBR12A",
|
|
description: "SAFELITE REAR BLADE 12A",
|
|
partType: "REAR WIPER",
|
|
price: 24.48,
|
|
};
|
|
|
|
const rainRepelLineItem = {
|
|
partNumber: "RAIN REPEL",
|
|
description: null,
|
|
partType: "RAIN REPEL",
|
|
price: 35.5,
|
|
};
|
|
|
|
const frontWindshieldGlass = {
|
|
glassLocation: "Windshield",
|
|
};
|
|
|
|
const rearWindshieldGlass = {
|
|
glassLocation: "Rear",
|
|
};
|
|
|
|
const sideGlass = {
|
|
glassLocation: "Driver",
|
|
};
|