From 7a7d064f0d7c2dcadb1408ed90482d9b56ad4d9f Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Tue, 21 Jul 2026 17:21:55 -0400 Subject: [PATCH 1/6] INSR-523: Move claim registration after work order submission for USAA - Uses callClaimRegistrationAtEnd config to skip it on coverage-statement and to call it after work order submission --- src/helpers/order-helper.js | 8 ++++++++ src/layouts/coverage-statement/coverage-statement.vue | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index 449f79b6..c37ca5f9 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -42,6 +42,14 @@ export async function submitWorkOrder({ submitType }) { submitAfterSave: true, bailoutOnError: true }); + const shouldRegisterClaimAfterSubmission = store.isPolicyLookupSuccessful + && store.vehicle.policyVehicleId != null + && store.vehicle.policyVehicleId >= 0 + && store.isClaimRegistrationRequired + && store.issConfig.callClaimRegistrationAtEnd; + if (shouldRegisterClaimAfterSubmission) { + await store.registerClaim(); + } await store.createSubmittedOrder(submitType); } diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 6576f745..6de884ba 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -331,7 +331,8 @@ export default { vehicle, isClaimRegistrationRequired, isPolicyLookupSuccessful, - isPendingClaimRegistration + isPendingClaimRegistration, + issConfig } = useMainStore(); const { policyVehicleId } = vehicle; return ( @@ -340,6 +341,7 @@ export default { && policyVehicleId >= 0 && isClaimRegistrationRequired && isPendingClaimRegistration + && !issConfig.callClaimRegistrationAtEnd ); }, isRepair() { @@ -453,7 +455,7 @@ export default { async initializeComponent() { if (this.shouldRegisterClaim) { await this.mainStore.registerClaim(); - } else if (!this.mainStore.isClaimRegistrationRequired && this.mainStore.order.insuranceCoverage.coverageType !== coverageType.NONE) { + } else if ((!this.mainStore.isClaimRegistrationRequired || this.mainStore.issConfig.callClaimRegistrationAtEnd) && this.mainStore.order.insuranceCoverage.coverageType !== coverageType.NONE) { this.mainStore.updateCoverageStatus(coverageStatuses.VERIFIED); } From ec67c21b4088e40ed845d4f33fbc3dc552217c01 Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 22 Jul 2026 09:02:11 -0400 Subject: [PATCH 2/6] INSR-523: Update shouldRegisterClaim unit tests --- .../coverage-statement.spec.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 8bb745d4..508c32bc 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -406,23 +406,26 @@ describe('coverageStatement.vue', () => { }); }); describe.each([ - [false, false, true, true, 0], - [false, true, false, true, 0], - [false, true, true, false, 0], - [false, true, true, true, -1], - [false, true, true, true, null], - [true, true, true, true, 0] + [false, false, true, true, 0, false], + [false, true, false, true, 0, false], + [false, true, true, false, 0, false], + [false, true, true, true, -1, false], + [false, true, true, true, null, false], + [false, true, true, true, 0, true], + [true, true, true, true, 0, false] ])('shouldRegisterClaim', ( expected, isClaimRegistrationRequired, isPolicyLookupSuccessful, isPendingClaimRegistration, - policyVehicleId + policyVehicleId, + callClaimRegistrationAtEnd ) => { test(`returns ${expected} when isClaimRegistrationRequired is ${isClaimRegistrationRequired} ` + `and isPolicyLookupSuccessful is ${isPolicyLookupSuccessful} ` + `and isPendingClaimRegistration is ${isPendingClaimRegistration} ` - + `and policyVehicleId is ${(policyVehicleId == null ? 'NULL' : policyVehicleId)}`, () => { + + `and policyVehicleId is ${(policyVehicleId == null ? 'NULL' : policyVehicleId)}` + + `and callClaimRegistrationAtEnd is ${callClaimRegistrationAtEnd}`, () => { // Arrange const mainInitialState = { order: { @@ -435,7 +438,8 @@ describe('coverageStatement.vue', () => { } }, issConfig: { - isClaimRegistrationRequired + isClaimRegistrationRequired, + callClaimRegistrationAtEnd } }; From 658efb063aa9177054d02f5972b20e315d5a69a8 Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 22 Jul 2026 09:18:14 -0400 Subject: [PATCH 3/6] INSR-523: Fix some unit test issues caught by copilot - Add space to a test name - Add unit tests for change to submitWorkOrder --- src/helpers/order-helper.spec.js | 144 ++++++++++++++++++ .../coverage-statement.spec.js | 2 +- 2 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/helpers/order-helper.spec.js diff --git a/src/helpers/order-helper.spec.js b/src/helpers/order-helper.spec.js new file mode 100644 index 00000000..3b9ac027 --- /dev/null +++ b/src/helpers/order-helper.spec.js @@ -0,0 +1,144 @@ +import { submitWorkOrder } from '@/helpers/order-helper'; + +let mockStore; + +jest.mock('@/store', () => ({ + useMainStore: jest.fn(() => mockStore) +})); + +describe('order-helper.js', () => { + describe('submitWorkOrder', () => { + beforeEach(() => { + mockStore = { + resetSubmittedOrder: jest.fn(), + createSubmittedOrder: jest.fn(() => Promise.resolve()), + registerClaim: jest.fn(() => Promise.resolve()), + isPolicyLookupSuccessful: false, + vehicle: { + policyVehicleId: null + }, + isClaimRegistrationRequired: false, + issConfig: { + callClaimRegistrationAtEnd: false + }, + applicationUser: { + saveSessionPromise: null + }, + order: { + referralNumber: null + }, + saveSession: jest.fn(() => Promise.resolve({ data: { referralNumber: 'REF-001' } })), + setSaveSessionInfo: jest.fn(), + setSaveSessionPromise: jest.fn() + }; + + jest.clearAllMocks(); + }); + + test('Resets order, saves session, and creates submitted order with submit type', async () => { + // Arrange + const submitType = 'SUBMIT'; + + // Act + await submitWorkOrder({ submitType }); + + // Assert + expect(mockStore.resetSubmittedOrder).toHaveBeenCalledTimes(1); + expect(mockStore.saveSession).toHaveBeenCalledTimes(1); + expect(mockStore.saveSession).toHaveBeenCalledWith({ + submitAfterSave: true, + createWorkOrderNumberForPIA: false, + bailoutOnError: true + }); + expect(mockStore.setSaveSessionPromise).toHaveBeenCalledTimes(1); + expect(mockStore.setSaveSessionInfo).toHaveBeenCalledWith({ referralNumber: 'REF-001' }); + expect(mockStore.createSubmittedOrder).toHaveBeenCalledTimes(1); + expect(mockStore.createSubmittedOrder).toHaveBeenCalledWith(submitType); + }); + + test('Registers claim when all claim registration conditions are met', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = true; + mockStore.vehicle.policyVehicleId = 42; + mockStore.isClaimRegistrationRequired = true; + mockStore.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).toHaveBeenCalledTimes(1); + }); + + test('Does not register claim when policy lookup is not successful', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = false; + mockStore.vehicle.policyVehicleId = 42; + mockStore.isClaimRegistrationRequired = true; + mockStore.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).not.toHaveBeenCalled(); + }); + + test('Does not register claim when policyVehicleId is null', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = true; + mockStore.vehicle.policyVehicleId = null; + mockStore.isClaimRegistrationRequired = true; + mockStore.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).not.toHaveBeenCalled(); + }); + + test('Does not register claim when policyVehicleId is negative', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = true; + mockStore.vehicle.policyVehicleId = -1; + mockStore.isClaimRegistrationRequired = true; + mockStore.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).not.toHaveBeenCalled(); + }); + + test('Does not register claim when claim registration is not required', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = true; + mockStore.vehicle.policyVehicleId = 42; + mockStore.isClaimRegistrationRequired = false; + mockStore.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).not.toHaveBeenCalled(); + }); + + test('Does not register claim when claim registration is disabled in config', async () => { + // Arrange + mockStore.isPolicyLookupSuccessful = true; + mockStore.vehicle.policyVehicleId = 42; + mockStore.isClaimRegistrationRequired = true; + mockStore.issConfig.callClaimRegistrationAtEnd = false; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(mockStore.registerClaim).not.toHaveBeenCalled(); + }); + + }); +}); diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 508c32bc..d53e890b 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -424,7 +424,7 @@ describe('coverageStatement.vue', () => { test(`returns ${expected} when isClaimRegistrationRequired is ${isClaimRegistrationRequired} ` + `and isPolicyLookupSuccessful is ${isPolicyLookupSuccessful} ` + `and isPendingClaimRegistration is ${isPendingClaimRegistration} ` - + `and policyVehicleId is ${(policyVehicleId == null ? 'NULL' : policyVehicleId)}` + + `and policyVehicleId is ${(policyVehicleId == null ? 'NULL' : policyVehicleId)} ` + `and callClaimRegistrationAtEnd is ${callClaimRegistrationAtEnd}`, () => { // Arrange const mainInitialState = { From 3c1e87a341178e05e4632070fb953627974f26eb Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 22 Jul 2026 09:37:10 -0400 Subject: [PATCH 4/6] INSR-523: Make sure deferred claim registration is not called for NoComp Also adds a unit test for this behavior --- src/helpers/order-helper.js | 3 +- src/helpers/order-helper.spec.js | 141 +++++++++++++++++-------------- 2 files changed, 79 insertions(+), 65 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index c37ca5f9..a4c9c44b 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -46,7 +46,8 @@ export async function submitWorkOrder({ submitType }) { && store.vehicle.policyVehicleId != null && store.vehicle.policyVehicleId >= 0 && store.isClaimRegistrationRequired - && store.issConfig.callClaimRegistrationAtEnd; + && store.issConfig.callClaimRegistrationAtEnd + && !store.isNoComp; if (shouldRegisterClaimAfterSubmission) { await store.registerClaim(); } diff --git a/src/helpers/order-helper.spec.js b/src/helpers/order-helper.spec.js index 3b9ac027..bbc34165 100644 --- a/src/helpers/order-helper.spec.js +++ b/src/helpers/order-helper.spec.js @@ -1,36 +1,35 @@ +import coverageType from '@/constants/coverage-type'; import { submitWorkOrder } from '@/helpers/order-helper'; +import { createTestingPinia } from '@pinia/testing'; +import { getDefaultState, useMainStore } from '@/store'; -let mockStore; - -jest.mock('@/store', () => ({ - useMainStore: jest.fn(() => mockStore) -})); +let store; describe('order-helper.js', () => { describe('submitWorkOrder', () => { beforeEach(() => { - mockStore = { - resetSubmittedOrder: jest.fn(), - createSubmittedOrder: jest.fn(() => Promise.resolve()), - registerClaim: jest.fn(() => Promise.resolve()), - isPolicyLookupSuccessful: false, - vehicle: { - policyVehicleId: null - }, - isClaimRegistrationRequired: false, - issConfig: { - callClaimRegistrationAtEnd: false - }, - applicationUser: { - saveSessionPromise: null - }, - order: { - referralNumber: null - }, - saveSession: jest.fn(() => Promise.resolve({ data: { referralNumber: 'REF-001' } })), - setSaveSessionInfo: jest.fn(), - setSaveSessionPromise: jest.fn() - }; + const testingPinia = createTestingPinia({ + initialState: { + main: getDefaultState() + } + }); + + store = useMainStore(testingPinia); + + store.resetSubmittedOrder = jest.fn(); + store.createSubmittedOrder = jest.fn(() => Promise.resolve()); + store.registerClaim = jest.fn(() => Promise.resolve()); + store.saveSession = jest.fn(() => Promise.resolve({ data: { referralNumber: 'REF-001' } })); + store.setSaveSessionInfo = jest.fn(); + store.setSaveSessionPromise = jest.fn((promise) => { + store.applicationUser.saveSessionPromise = promise; + }); + + store.order.referralNumber = null; + store.order.vehicle.policyVehicleId = null; + store.order.insuranceCoverage.coverageType = coverageType.NONE; + store.issConfig.isClaimRegistrationRequired = false; + store.issConfig.callClaimRegistrationAtEnd = false; jest.clearAllMocks(); }); @@ -43,101 +42,115 @@ describe('order-helper.js', () => { await submitWorkOrder({ submitType }); // Assert - expect(mockStore.resetSubmittedOrder).toHaveBeenCalledTimes(1); - expect(mockStore.saveSession).toHaveBeenCalledTimes(1); - expect(mockStore.saveSession).toHaveBeenCalledWith({ + expect(store.resetSubmittedOrder).toHaveBeenCalledTimes(1); + expect(store.saveSession).toHaveBeenCalledTimes(1); + expect(store.saveSession).toHaveBeenCalledWith({ submitAfterSave: true, createWorkOrderNumberForPIA: false, bailoutOnError: true }); - expect(mockStore.setSaveSessionPromise).toHaveBeenCalledTimes(1); - expect(mockStore.setSaveSessionInfo).toHaveBeenCalledWith({ referralNumber: 'REF-001' }); - expect(mockStore.createSubmittedOrder).toHaveBeenCalledTimes(1); - expect(mockStore.createSubmittedOrder).toHaveBeenCalledWith(submitType); + expect(store.setSaveSessionPromise).toHaveBeenCalledTimes(1); + expect(store.setSaveSessionInfo).toHaveBeenCalledWith({ referralNumber: 'REF-001' }); + expect(store.createSubmittedOrder).toHaveBeenCalledTimes(1); + expect(store.createSubmittedOrder).toHaveBeenCalledWith(submitType); }); test('Registers claim when all claim registration conditions are met', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = true; - mockStore.vehicle.policyVehicleId = 42; - mockStore.isClaimRegistrationRequired = true; - mockStore.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageType = coverageType.Deductible; + store.order.vehicle.policyVehicleId = 42; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = true; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).toHaveBeenCalledTimes(1); + expect(store.registerClaim).toHaveBeenCalledTimes(1); }); test('Does not register claim when policy lookup is not successful', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = false; - mockStore.vehicle.policyVehicleId = 42; - mockStore.isClaimRegistrationRequired = true; - mockStore.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageType = coverageType.NONE; + store.order.vehicle.policyVehicleId = 42; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = true; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).not.toHaveBeenCalled(); + expect(store.registerClaim).not.toHaveBeenCalled(); }); test('Does not register claim when policyVehicleId is null', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = true; - mockStore.vehicle.policyVehicleId = null; - mockStore.isClaimRegistrationRequired = true; - mockStore.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageType = coverageType.Deductible; + store.order.vehicle.policyVehicleId = null; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = true; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).not.toHaveBeenCalled(); + expect(store.registerClaim).not.toHaveBeenCalled(); }); test('Does not register claim when policyVehicleId is negative', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = true; - mockStore.vehicle.policyVehicleId = -1; - mockStore.isClaimRegistrationRequired = true; - mockStore.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageType = coverageType.Deductible; + store.order.vehicle.policyVehicleId = -1; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = true; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).not.toHaveBeenCalled(); + expect(store.registerClaim).not.toHaveBeenCalled(); }); test('Does not register claim when claim registration is not required', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = true; - mockStore.vehicle.policyVehicleId = 42; - mockStore.isClaimRegistrationRequired = false; - mockStore.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageType = coverageType.Deductible; + store.order.vehicle.policyVehicleId = 42; + store.issConfig.isClaimRegistrationRequired = false; + store.issConfig.callClaimRegistrationAtEnd = true; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).not.toHaveBeenCalled(); + expect(store.registerClaim).not.toHaveBeenCalled(); }); test('Does not register claim when claim registration is disabled in config', async () => { // Arrange - mockStore.isPolicyLookupSuccessful = true; - mockStore.vehicle.policyVehicleId = 42; - mockStore.isClaimRegistrationRequired = true; - mockStore.issConfig.callClaimRegistrationAtEnd = false; + store.order.insuranceCoverage.coverageType = coverageType.Deductible; + store.order.vehicle.policyVehicleId = 42; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = false; // Act await submitWorkOrder({ submitType: 'SUBMIT' }); // Assert - expect(mockStore.registerClaim).not.toHaveBeenCalled(); + expect(store.registerClaim).not.toHaveBeenCalled(); + }); + + test('Does not register claim when coverage type is NoComp', async () => { + // Arrange + store.order.insuranceCoverage.coverageType = coverageType.NO_COMP; + store.order.vehicle.policyVehicleId = 42; + store.issConfig.isClaimRegistrationRequired = true; + store.issConfig.callClaimRegistrationAtEnd = true; + + // Act + await submitWorkOrder({ submitType: 'SUBMIT' }); + + // Assert + expect(store.registerClaim).not.toHaveBeenCalled(); }); }); From 2690bf881a21349b311a29b80da73898c36eec35 Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 22 Jul 2026 11:23:32 -0400 Subject: [PATCH 5/6] INSR-523: Move late claim registration to just before order submission --- src/helpers/order-helper.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index a4c9c44b..d8bee048 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -37,11 +37,6 @@ export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitA export async function submitWorkOrder({ submitType }) { const store = useMainStore(); store.resetSubmittedOrder(); - await saveSession({ - shouldAwaitSaveSessionQueue: true, - submitAfterSave: true, - bailoutOnError: true - }); const shouldRegisterClaimAfterSubmission = store.isPolicyLookupSuccessful && store.vehicle.policyVehicleId != null && store.vehicle.policyVehicleId >= 0 @@ -51,6 +46,11 @@ export async function submitWorkOrder({ submitType }) { if (shouldRegisterClaimAfterSubmission) { await store.registerClaim(); } + await saveSession({ + shouldAwaitSaveSessionQueue: true, + submitAfterSave: true, + bailoutOnError: true + }); await store.createSubmittedOrder(submitType); } From 613456bba31c0bf3a0dc574498883522db7d6b5c Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Thu, 23 Jul 2026 15:27:19 -0400 Subject: [PATCH 6/6] INSR-523: Change variable name to reduce potential confusion --- src/helpers/order-helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index d8bee048..69320718 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -37,13 +37,13 @@ export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitA export async function submitWorkOrder({ submitType }) { const store = useMainStore(); store.resetSubmittedOrder(); - const shouldRegisterClaimAfterSubmission = store.isPolicyLookupSuccessful + const shouldRegisterClaim = store.isPolicyLookupSuccessful && store.vehicle.policyVehicleId != null && store.vehicle.policyVehicleId >= 0 && store.isClaimRegistrationRequired && store.issConfig.callClaimRegistrationAtEnd && !store.isNoComp; - if (shouldRegisterClaimAfterSubmission) { + if (shouldRegisterClaim) { await store.registerClaim(); } await saveSession({