From 2f816c8ec1aca974cbd84a224882267bca9741ab Mon Sep 17 00:00:00 2001 From: Josh Dassinger Date: Wed, 16 Oct 2024 15:06:55 -0500 Subject: [PATCH] SSR-1483 Don't show cart if we fail to settle PIA Implement create WO for PIA Implement settledTenderAmount & lockToken --- src/helpers/order-helper.js | 10 ++++---- .../order-confirmation.spec.js | 23 +++++++++++++++++++ .../order-confirmation/order-confirmation.vue | 14 +++++++++++ src/layouts/payment-method/payment-method.vue | 12 ++++++++-- src/store/index.js | 10 +++++++- 5 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index 58d8bc38..3190e7f7 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -4,8 +4,8 @@ import submitType from '@/constants/submit-type'; /* Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing */ -async function saveSessionHelper(store, { submitAfterSave }) { - const savedSessionInfo = await store.saveSession({ submitAfterSave }); +async function saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }) { + const savedSessionInfo = await store.saveSession({ submitAfterSave, createWorkOrderNumberForPIA }); if (savedSessionInfo) { store.setSaveSessionInfo(savedSessionInfo.data); } @@ -16,11 +16,11 @@ async function saveSessionHelper(store, { submitAfterSave }) { This will also set Referral information in the store after saving, and then update the cookie. To force synchronous behavior pass in 'true' for shouldAwaitSaveSessionQueue */ -export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitAfterSave = false }) { +export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitAfterSave = false, createWorkOrderNumberForPIA = false }) { const store = useMainStore(); const saveSessionPromise = store.applicationUser.saveSessionPromise - ? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave })) - : saveSessionHelper(store, { submitAfterSave }); + ? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA })) + : saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }); store.setSaveSessionPromise(saveSessionPromise); diff --git a/src/layouts/order-confirmation/order-confirmation.spec.js b/src/layouts/order-confirmation/order-confirmation.spec.js index e0f651c6..dfb9a45a 100644 --- a/src/layouts/order-confirmation/order-confirmation.spec.js +++ b/src/layouts/order-confirmation/order-confirmation.spec.js @@ -920,6 +920,29 @@ describe('OrderConfirmation.vue', () => { // Act const testValue = wrapper.vm.isDropOffAppointment; + // Assert + expect(testValue).toBe(expected); + }); + }); + describe('showCart', () => { + test.each([ + [true, true, 100], + [true, false, 100], + [false, true, 0], + [false, true, null] + ])('showCart is %p when is PIA is %p and settledTenderAmount is %p', (expected, isPia, settledTenderAmount) => { + // Arrange + const order = deepClone(sessionStorage); + order.payment.isPayInAdvance = isPia; + order.settledTenderAmount = settledTenderAmount; + const mockStoreActions = () => { + useMainStore().getSubmittedOrder = jest.fn().mockImplementation(() => order); + }; + const { wrapper } = getMountedComponent({}, {}, mockStoreActions); + + // Act + const testValue = wrapper.vm.showCart; + // Assert expect(testValue).toBe(expected); }); diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index e33a5e08..4f649c88 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -56,6 +56,7 @@
0) { + return true; + } + + // settleTenderAmount always shows 0 via localhost or dev. + // Temporarily set return true to see cart in localhost or dev environment + return false; } }, mounted() { diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 832e2d9a..cd16dac3 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -89,9 +89,10 @@ import issPageValues from '@/router/router-constants/issPage-values'; import bailoutMessage from '@/constants/bailoutMessage'; import { AppointmentTypeStrings } from '@/constants/schedule-constants'; import VehicleBanner from '@/iss-components/vehicle-banner/vehicle-banner.vue'; -import { submitWorkOrder } from '@/helpers/order-helper.js'; +import { saveSession, submitWorkOrder } from '@/helpers/order-helper.js'; import { experimentSettings } from '@/constants/experiments'; import submitType from '@/constants/submit-type'; +import routerParams from '@/router/router-constants/router-params'; export default { name: 'payment-method', @@ -284,9 +285,16 @@ export default { console.error(`error: response from submit work order:${error.message}`); } } else { + await saveSession({ + createWorkOrderNumberForPIA: true, + shouldAwaitSaveSessionQueue: true + }); + this.$router.navigate( this.navigationScenarios.CLICKED_PAY_NOW, - this.$route + this.$route, + {}, + { [routerParams.SKIP_SAVE_SESSION]: true } ); } } diff --git a/src/store/index.js b/src/store/index.js index 826062f2..1d831100 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -214,6 +214,8 @@ export const getDefaultState = () => ({ eon: null, workOrderId: null, workOrderNumber: null, + settledTenderAmount: null, + lockToken: null, customerPortalLoginToken: null, originalDeductible: null, currentDeductible: null, @@ -1330,12 +1332,14 @@ export const useMainStore = defineStore({ this.order.referralCorrelationId = response.referralCorrelationId; this.order.eon = response.eon; this.order.workOrderNumber = response.workOrderNumber; + this.order.settledTenderAmount = response.settledTenderAmount; + this.order.lockToken = response.lockToken; this.order.customerPortalLoginToken = response.customerPortalLoginToken; this.applicationUser.savedSessionId = response.savedSessionId; this.applicationUser.crmCustomerId = response.crmCustomerId.toString(); }, - saveSession({ submitAfterSave }) { + saveSession({ submitAfterSave, createWorkOrderNumberForPIA }) { const { vehicle, damage, policy, customer, contactInfo, payment, lineItems, serviceLocation, schedule, insuranceCoverage } = this.order; @@ -1475,6 +1479,8 @@ export const useMainStore = defineStore({ referralSequenceNumber: this.order.referralSequenceNumber, eon: this.order.eon, submitToMainframe: !!this.order.referralNumber, + createWorkOrderNumberForPIA: createWorkOrderNumberForPIA, + lockToken: this.order.lockToken, loadedFromDupeCheck, submitAfterSave: !!submitAfterSave }; @@ -1989,6 +1995,8 @@ export const useMainStore = defineStore({ this.order.referralSequenceNumber = null; this.order.workOrderId = null; this.order.workOrderNumber = null; + this.order.settledTenderAmount = null; + this.order.lockToken = null; this.order.eon = null; this.order.originalDeductible = null; this.order.currentDeductible = null;