From c18b6bf8b94bfeadbea2abc0e323da662d83d68f Mon Sep 17 00:00:00 2001 From: Michaela Brydon Date: Fri, 23 Aug 2024 13:41:08 -0400 Subject: [PATCH] adding tests --- src/helpers/line-items-helper.js | 11 +++ src/helpers/line-items-helper.spec.js | 119 +++++++++++++++++--------- src/store/index.js | 17 +--- 3 files changed, 91 insertions(+), 56 deletions(-) diff --git a/src/helpers/line-items-helper.js b/src/helpers/line-items-helper.js index 9ad4bca3..e5c02530 100644 --- a/src/helpers/line-items-helper.js +++ b/src/helpers/line-items-helper.js @@ -6,3 +6,14 @@ export function getLineItemsFlattened(lineItems) { export function findLineItemIndex(lineItems, partNumber, startIndex = 0) { return lineItems.findIndex((li, index) => index >= startIndex && li.partNumber === partNumber); } + +// replaces partNumber, which is initially NAGS format, with the safelite part number +export function mapSafelitePartNumberToPartNumber(lineItems) { + return lineItems?.map(({ safelitePartNumber, childParts, ...rest }) => ({ + ...rest, + partNumber: safelitePartNumber, + childParts: childParts?.map((part) => ({ + partNumber: part.safelitePartNumber + })) ?? [] + })) ?? []; +} diff --git a/src/helpers/line-items-helper.spec.js b/src/helpers/line-items-helper.spec.js index c191d852..6b756cdf 100644 --- a/src/helpers/line-items-helper.spec.js +++ b/src/helpers/line-items-helper.spec.js @@ -1,56 +1,93 @@ -import { getLineItemsFlattened } from '@/helpers/line-items-helper'; +import { getLineItemsFlattened, mapSafelitePartNumberToPartNumber } from '@/helpers/line-items-helper'; describe('getLineItemsFlattened', () => { - function mapLineItemsForGetITACPrice(lineItems) { - console.log(`before: ${JSON.stringify(lineItems)}`); - const x = lineItems.map(({ safelitePartNumber, childParts, ...rest }) => ({ - ...rest, - partNumber: safelitePartNumber, - childParts: childParts.map((part) => ({ - partNumber: part.safelitePartNumber - })) - })); - console.log(`after: ${JSON.stringify(x)}`); - return x; - } - describe.only('test', () => { - // Arrange - const lineItems = [{ - apple: 'a', - banana: 'b', - partNumber: 111, - safelitePartNumber: 222, - childParts: [ + describe('mapSafelitePartNumberToPartNumber', () => { + test.each([null, undefined, []])('returns empty list when %p passed', (lineItems) => { + // Arrange + const expected = []; + + // Act + const result = mapSafelitePartNumberToPartNumber(lineItems); + + // Assert + expect(result).toMatchObject(expected); + }); + test('assigns partNumber to null when safelitePartNumber DNE', () => { + // Arrange + const lineItems = [ { - partNumber: 333, - safelitePartNumber: 444 + apple: 'a', + partNumber: 111 + } + ]; + const expected = [ + { + apple: 'a', + partNumber: undefined, + childParts: [] + } + ]; + + // Act + const result = mapSafelitePartNumberToPartNumber(lineItems); + + // Assert + expect(result).toMatchObject(expected); + }); + test('assigns partNumber as expected when multiple line items passed', () => { + // Arrange + const lineItems = [ + { + apple: 'a', + banana: 'b', + partNumber: 111, + safelitePartNumber: 222, + childParts: [ + { + partNumber: 333, + safelitePartNumber: 444 + }, + { + partNumber: 555, + safelitePartNumber: 666 + } + ] }, { - partNumber: 555, - safelitePartNumber: 666 + apple: 'apple', + banana: 'banana', + partNumber: 123, + safelitePartNumber: 321 } - ] - }]; - const expected = [{ - apple: 'a', - banana: 'b', - partNumber: 222, - childParts: [ + ]; + const expected = [ { - partNumber: 444 + apple: 'a', + banana: 'b', + partNumber: 222, + childParts: [ + { + partNumber: 444 + }, + { + partNumber: 666 + } + ] }, { - partNumber: 666 + apple: 'apple', + banana: 'banana', + partNumber: 321, + childParts: [] } - ] - }]; + ]; - // Act - const result = mapLineItemsForGetITACPrice(lineItems); - console.log(JSON.stringify(result)); + // Act + const result = mapSafelitePartNumberToPartNumber(lineItems); - // Assert - expect(result).toMatchObject(expected); + // Assert + expect(result).toMatchObject(expected); + }); }); describe('getLineItemsFlattened', () => { it('Returns empty array when null is passed', () => { diff --git a/src/store/index.js b/src/store/index.js index 5036825a..c165d552 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 } from '@/helpers/line-items-helper'; +import { findLineItemIndex, getLineItemsFlattened, mapSafelitePartNumberToPartNumber } 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'; @@ -1076,23 +1076,10 @@ export const useMainStore = defineStore({ return availableLineItems; }, - // TODO move to helper - // replaces partNumber, which is NAGS with the safelite part number - mapLineItemsForGetITACPrice(lineItems) { - const x = lineItems.map(({ safelitePartNumber, childParts, ...rest }) => ({ - ...rest, - partNumber: safelitePartNumber, - childParts: childParts.map((part) => ({ - partNumber: part.safelitePartNumber - })) - })); - return x; - }, - // NOTE: The endpoint requires that safelite part numbers be used!! async getITACPriceOrderItems(availableLineItems) { const { policy, vehicle, contactInfo, serviceLocation, insuranceCoverage } = this.order; - const lineItemsUsingSafelitePartNumber = this.mapLineItemsForGetITACPrice(availableLineItems); + const lineItemsUsingSafelitePartNumber = mapSafelitePartNumberToPartNumber(availableLineItems); const response = await globalMethods .callHttpClient({ method: endpoints.GetITACPriceOrderItems.method,