From 9e6e91b98c43dee2c94fae98e10505a60cdb9df6 Mon Sep 17 00:00:00 2001 From: Johan Gunawan Date: Thu, 25 Apr 2024 09:54:48 -0400 Subject: [PATCH] SSR-1178. Fix WO not created when Pay at the time of service is selected. (#643) --- .../payment-method/payment-method.spec.js | 27 +++++++++++++++++++ src/layouts/payment-method/payment-method.vue | 20 +++++++++++--- src/store/index.js | 2 +- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/layouts/payment-method/payment-method.spec.js b/src/layouts/payment-method/payment-method.spec.js index 9eb78c7a..318161bf 100644 --- a/src/layouts/payment-method/payment-method.spec.js +++ b/src/layouts/payment-method/payment-method.spec.js @@ -10,6 +10,12 @@ import issPageValues from '@/router/router-constants/issPage-values'; import { paymentMethods } from '@/constants/payment-method-constants'; import queryStrings from '@/constants/query-strings'; import { experimentSettings } from '@/constants/experiments'; +import { submitWorkOrder } from '@/helpers/order-helper.js'; + +// Mock so it can be used as an assertion +jest.mock('@/helpers/order-helper.js', () => ({ + submitWorkOrder: jest.fn() +})); function setupMocks({ customMountOptions = {}, queryString }, mainInitialState = {}, customMixin = null) { const mountOptions = getMountOptions({ @@ -251,4 +257,25 @@ describe('payment-method.vue', () => { expect(result).toBeTruthy(); }); }); + + describe('forwardButtonAction', () => { + test('Pay at the time of service is selected, should call saveWorkOrder', async () => { + // Arrange + const store = { + order: { + payment: { + isPayInAdvance: false, + payInAdvanceType: null + } + } + }; + const wrapper = setupMocks({}, store); + + // Act + await wrapper.vm.forwardButtonAction(); + + // Assert + expect(submitWorkOrder).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 368ceb1f..a88967ea 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -88,6 +88,7 @@ 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'; export default { name: 'payment-method', @@ -296,10 +297,21 @@ export default { await useMainStore().savePaymentMethodChoice(this.paymentMethod); if (this.paymentMethod === paymentMethods.PAY_AT_TIME_OF_SERVICE) { - this.$router.navigate( - this.navigationScenarios.CLICKED_FORWARD, - this.$route - ); + try { + await submitWorkOrder({ + pageNameToLog: 'payment-method', + submitAfterSave: true + }); + + useMainStore().resetSubmittedOrder(); + + this.$router.navigate( + this.navigationScenarios.CLICKED_FORWARD, + this.$route + ); + } catch (error) { + console.error(`error: response from submit work order:${error.message}`); + } } else { this.$router.navigate( this.navigationScenarios.CLICKED_PAY_NOW, diff --git a/src/store/index.js b/src/store/index.js index 4b7502f8..c78e3e59 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -421,7 +421,7 @@ export const useMainStore = defineStore({ experimentSettings: (state) => state.applicationUser.experiments .map((x) => x.settings) .reduce((r, c) => Object.assign(r, c), {}) ?? {}, - submittedOrder: () => JSON.parse(window.sessionStorage.getItem('submittedOrder')) + submittedOrder: () => JSON.parse(window.sessionStorage.getItem(webStorageConstants.SUBMITTED_ORDER)) }, actions: {