diff --git a/src/helpers/querystring-helper.js b/src/helpers/querystring-helper.js index 59c1579c..0327071d 100644 --- a/src/helpers/querystring-helper.js +++ b/src/helpers/querystring-helper.js @@ -28,3 +28,12 @@ export function getLineItemQueryString(lineItems, parameterName) { `${parameterName}[${index}].partNumber=${lineItem.partNumber}`).join('&'); return queryString.length !== 0 ? `&${queryString}` : ''; } + +export function getTaxLineItemQueryString(lineItems, parameterName) { + const queryString = getLineItemsFlattened(lineItems).map((lineItem, index) => + `${parameterName}[${index}].partNumber=${lineItem.partNumber}` + + `&${parameterName}[${index}].laborAmount=${lineItem.laborAmount}` + + `&${parameterName}[${index}].sellingPrice=${lineItem.sellingPrice}` + + `&${parameterName}[${index}].kitPrice=${lineItem.kitPrice}`).join('&'); + return queryString.length !== 0 ? `&${queryString}` : ''; +} diff --git a/src/helpers/querystring-helper.spec.js b/src/helpers/querystring-helper.spec.js index 1c7378be..4af685d9 100644 --- a/src/helpers/querystring-helper.spec.js +++ b/src/helpers/querystring-helper.spec.js @@ -1,4 +1,8 @@ -import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString } from '@/helpers/querystring-helper'; +import { + buildQueryStringParameterFromArrayOfComplexObjects, + getLineItemQueryString, + getTaxLineItemQueryString +} from '@/helpers/querystring-helper'; describe('querystring-helper', () => { describe('buildQueryStringParameterFromArrayOfComplexObjects', () => { @@ -44,4 +48,34 @@ describe('querystring-helper', () => { expect(result).toBe('¶m[0].partNumber=a¶m[1].partNumber=b¶m[2].partNumber=c¶m[3].partNumber=d¶m[4].partNumber=e'); }); }); + + describe('getTaxLineItemQueryString', () => { + it('returns empty query string from empty line items', () => { + // Arrange + const lineItems = []; + + // Act + const result = getTaxLineItemQueryString(lineItems, 'param'); + + // Assert + expect(result).toBe(''); + }); + + it('returns a query string from line items', () => { + // Arrange + const a = { partNumber: 'a', laborAmount: 0, sellingPrice: 10, kitPrice: 10 }; + const c = { partNumber: 'c', laborAmount: 5, sellingPrice: 5, kitPrice: 5 }; + const b = { partNumber: 'b', laborAmount: 10, sellingPrice: 10, kitPrice: 0, childParts: [c] }; + const d = { partNumber: 'd', laborAmount: 10, sellingPrice: 10, kitPrice: 10 }; + + const lineItems = [a, b, d]; + + // Act + const result = getTaxLineItemQueryString(lineItems, 'param'); + + // Assert + // eslint-disable-next-line max-len + expect(result).toBe('¶m[0].partNumber=a¶m[0].laborAmount=0¶m[0].sellingPrice=10¶m[0].kitPrice=10¶m[1].partNumber=b¶m[1].laborAmount=10¶m[1].sellingPrice=10¶m[1].kitPrice=0¶m[2].partNumber=c¶m[2].laborAmount=5¶m[2].sellingPrice=5¶m[2].kitPrice=5¶m[3].partNumber=d¶m[3].laborAmount=10¶m[3].sellingPrice=10¶m[3].kitPrice=10'); + }); + }); }); diff --git a/src/store/index.js b/src/store/index.js index e0d248cd..2bcee233 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -26,7 +26,7 @@ import bailoutMessage from '@/constants/bailoutMessage'; import bailoutCode from '@/constants/bailoutCode'; import partNumberStrings from '@/constants/part-number-strings'; import { getLineItemsFlattened } from '@/helpers/line-items-helper'; -import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString } from '@/helpers/querystring-helper'; +import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString, getTaxLineItemQueryString } from '@/helpers/querystring-helper'; const storeId = 'main'; @@ -2021,7 +2021,7 @@ export const useMainStore = defineStore({ const serviceLocationState = serviceLocation.state; const serviceLocationZipCode = serviceLocation.zipCode; - const lineItemsQueryString = getLineItemQueryString(pricedLineItems, 'lineItems'); + const lineItemsQueryString = getTaxLineItemQueryString(pricedLineItems, 'lineItems'); let queryString = ''; if (appointmentType === AppointmentTypeStrings.MOBILE