diff --git a/src/store/index.js b/src/store/index.js index f03d73f3..0fef6d90 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -172,7 +172,8 @@ export const getDefaultState = () => ({ coverageStatus: coverageStatuses.PENDING, coverageType: coverageType.NONE, isItacOptimized: false, - claimNumber: null + claimNumber: null, + lossReportNumber: null }, payment: { parentAccountNumber: 0, @@ -736,13 +737,31 @@ export const useMainStore = defineStore({ bailoutOnError: false }); this.order.insuranceCoverage.claimNumber = response.data.claimNumber; - if (response.data.isSuccess) { - this.updateCoverageStatus(coverageStatuses.VERIFIED); + + // If register claim at end, then we have loss report number we need to populate. + if ( this.issConfig.callClaimRegistrationAtEnd ) { + if ( response.data.additionalFields?.lossReportNum ) { + this.order.insuranceCoverage.lossReportNumber = response.data.additionalFields.lossReportNum; + } + + if ( response.data.additionalFields?.memberNum ) { + // Update member number if it is returned. + this.order.policy.memberNumber = response.data.additionalFields.memberNum; + } } else { - this.updateCoverageStatus(coverageStatuses.NO_COVERAGE); + // Only set coverage statuses if we are not calling claim registration at end of flow. + if (response.data.isSuccess) { + this.updateCoverageStatus(coverageStatuses.VERIFIED); + } else { + this.updateCoverageStatus(coverageStatuses.NO_COVERAGE); + } } } catch (e) { - this.updateCoverageStatus(coverageStatuses.NO_COVERAGE); + // Only set coverage statuses if we are not calling claim registration at end of flow. + if ( !this.issConfig.callClaimRegistrationAtEnd ) { + this.updateCoverageStatus(coverageStatuses.NO_COVERAGE); + } + this.order.insuranceCoverage.claimNumber = null; } }, @@ -1609,7 +1628,8 @@ export const useMainStore = defineStore({ insuranceCoverage: { coverageType: insuranceCoverage.coverageType, coverageStatus: insuranceCoverage.coverageStatus, - claimNumber: insuranceCoverage.claimNumber + claimNumber: insuranceCoverage.claimNumber, + lossReportNumber: insuranceCoverage.lossReportNumber }, payment: { parentAccountNumber: this.order.parentAccountNumber ?? this.issConfig.parentAccountNumber, @@ -2039,6 +2059,7 @@ export const useMainStore = defineStore({ this.order.insuranceCoverage.coverageType = coverageType.NONE; this.order.insuranceCoverage.isItacOptimized = false; this.order.insuranceCoverage.claimNumber = null; + this.order.insuranceCoverage.lossReportNumber = null; }, updateGlassFees(feeData) { if (feeData == null) { diff --git a/src/store/store.spec.js b/src/store/store.spec.js index a443e9b9..b78dd9f7 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -570,6 +570,69 @@ describe('Store', () => { }) })); }); + + it('updates lossReportNumber and memberNumber when claim registration runs at end of flow', async () => { + // Arrange + const returnedLossReportNumber = getRandomString(8, 8); + const returnedMemberNumber = getRandomString(8, 8); + store.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; + store.order.policy.memberNumber = null; + + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({ + data: { + claimNumber: 'CLM123', + isSuccess: false, + additionalFields: { + lossReportNum: returnedLossReportNumber, + memberNum: returnedMemberNumber + } + } + })); + + // Act + await store.registerClaim(); + + // Assert + expect(store.order.insuranceCoverage.claimNumber).toBe('CLM123'); + expect(store.order.insuranceCoverage.lossReportNumber).toBe(returnedLossReportNumber); + expect(store.order.policy.memberNumber).toBe(returnedMemberNumber); + expect(store.order.insuranceCoverage.coverageStatus).toBe(coverageStatuses.PENDING); + }); + + it('does not update coverage status on failed response when claim registration runs at end of flow', async () => { + // Arrange + store.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; + + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({ + data: { + claimNumber: null, + isSuccess: false, + additionalFields: {} + } + })); + + // Act + await store.registerClaim(); + + // Assert + expect(store.order.insuranceCoverage.coverageStatus).toBe(coverageStatuses.PENDING); + }); + + it('does not update coverage status in catch when claim registration runs at end of flow', async () => { + // Arrange + store.issConfig.callClaimRegistrationAtEnd = true; + store.order.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(new Error('register claim error'))); + + // Act + await store.registerClaim(); + + // Assert + expect(store.order.insuranceCoverage.coverageStatus).toBe(coverageStatuses.PENDING); + expect(store.order.insuranceCoverage.claimNumber).toBeNull(); + }); }); describe('updateContactInfo method', () => {