diff --git a/src/helpers/line-items-helper.js b/src/helpers/line-items-helper.js index e5c02530..6c2038dc 100644 --- a/src/helpers/line-items-helper.js +++ b/src/helpers/line-items-helper.js @@ -8,12 +8,14 @@ export function findLineItemIndex(lineItems, partNumber, startIndex = 0) { } // replaces partNumber, which is initially NAGS format, with the safelite part number -export function mapSafelitePartNumberToPartNumber(lineItems) { - return lineItems?.map(({ safelitePartNumber, childParts, ...rest }) => ({ +export function mapSafelitePartNumberToPartNumberIfExists(lineItems) { + const x = lineItems?.map(({ childParts, ...rest }) => ({ ...rest, - partNumber: safelitePartNumber, + partNumber: rest.safelitePartNumber || rest.partNumber, childParts: childParts?.map((part) => ({ - partNumber: part.safelitePartNumber + partNumber: part.safelitePartNumber || part.partNumber })) ?? [] })) ?? []; + console.log(JSON.stringify(x)); + return x; } diff --git a/src/helpers/line-items-helper.spec.js b/src/helpers/line-items-helper.spec.js index 6b756cdf..e92aa331 100644 --- a/src/helpers/line-items-helper.spec.js +++ b/src/helpers/line-items-helper.spec.js @@ -1,13 +1,13 @@ -import { getLineItemsFlattened, mapSafelitePartNumberToPartNumber } from '@/helpers/line-items-helper'; +import { getLineItemsFlattened, mapSafelitePartNumberToPartNumberIfExists } from '@/helpers/line-items-helper'; describe('getLineItemsFlattened', () => { - describe('mapSafelitePartNumberToPartNumber', () => { + describe('mapSafelitePartNumberToPartNumberIfExists', () => { test.each([null, undefined, []])('returns empty list when %p passed', (lineItems) => { // Arrange const expected = []; // Act - const result = mapSafelitePartNumberToPartNumber(lineItems); + const result = mapSafelitePartNumberToPartNumberIfExists(lineItems); // Assert expect(result).toMatchObject(expected); @@ -29,7 +29,7 @@ describe('getLineItemsFlattened', () => { ]; // Act - const result = mapSafelitePartNumberToPartNumber(lineItems); + const result = mapSafelitePartNumberToPartNumberIfExists(lineItems); // Assert expect(result).toMatchObject(expected); @@ -83,7 +83,45 @@ describe('getLineItemsFlattened', () => { ]; // Act - const result = mapSafelitePartNumberToPartNumber(lineItems); + const result = mapSafelitePartNumberToPartNumberIfExists(lineItems); + + // Assert + expect(result).toMatchObject(expected); + }); + test.only('returns partNumber when no safelitePartNumber', () => { + // Arrange + const lineItems = [ + { + apple: 'a', + partNumber: 111, + childParts: [ + { + partNumber: 333 + }, + { + partNumber: 555, + safelitePartNumber: 666 + } + ] + } + ]; + const expected = [ + { + apple: 'a', + partNumber: 111, + childParts: [ + { + partNumber: 333 + }, + { + partNumber: 666 + } + ] + } + ]; + + // Act + const result = mapSafelitePartNumberToPartNumberIfExists(lineItems); // Assert expect(result).toMatchObject(expected); @@ -97,7 +135,7 @@ describe('getLineItemsFlattened', () => { const result = getLineItemsFlattened(lineItems); // Assert - expect(result).not.null; + expect(result).not.toBeNull(); expect(result).toStrictEqual([]); }); @@ -108,7 +146,7 @@ describe('getLineItemsFlattened', () => { const result = getLineItemsFlattened(lineItems); // Assert - expect(result).not.null; + expect(result).not.toBeNull(); expect(result).toStrictEqual([]); }); @@ -119,7 +157,7 @@ describe('getLineItemsFlattened', () => { const result = getLineItemsFlattened(lineItems); // Assert - expect(result).not.null; + expect(result).not.toBeNull(); expect(result).toStrictEqual(lineItems); }); @@ -136,7 +174,7 @@ describe('getLineItemsFlattened', () => { const result = getLineItemsFlattened(lineItems); // Assert - expect(result).not.null; + expect(result).not.toBeNull(); expect(result).toStrictEqual([a, b, c, d, e]); }); }); diff --git a/src/store/index.js b/src/store/index.js index 30163cba..27940ccf 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -24,7 +24,7 @@ import partTypeStrings from '@/constants/part-type-strings'; import bailoutMessage from '@/constants/bailoutMessage'; import bailoutCode from '@/constants/bailoutCode'; import partNumberStrings from '@/constants/part-number-strings'; -import { findLineItemIndex, getLineItemsFlattened, mapSafelitePartNumberToPartNumber } from '@/helpers/line-items-helper'; +import { findLineItemIndex, getLineItemsFlattened, mapSafelitePartNumberToPartNumberIfExists } from '@/helpers/line-items-helper'; import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString, getTaxLineItemQueryString } from '@/helpers/querystring-helper'; import coverageType from '@/constants/coverage-type'; import { getExperimentSettingValue, getFeatureTogglesQueryString } from '@/helpers/experiment-helper'; @@ -1082,7 +1082,7 @@ export const useMainStore = defineStore({ // NOTE: The endpoint requires that safelite part numbers be used!! async getITACPriceOrderItems(availableLineItems) { const { policy, vehicle, contactInfo, serviceLocation, insuranceCoverage } = this.order; - const lineItemsUsingSafelitePartNumber = mapSafelitePartNumberToPartNumber(availableLineItems); + const lineItemsUsingSafelitePartNumber = mapSafelitePartNumberToPartNumberIfExists(availableLineItems); const response = await globalMethods .callHttpClient({ method: endpoints.GetITACPriceOrderItems.method,