diff --git a/src/store/index.js b/src/store/index.js index e0d32e74..623d7963 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -118,7 +118,8 @@ export const getDefaultState = () => ({ cvrgEndorsementCode: null, status: null, policyData: null, - policyLookupErrorCode: 0 + policyLookupErrorCode: 0, + memberNumber: null }, customer: { address: { @@ -585,9 +586,9 @@ export const useMainStore = defineStore({ referralCorrelationId: order.referralCorrelationId, referralNumber: order.referralNumber }; - // Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name + // Clients (i.e. USAA) may sometimes use member number in addition to a policy number if (this.issConfig.useMemberNumber) { - payload.memberNumber = policy.policyNumber; + payload.memberNumber = policy.memberNumber ?? policy.policyNumber; } const response = await globalMethods.callHttpClient({ method: endpoints.CoveragePolicyInfo.method, @@ -617,6 +618,15 @@ export const useMainStore = defineStore({ // populate additional fields order.policy.policyData = responsePolicy.policyData; + if (this.issConfig.useMemberNumber) { + if (!order.policy.memberNumber) { + // We capture the member number (entered as policy number) once, so we don't overwrite it with returned policy number on subsequent lookups + order.policy.memberNumber = order.policy.policyNumber; + } + if (responsePolicy.policyNumber != null) { + order.policy.policyNumber = responsePolicy.policyNumber; + } + } // populate vehicles order.policy.vehicles = responsePolicy.vehicles ?? []; @@ -714,9 +724,9 @@ export const useMainStore = defineStore({ fleetNumber: this.order.vehicle.fleetNumber, fleetUnitNumber: this.order.vehicle.fleetUnitNumber }; - // Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name + // Clients (i.e. USAA) may sometimes use member number in addition to a policy number if (this.issConfig.useMemberNumber) { - payload.memberNumber = this.order.policy.policyNumber; + payload.memberNumber = this.order.policy.memberNumber ?? this.order.policy.policyNumber; } await updateClientSpecificFieldsForClaimRegistration(payload, this.order); const response = await globalMethods.callHttpClient({ @@ -775,9 +785,9 @@ export const useMainStore = defineStore({ policyData: this.order.policy.policyData, isItac: this.isITAC }; - // Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name + // Clients (i.e. USAA) may sometimes use member number in addition to a policy number if (this.issConfig.useMemberNumber) { - payload.memberNumber = this.order.policy.policyNumber; + payload.memberNumber = this.order.policy.memberNumber ?? this.order.policy.policyNumber; } try { @@ -2207,6 +2217,7 @@ export const useMainStore = defineStore({ this.order.policy.policyLookupErrorCode = 0; this.order.policy.deductible.repair = null; this.order.policy.deductible.replace = null; + this.order.policy.memberNumber = null; }, resetPayment() { diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 78345ff4..a443e9b9 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1496,6 +1496,41 @@ describe('Store', () => { }) })); }); + it('useMemberNumber is true => member number set and policy number changed after response', async () => { + // Arrange + const originalPolicyNumber = getRandomString(6, 6); + store.order.policy.policyNumber = originalPolicyNumber; + const returnedPolicyNumber = getRandomString(6, 6); + const responseWithPolicy = { + data: { + policies: [{ + policyNumber: returnedPolicyNumber + }] + } + }; + store.issConfig.isCoverageEnabled = true; + store.applicationUser.coverageLookupAttempts = 0; + store.issConfig.useMemberNumber = true; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(responseWithPolicy)); + + // Act + await store.getCoveragePolicyInfo(); + + // Asserts + expect(store.order.policy.memberNumber).toBe(originalPolicyNumber); + expect(store.order.policy.policyNumber).toBe(returnedPolicyNumber); + + // Act again + await store.getCoveragePolicyInfo(); + + // Assert again + expect(globalMethods.callHttpClient).toHaveBeenNthCalledWith(2, expect.objectContaining({ + payload: expect.objectContaining({ + policyNumber: returnedPolicyNumber, + memberNumber: originalPolicyNumber + }) + })); + }); it('null response by api => insuranceCoverage.coverageType is NONE', async () => { // Arrange store.issConfig.isCoverageEnabled = true;