From 4597a3d97179b90812fc46adacc1fb2673a35750 Mon Sep 17 00:00:00 2001
From: Josh Dassinger
Date: Mon, 16 Sep 2024 10:19:31 -0500
Subject: [PATCH 1/9] SSR-1460 Implement the combined-quote endpoint
---
src/constants/endpoints.js | 4 ++
src/helpers/service-location-helper.js | 2 +-
.../coverage-statement/coverage-statement.vue | 8 ++--
src/layouts/payment-method/payment-method.vue | 44 ++---------------
.../review-dropdown/review-dropdown.vue | 15 ------
.../service-package-review.spec.js | 21 ++++----
.../service-package-review.vue | 27 +----------
src/layouts/schedule-page/schedule-page.vue | 2 +-
.../service-packages/service-packages.vue | 33 ++++---------
src/store/index.js | 48 ++++++++++++++++++-
10 files changed, 76 insertions(+), 128 deletions(-)
diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js
index 6562047f..f6ac757a 100644
--- a/src/constants/endpoints.js
+++ b/src/constants/endpoints.js
@@ -80,6 +80,10 @@ const endpoints = Object.freeze({
url: `${PRICE_BASE_URL}/order-items-with-itac-pricing`,
method: 'POST'
},
+ GetCombinedQuote: {
+ url: `${PRICE_BASE_URL}/combined-quote`,
+ method: 'POST'
+ },
GetProviders: {
url: `${LOCATION_BASE_URL}/providers`,
method: 'GET'
diff --git a/src/helpers/service-location-helper.js b/src/helpers/service-location-helper.js
index f21cd763..9f869601 100644
--- a/src/helpers/service-location-helper.js
+++ b/src/helpers/service-location-helper.js
@@ -28,7 +28,7 @@ export async function getPricedMobileFeePart(serviceZipCode) {
// Get the Mobile Fee Part Price
const pricingResults = await useMainStore()
- .getInsurancePriceOrderItems([mobileFeePart.data]);
+ .getCombinedQuote([mobileFeePart.data]);
return Promise.resolve(pricingResults[0]);
}
diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue
index 755bba21..cdd0c5c0 100644
--- a/src/layouts/coverage-statement/coverage-statement.vue
+++ b/src/layouts/coverage-statement/coverage-statement.vue
@@ -394,12 +394,10 @@ export default {
showIssLoadingModal(false);
},
async getPricedParts() {
- const clonedGlassParts = useMainStore().lineItems.glassParts
- ? JSON.parse(JSON.stringify(useMainStore().lineItems.glassParts))
- : [];
+ const { glassParts, supportingItems } = this.mainStore.order.lineItems;
const availableLineItems = [
- ...(this.mainStore.lineItems.supportingItems ?? []),
- ...(clonedGlassParts ?? [])
+ ...(glassParts ?? []),
+ ...(supportingItems ?? [])
];
// We only call the ITAC pricing endpoint if we are not repair or we are NoComp
diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue
index 09a6dad6..718a8e47 100644
--- a/src/layouts/payment-method/payment-method.vue
+++ b/src/layouts/payment-method/payment-method.vue
@@ -111,26 +111,11 @@ export default {
async beforeRouteEnter(to, from, next) {
// Call APIs
const cmsContentPromise = fetchCmsContentForPage(to.query.issPage);
- const reviewDropdownPromise = reviewDropdown.methods.loadInitialData();
- const wipersPromise = useMainStore().getWipers();
- const rainDefensePromise = useMainStore().getRainDefense();
const promiseResultMap = [
{
resultKey: 'cmsContent',
promise: cmsContentPromise
- },
- {
- resultKey: 'reviewDropdownData',
- promise: reviewDropdownPromise
- },
- {
- resultKey: 'wipers',
- promise: wipersPromise
- },
- {
- resultKey: 'rainDefense',
- promise: rainDefensePromise
}
];
@@ -138,28 +123,10 @@ export default {
await useMainStore().setPriceAndSalesTaxForOrderLineItems();
- const unpricedVaps = [...resultMap.wipers, resultMap.rainDefense];
-
- let hasBailedOut = false;
- const pricedVaps = await useMainStore()
- .getInsurancePriceOrderItems(unpricedVaps)
- .catch((err) => {
- useMainStore().setBailout(bailoutMessage.pricingResponseError(
- unpricedVaps.map((li) => li.partNumber),
- { code: err.code, message: err.message, data: err.data }
- ));
- hasBailedOut = true;
- next(`/?issPage=${issPageValues.BAILOUT_PAGE}`);
- });
-
- if (!hasBailedOut) {
- next((vm) => {
- vm.setCmsContent(resultMap.cmsContent);
- vm.updateFooterButtonText(vm.customCallToActionButtonCopy);
- vm.$refs.reviewDropdown.initializeComponent(resultMap.reviewDropdownData);
- vm.storeAvailableVaps(pricedVaps ?? []);
- });
- }
+ next((vm) => {
+ vm.setCmsContent(resultMap.cmsContent);
+ vm.updateFooterButtonText(vm.customCallToActionButtonCopy);
+ });
},
data() {
return {
@@ -321,9 +288,6 @@ export default {
this.$route
);
}
- },
- storeAvailableVaps(vaps) {
- useMainStore().order.availableVaps = vaps;
}
}
};
diff --git a/src/layouts/payment-method/review-dropdown/review-dropdown.vue b/src/layouts/payment-method/review-dropdown/review-dropdown.vue
index 5e836e82..da2c09cb 100644
--- a/src/layouts/payment-method/review-dropdown/review-dropdown.vue
+++ b/src/layouts/payment-method/review-dropdown/review-dropdown.vue
@@ -96,21 +96,6 @@ export default {
}
},
methods: {
- async loadInitialData() {
- const servicePackageInitialDataPromise = servicePackageReview.methods.loadInitialData();
-
- const promiseResultMap = [
- {
- resultKey: 'servicePackageData',
- promise: servicePackageInitialDataPromise
- }
- ];
-
- return settleAllPromises(promiseResultMap);
- },
- initializeComponent(apiResponses) {
- this.$refs.servicePackageReview.initializeComponent(apiResponses.servicePackageData);
- },
toggleIsExpanded() {
this.isExpanded = !this.isExpanded;
}
diff --git a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.spec.js b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.spec.js
index 500c9bac..322e019a 100644
--- a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.spec.js
+++ b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.spec.js
@@ -8,6 +8,7 @@ import { getMountOptions } from '@/helpers/unit-test-helper.js';
import packageNames from '@/constants/package-names';
import partTypeStrings from '@/constants/part-type-strings';
import damageLocationsSelected from '@/constants/damage-locations-selected';
+import { useMainStore } from '@/store';
const testConstants = {
cmsPropValues: {
@@ -717,11 +718,8 @@ const mockMixin = {
}
};
-function initializeWithDefault(wrapper) {
- wrapper.vm.initializeComponent({
- wipers: [testConstants.parts.frontWiperPart],
- rainDefense: testConstants.parts.rainDefensePart
- });
+function initializeWithDefault() {
+ useMainStore().order.availableVaps = [testConstants.parts.frontWiperPart, testConstants.parts.rainDefensePart];
}
function getShallowMountedComponent(initialData = {}, methodToRun = () => {}) {
@@ -853,7 +851,7 @@ describe('Service Package Review Block', () => {
...props
});
- initializeWithDefault(wrapper);
+ initializeWithDefault();
// Act
await wrapper.vm.$nextTick();
@@ -883,7 +881,7 @@ describe('Service Package Review Block', () => {
...props
});
- initializeWithDefault(wrapper);
+ initializeWithDefault();
// Act
await wrapper.vm.$nextTick();
@@ -909,7 +907,7 @@ describe('Service Package Review Block', () => {
// Act
await wrapper.vm.$nextTick();
- initializeWithDefault(wrapper);
+ initializeWithDefault();
// Assert
const includesFrontWiperCopy = wrapper.vm.displayContent.includes(testConstants.vapsCopy.frontWiperCopy);
@@ -926,7 +924,7 @@ describe('Service Package Review Block', () => {
...props
});
- initializeWithDefault(wrapper);
+ initializeWithDefault();
// Act
await wrapper.vm.$nextTick();
@@ -952,10 +950,7 @@ describe('Service Package Review Block', () => {
...props
});
- wrapper.vm.initializeComponent({
- wipers: scenario.params.wiperResponse,
- rainDefense: scenario.params.rainDefenseResponse
- });
+ useMainStore().order.availableVaps = [scenario.params.rainDefenseResponse, ...scenario.params.wiperResponse];
// Act
await wrapper.vm.$nextTick();
diff --git a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
index bbad207d..735e0a27 100644
--- a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
+++ b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
@@ -92,34 +92,9 @@ export default {
return [
...(this.lineItems?.glassParts ?? []),
...(this.lineItems?.supportingItems ?? []),
- ...this.availableVaps
+ ...(useMainStore().order.availableVaps ?? [])
];
}
- },
- methods: {
- // TODO maybe move to shared location "loadAvailableVaps"
- loadInitialData() {
- const wipersPromise = useMainStore().getWipers();
- const rainDefensePromise = useMainStore().getRainDefense();
-
- const promiseResultMap = [
- {
- resultKey: 'wipers',
- promise: wipersPromise
- },
- {
- resultKey: 'rainDefense',
- promise: rainDefensePromise
- }
- ];
-
- return settleAllPromises(promiseResultMap);
- },
- initializeComponent(apiResponses) {
- const vapsFromApi = [...apiResponses.wipers, apiResponses.rainDefense];
-
- this.availableVaps = vapsFromApi;
- }
}
};
diff --git a/src/layouts/schedule-page/schedule-page.vue b/src/layouts/schedule-page/schedule-page.vue
index e562552d..d824cb66 100644
--- a/src/layouts/schedule-page/schedule-page.vue
+++ b/src/layouts/schedule-page/schedule-page.vue
@@ -262,7 +262,7 @@ export default {
const premiumFeeWithPricePromise = premiumFeePromise.then((result) => {
if (result.data) {
- return useMainStore().getInsurancePriceOrderItems(result.data);
+ return useMainStore().getCombinedQuote(result.data);
}
return result.data;
});
diff --git a/src/layouts/service-packages/service-packages.vue b/src/layouts/service-packages/service-packages.vue
index 658b5c37..ec43ae28 100644
--- a/src/layouts/service-packages/service-packages.vue
+++ b/src/layouts/service-packages/service-packages.vue
@@ -96,7 +96,6 @@ export default {
const wipersPromise = await store.getWipers();
const rainDefensePromise = await store.getRainDefense();
- const supportingItemsPromise = await store.getSupportingItems();
const promiseResultMap = [
{
resultKey: 'cmsContent',
@@ -109,27 +108,20 @@ export default {
{
resultKey: 'rainDefense',
promise: rainDefensePromise
- },
- {
- resultKey: 'supportingItems',
- promise: supportingItemsPromise
}
];
const resultMap = await settleAllPromises(promiseResultMap);
- const clonedGlassParts = store.order.lineItems.glassParts
- ? JSON.parse(JSON.stringify(store.order.lineItems.glassParts))
- : [];
+ const { feeItems } = store.order.lineItems;
+
const availableLineItems = [
resultMap.rainDefense,
- ...resultMap.supportingItems,
...resultMap.wipers,
- ...clonedGlassParts
+ ...feeItems
];
let hasBailedOut = false;
- const pricingResults = await store
- .getInsurancePriceOrderItems(availableLineItems)
+ await store.getCombinedQuote(availableLineItems)
.catch((err) => {
useMainStore().setBailout(bailoutMessage.pricingResponseError(
availableLineItems.map((li) => li.partNumber),
@@ -143,7 +135,7 @@ export default {
if (!hasBailedOut) {
next((vm) => {
vm.setCmsContent(resultMap.cmsContent);
- vm.setData(clonedGlassParts, resultMap.supportingItems, pricingResults);
+ vm.setData([resultMap.rainDefense, ...resultMap.wipers]);
});
}
},
@@ -151,8 +143,6 @@ export default {
return {
selectedVaps: [],
availableLineItems: [],
- supportingItems: [],
- pricedGlassParts: [],
loadingText: [
'Finding shops near you',
'Looking for dates',
@@ -183,27 +173,20 @@ export default {
&& store.order.lineItems.glassParts.length > 0))
);
},
- setData(clonedGlassParts, supportingItems, pricingResults) {
- this.pricedGlassParts = clonedGlassParts;
- this.supportingItems = supportingItems;
- this.availableLineItems = pricingResults;
+ setData(pricedVaps) {
+ this.availableLineItems = pricedVaps;
+ useMainStore().order.availableVaps = pricedVaps;
},
vapsItemsSelectedAction(vapsItemsSelected) {
this.selectedVaps = vapsItemsSelected;
},
forwardButtonAction() {
const parts = {
- glassParts: this.pricedGlassParts,
- supportingItems: this.supportingItems,
vaps: this.selectedVaps
};
if (!allGlassPartsAndItemsHavePrices(parts)) {
window.console.error('One or more items have no price assigned!');
}
- if (this.pricedGlassParts.length > 0) {
- store.updateGlassParts(this.pricedGlassParts);
- }
- store.updateSupportingItems(this.supportingItems);
store.updateVaps(this.selectedVaps);
this.$router.navigate(
diff --git a/src/store/index.js b/src/store/index.js
index 2fec48a4..a3bc35a0 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1158,6 +1158,52 @@ export const useMainStore = defineStore({
return availableLineItems;
},
+ async getCombinedQuote(availableLineItems) {
+ const { vehicle, serviceLocation, policy, eon, referralNumber, referralDate, referralSequenceNumber, lineItems } = this.order;
+
+ const payload = {
+ ParentAccountNumber: this.order.parentAccountNumber,
+ BillToAccountNumber: this.billToAccountNumber,
+ ProviderNumber: this.providerNumber,
+ CarId: vehicle.carId,
+ Make: vehicle.make,
+ Model: vehicle.model,
+ Year: vehicle.year,
+ EON: eon,
+ ZipCode: policy.policyZipCode,
+ State: policy.damageState,
+ ReferralNumber: referralNumber,
+ ReferralDate: referralDate,
+ ReferralSequenceNumber: referralSequenceNumber,
+ ServiceZipCode: serviceLocation.zipCode,
+ IsReplacement: !this.isRepair,
+ ServerData: lineItems.serverData,
+ LineItems: getLineItemsFlattened(availableLineItems)
+ };
+
+ const response = await globalMethods
+ .callHttpClient({
+ method: endpoints.GetCombinedQuote.method,
+ endpoint: endpoints.GetCombinedQuote.url,
+ payload
+ })
+ .catch((error) => {
+ console.error(error);
+ return [];
+ });
+
+ const { lineItems: pricedLinedItems, serverData } = response.data;
+
+ if (serverData) {
+ this.order.lineItems.serverData = serverData;
+ }
+
+ if (pricedLinedItems) {
+ return addPricesToLineItems(availableLineItems, pricedLinedItems);
+ }
+ return availableLineItems;
+ },
+
getMobileFeePart() {
const damageType = this.damage.isRepair ? 'Repair' : 'Replace';
@@ -1795,8 +1841,6 @@ export const useMainStore = defineStore({
];
}
- await this.getInsurancePriceOrderItems(lineItemsToPrice);
-
if (lineItemsToTax && lineItemsToTax.length > 0) {
await this.getTaxOrderItems(lineItemsToTax);
}
From e5aa5afe2c942875b0581fdaa6a283f23ea24033 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 17 Sep 2024 21:37:31 +0000
Subject: [PATCH 2/9] Bump send and express
Bumps [send](https://github.com/pillarjs/send) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.
Updates `send` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/pillarjs/send/releases)
- [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md)
- [Commits](https://github.com/pillarjs/send/compare/0.18.0...0.19.0)
Updates `express` from 4.19.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0)
---
updated-dependencies:
- dependency-name: send
dependency-type: indirect
- dependency-name: express
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
---
package-lock.json | 252 +++++++++++++++++++++++++++++++++-------------
1 file changed, 182 insertions(+), 70 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 1ab4fe41..583491f9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -52,7 +52,7 @@
"sass-loader": "^12.0.0",
"vite": "^4.4.6",
"vitest": "^0.33.0",
- "volar-service-vetur": "latest"
+ "volar-service-vetur": "*"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -5867,9 +5867,9 @@
"dev": true
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -5880,7 +5880,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -6077,13 +6077,19 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -7365,6 +7371,23 @@
"clone": "^1.0.2"
}
},
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -7720,9 +7743,9 @@
}
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"dev": true,
"engines": {
"node": ">= 0.8"
@@ -7816,6 +7839,27 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-get-iterator": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
@@ -8723,37 +8767,37 @@
}
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
+ "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
"dev": true,
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.6.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -8930,13 +8974,13 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -9125,10 +9169,13 @@
}
},
"node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/function.prototype.name": {
"version": "1.1.5",
@@ -9185,14 +9232,19 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
- "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -9378,12 +9430,24 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -9422,6 +9486,18 @@
"integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
"dev": true
},
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -13973,10 +14049,13 @@
}
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-source-map": {
"version": "1.1.0",
@@ -14473,10 +14552,13 @@
}
},
"node_modules/object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -14897,9 +14979,9 @@
"dev": true
},
"node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
"dev": true
},
"node_modules/path-type": {
@@ -15788,12 +15870,12 @@
}
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"dev": true,
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -16391,9 +16473,9 @@
}
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
@@ -16429,6 +16511,15 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -16523,20 +16614,37 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dev": true,
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -16592,14 +16700,18 @@
"dev": true
},
"node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
From ab77c185e2b52245912b6118868ed68e5cd89e72 Mon Sep 17 00:00:00 2001
From: Bill Richardson
Date: Thu, 19 Sep 2024 13:33:39 -0400
Subject: [PATCH 3/9] Update to convert p tags to li tags
wrapped inside an ol
---
src/helpers/text-helper.js | 11 +++++++++++
src/helpers/text-helper.spec.js | 16 +++++++++++++++-
.../coverage-statement.spec.js | 5 +++++
.../coverage-statement/coverage-statement.vue | 17 +++++++++++++++--
4 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/src/helpers/text-helper.js b/src/helpers/text-helper.js
index 51170f7d..220b1d3f 100644
--- a/src/helpers/text-helper.js
+++ b/src/helpers/text-helper.js
@@ -10,6 +10,17 @@ export function stripRteStyle(stringWithStyleTag) {
return stringWithStyleTag.replace(regexExp, '');
}
+/**
+ * @function createOrderedListFromStringOfParagraphs
+ * @summary
+ * Returns string with tags changed to
and wrapped in an
+ * @param {string} stringOfParagraphs single string with 1 to N tags
+ * @returns {string} converted string wrapped in an
+ */
+export function createOrderedListFromStringOfParagraphs(stringOfParagraphs) {
+ return `${stringOfParagraphs.replaceAll('', '
- ').replaceAll('
', '')}`;
+}
+
/**
* @function toTitleCase
* @summary Returns title cased string version of 'text'
diff --git a/src/helpers/text-helper.spec.js b/src/helpers/text-helper.spec.js
index cfc61dcc..fcb7a88d 100644
--- a/src/helpers/text-helper.spec.js
+++ b/src/helpers/text-helper.spec.js
@@ -1,4 +1,10 @@
-import { toTitleCase, toDisplayPhoneNumber, formatAddress, formatAmountInDollars } from '@/helpers/text-helper.js';
+import {
+ toTitleCase,
+ toDisplayPhoneNumber,
+ formatAddress,
+ formatAmountInDollars,
+ createOrderedListFromStringOfParagraphs
+} from '@/helpers/text-helper.js';
describe('text-helper', () => {
test.each([
@@ -68,4 +74,12 @@ describe('text-helper', () => {
])('formatAmountInDollars(%s) should return %s', (amount, expected) => {
expect(formatAmountInDollars(amount)).toBe(expected);
});
+ test('returns orderedlist from paragraph string', () => {
+ // Arrange
+ const testData = 'String one
String two
';
+ const expected = '- String one
- String two
';
+
+ // Assert
+ expect(createOrderedListFromStringOfParagraphs(testData)).toBe(expected);
+ });
});
diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js
index 2d074474..3ec6a0be 100644
--- a/src/layouts/coverage-statement/coverage-statement.spec.js
+++ b/src/layouts/coverage-statement/coverage-statement.spec.js
@@ -27,6 +27,11 @@ jest.mock('@/helpers/cms-content-helper', () => ({
processIfStatements: jest.fn()
}));
+jest.mock('@/helpers/text-helper', () => ({
+ createOrderedListFromStringOfParagraphs: jest.fn(),
+ formatAmountInDollars: jest.fn()
+}));
+
const SAFELITE_PROVIDER = 'Safelite';
const CANCEL_CLAIM_REF_NAME = 'CancelClaimModal';
diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue
index cdd0c5c0..136198a2 100644
--- a/src/layouts/coverage-statement/coverage-statement.vue
+++ b/src/layouts/coverage-statement/coverage-statement.vue
@@ -127,7 +127,7 @@ import baseFormMixin from '@/mixins/base-form-mixin.js';
import navigationScenarios from '@/router/router-constants/navigation-scenarios.js';
import bailoutMessage from '@/constants/bailoutMessage';
import widgetFields from '@/constants/cms-widget-fields.js';
-import { formatAmountInDollars } from '@/helpers/text-helper.js';
+import { formatAmountInDollars, createOrderedListFromStringOfParagraphs } from '@/helpers/text-helper.js';
import showIssLoadingModal from '@/helpers/loading-modal-helper';
import { getPriceOfLineItems } from '@/helpers/price-calculator';
import coverageStatuses from '@/constants/coverage-statuses';
@@ -275,10 +275,12 @@ export default {
);
},
nextStepsBody() {
- return this.getTextFromCmsWithCustomIfStatements(
+ const cmsText = this.getTextFromCmsWithCustomIfStatements(
this.widget.nextStep,
widgetFields.CONTENT_GROUP_WIDGET.BODY_TEXT
)?.replaceAll('{custom:damage}', this.damageText);
+
+ return createOrderedListFromStringOfParagraphs(cmsText);
},
damageText() {
const damageString = getDamageString();
@@ -504,6 +506,17 @@ export default {
.deductible-text {
line-height: 1.5rem;
}
+ :deep ol {
+ padding: 0;
+ padding-left: 1.125rem;
+ padding-right: 1.125rem;
+ line-height: 1.5rem;
+ font-size: .875rem;
+
+ li {
+ margin-bottom: .5rem;
+ }
+ }
:deep p {
line-height: 1.5rem;
font-size: 0.875rem;
From 813898e8e56bbed6c8e73660bda8e624394b04de Mon Sep 17 00:00:00 2001
From: Josh Dassinger
Date: Thu, 19 Sep 2024 13:40:03 -0500
Subject: [PATCH 4/9] SSR-1485 Fix Non PIA navigating to payment-page
---
src/layouts/payment-method/payment-method.vue | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue
index 718a8e47..832e2d9a 100644
--- a/src/layouts/payment-method/payment-method.vue
+++ b/src/layouts/payment-method/payment-method.vue
@@ -254,7 +254,8 @@ export default {
const { payInAdvanceType } = useMainStore().order.payment;
const isPayInAdvance =
useMainStore().order.payment.isPayInAdvance
- && !!payInAdvanceType;
+ && !!payInAdvanceType
+ && !this.isPayInAdvanceDisabled;
return isPayInAdvance
? payInAdvanceType
From 1caed930f5c10d828971cab4d5be0f8b7b46b121 Mon Sep 17 00:00:00 2001
From: Josh Dassinger
Date: Thu, 19 Sep 2024 14:04:27 -0500
Subject: [PATCH 5/9] SSR-1503 Fix unverified flow taxing invalid items
---
src/store/index.js | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/src/store/index.js b/src/store/index.js
index a3bc35a0..d6eafcb8 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1821,18 +1821,14 @@ export const useMainStore = defineStore({
},
async setPriceAndSalesTaxForOrderLineItems() {
- const lineItemsToPrice = [
- ...(this.order.lineItems.supportingItems ?? []),
- ...(this.order.lineItems.glassParts ?? []),
- ...(this.order.lineItems.otherParts ?? []),
- ...(this.order.lineItems.vaps ?? []),
- ...(this.order.lineItems.feeItems ?? [])
- ];
-
- let lineItemsToTax = [];
- if (!this.isVerified || !this.isDeductible) {
+ let lineItemsToTax;
+ if (this.isVerified && !this.isDeductible) {
lineItemsToTax = [
- ...lineItemsToPrice
+ ...(this.order.lineItems.supportingItems ?? []),
+ ...(this.order.lineItems.glassParts ?? []),
+ ...(this.order.lineItems.otherParts ?? []),
+ ...(this.order.lineItems.vaps ?? []),
+ ...(this.order.lineItems.feeItems ?? [])
];
} else {
lineItemsToTax = [
From 871226d2ad2e257c15da7af7c0582e6b6a1bf40e Mon Sep 17 00:00:00 2001
From: Josh Dassinger
Date: Thu, 19 Sep 2024 14:27:42 -0500
Subject: [PATCH 6/9] SSR-1485 Update Unit tests for changes
---
.../payment-method/payment-method.spec.js | 89 ++++++++++++++++++-
1 file changed, 88 insertions(+), 1 deletion(-)
diff --git a/src/layouts/payment-method/payment-method.spec.js b/src/layouts/payment-method/payment-method.spec.js
index b255afab..3e60fce2 100644
--- a/src/layouts/payment-method/payment-method.spec.js
+++ b/src/layouts/payment-method/payment-method.spec.js
@@ -93,7 +93,12 @@ describe('payment-method.vue', () => {
payment: {
isPayInAdvance: true,
payInAdvanceType: payInAdvanceMethod
- }
+ },
+ insuranceCoverage: {
+ coverageStatus: coverageStatuses.VERIFIED,
+ coverageType: coverageType.Deductible
+ },
+ currentDeductible: 1000
}
};
const wrapper = setupMocks({}, store);
@@ -101,6 +106,88 @@ describe('payment-method.vue', () => {
// Act
const paymethod = wrapper.vm.getPaymentMethodFromStore();
+ // Assert
+ expect(paymethod).toBe(payInAdvanceMethod);
+ });
+ test('getting PAY_AT_TIME_OF_SERVICE when deductible is 0', async () => {
+ // Arrange
+ const payInAdvanceMethod = paymentMethods.PAY_AT_TIME_OF_SERVICE;
+ const store = {
+ order: {
+ payment: {
+ isPayInAdvance: true,
+ payInAdvanceType: payInAdvanceMethod
+ },
+ insuranceCoverage: {
+ coverageStatus: coverageStatuses.VERIFIED,
+ coverageType: coverageType.Deductible
+ },
+ currentDeductible: 0
+ }
+ };
+ const wrapper = setupMocks({}, store);
+
+ // Act
+ const paymethod = wrapper.vm.getPaymentMethodFromStore();
+
+ // Assert
+ expect(paymethod).toBe(payInAdvanceMethod);
+ });
+ test('getting PAY_AT_TIME_OF_SERVICE when Unverified', async () => {
+ // Arrange
+ const payInAdvanceMethod = paymentMethods.PAY_AT_TIME_OF_SERVICE;
+ const store = {
+ order: {
+ payment: {
+ isPayInAdvance: true,
+ payInAdvanceType: payInAdvanceMethod
+ },
+ insuranceCoverage: {
+ coverageStatus: coverageStatuses.PENDING,
+ coverageType: coverageType.Deductible
+ },
+ currentDeductible: 1000
+ }
+ };
+ const wrapper = setupMocks({}, store);
+
+ // Act
+ const paymethod = wrapper.vm.getPaymentMethodFromStore();
+
+ // Assert
+ expect(paymethod).toBe(payInAdvanceMethod);
+ });
+ test('getting PAY_AT_TIME_OF_SERVICE when PIA Experiment disabled', async () => {
+ // Arrange
+ const payInAdvanceMethod = paymentMethods.PAY_AT_TIME_OF_SERVICE;
+ const mixin = {
+ methods: {
+ getSettingValue: jest.fn((settingName) => {
+ if (settingName === experimentSettings.ISS_DISPLAY_PAY_IN_ADVANCE) {
+ return 'false';
+ }
+ return 'false';
+ })
+ }
+ };
+ const store = {
+ order: {
+ payment: {
+ isPayInAdvance: true,
+ payInAdvanceType: payInAdvanceMethod
+ },
+ insuranceCoverage: {
+ coverageStatus: coverageStatuses.VERIFIED,
+ coverageType: coverageType.Deductible
+ },
+ currentDeductible: 1000
+ }
+ };
+ const wrapper = setupMocks({}, store, mixin);
+
+ // Act
+ const paymethod = wrapper.vm.getPaymentMethodFromStore();
+
// Assert
expect(paymethod).toBe(payInAdvanceMethod);
});
From f554ad4d47dd39e9dd34c488e598fd1533a97c30 Mon Sep 17 00:00:00 2001
From: Bill Richardson
Date: Fri, 20 Sep 2024 15:34:32 -0400
Subject: [PATCH 7/9] Remove empty paragraph tag
---
src/helpers/text-helper.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/helpers/text-helper.js b/src/helpers/text-helper.js
index 220b1d3f..6ff5ad47 100644
--- a/src/helpers/text-helper.js
+++ b/src/helpers/text-helper.js
@@ -18,7 +18,7 @@ export function stripRteStyle(stringWithStyleTag) {
* @returns {string} converted string wrapped in an
*/
export function createOrderedListFromStringOfParagraphs(stringOfParagraphs) {
- return `${stringOfParagraphs.replaceAll('', '
- ').replaceAll('', '
')}
`;
+ return `${stringOfParagraphs.replaceAll('', '').replaceAll('', '
- ').replaceAll('', '
')}
`;
}
/**
From 2e687c52456cdb7913dc0aa8cde5f02cf7a49cd6 Mon Sep 17 00:00:00 2001
From: Bill Richardson
Date: Fri, 20 Sep 2024 15:39:02 -0400
Subject: [PATCH 8/9] add test for empty p tag
---
src/helpers/text-helper.spec.js | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/src/helpers/text-helper.spec.js b/src/helpers/text-helper.spec.js
index fcb7a88d..689d5c59 100644
--- a/src/helpers/text-helper.spec.js
+++ b/src/helpers/text-helper.spec.js
@@ -74,12 +74,23 @@ describe('text-helper', () => {
])('formatAmountInDollars(%s) should return %s', (amount, expected) => {
expect(formatAmountInDollars(amount)).toBe(expected);
});
- test('returns orderedlist from paragraph string', () => {
- // Arrange
- const testData = 'String one
String two
';
- const expected = '- String one
- String two
';
+ describe('createOrderedListFromStringOfParagraphs', () => {
+ test('returns orderedlist from paragraph string', () => {
+ // Arrange
+ const testData = 'String one
String two
';
+ const expected = '- String one
- String two
';
- // Assert
- expect(createOrderedListFromStringOfParagraphs(testData)).toBe(expected);
+ // Assert
+ expect(createOrderedListFromStringOfParagraphs(testData)).toBe(expected);
+ });
+
+ test('returns orderedlist from paragraph string with empty tag', () => {
+ // Arrange
+ const testData = '
String one
String two
';
+ const expected = '- String one
- String two
';
+
+ // Assert
+ expect(createOrderedListFromStringOfParagraphs(testData)).toBe(expected);
+ });
});
});
From 5202dcbfa8c3927672373afd28ad6e4dd30321e0 Mon Sep 17 00:00:00 2001
From: Katie Kroell
Date: Fri, 20 Sep 2024 15:58:03 -0400
Subject: [PATCH 9/9] force full address entry when clicking out of street
address field
---
src/iss-components/address-questions/address-questions.vue | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/iss-components/address-questions/address-questions.vue b/src/iss-components/address-questions/address-questions.vue
index 5ef456e0..57b9d0dc 100644
--- a/src/iss-components/address-questions/address-questions.vue
+++ b/src/iss-components/address-questions/address-questions.vue
@@ -12,7 +12,8 @@
hasIcon
disableAutoFill
validationRules="street-address-required"
- @keydown.enter.prevent />
+ @keydown.enter.prevent
+ @focusout="fillInAddress()" />