diff --git a/src/layouts/entry-page/entry-page.vue b/src/layouts/entry-page/entry-page.vue index e4f73f17..89609dd7 100644 --- a/src/layouts/entry-page/entry-page.vue +++ b/src/layouts/entry-page/entry-page.vue @@ -212,6 +212,10 @@ export default { if ( clientFlags.EncryptedParametersPattern != null ) { this.mainStore.issConfig.encryptedParametersPattern = clientFlags.EncryptedParametersPattern; } + + if (clientFlags.UseMemberNumber) { + this.mainStore.issConfig.useMemberNumber = true; + } } }, combineClientParameters(configParams, queryStringParams) { diff --git a/src/router/index.js b/src/router/index.js index 25400a08..96918285 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -168,7 +168,8 @@ router.beforeEach(async (to, from) => { try { await saveSession({ shouldAwaitSaveSessionQueue: true, bailoutOnError: true }); } - finally { + catch (error) { + // Only remove spinner on error. Successfull new page load will remove it by default. showIssLoadingModal(false); } } diff --git a/src/router/router.beforeEach.spec.js b/src/router/router.beforeEach.spec.js index 85c9160e..4e13614a 100644 --- a/src/router/router.beforeEach.spec.js +++ b/src/router/router.beforeEach.spec.js @@ -66,7 +66,6 @@ describe('Router beforeEach callSaveSession', () => { expect(saveSession).toHaveBeenCalledTimes(1); expect(saveSession).toHaveBeenCalledWith({ shouldAwaitSaveSessionQueue: true, bailoutOnError: true }); expect(showIssLoadingModal).toHaveBeenNthCalledWith(1, true); - expect(showIssLoadingModal).toHaveBeenNthCalledWith(2, false); expect(result).toBe(true); }); }); \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index c734f307..091ffec1 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -274,7 +274,8 @@ export const getDefaultState = () => ({ }, buildInfo: (typeof __BUILD_INFO__ !== 'undefined') ? __BUILD_INFO__ : null, // Contains the build info for the website, set during the build process. Version, Time, Git info etc.... siteType: null, // SiteType / SubType the site is set to (Essential/Advanced). - enableNoCompQuote: false + enableNoCompQuote: false, + useMemberNumber: false // Indicates if member number should be included for policy lookup purposes } }); @@ -568,17 +569,22 @@ export const useMainStore = defineStore({ try { order.policy.policyLookupErrorCode = 0; + const payload = { + accountNumber: order.parentAccountNumber?.toString(), + policyNumber: policy.policyNumber, + dateOfLoss: policy.dateOfLoss, + zipCode: policy.policyZipCode, + referralCorrelationId: order.referralCorrelationId, + referralNumber: order.referralNumber + }; + // Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name + if (this.issConfig.useMemberNumber) { + payload.memberNumber = policy.policyNumber; + } const response = await globalMethods.callHttpClient({ method: endpoints.CoveragePolicyInfo.method, endpoint: endpoints.CoveragePolicyInfo.url, - payload: { - accountNumber: order.parentAccountNumber?.toString(), - policyNumber: policy.policyNumber, - dateOfLoss: policy.dateOfLoss, - zipCode: policy.policyZipCode, - referralCorrelationId: order.referralCorrelationId, - referralNumber: order.referralNumber - }, + payload, bailoutOnError: false }); @@ -2295,7 +2301,7 @@ export const useMainStore = defineStore({ this.issConfig.siteType = null; this.issConfig.enableNoCompQuote = false; this.issConfig.billToAccountNumber = null; - + this.issConfig.useMemberNumber = false; // NOTE: Do not wipe out build info. }, diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 271d1a34..61813d5c 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1406,6 +1406,43 @@ describe('Store', () => { referralCorrelationId }) })); + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + payload: expect.not.objectContaining({ + memberNumber: expect.anything() + }) + })); + }); + it('calls api with member number when useMemberNumber is true', async () => { + // Arrange + const parentAccountNumber = getRandomString(6, 6); + const policyNumber = getRandomString(6, 6); + const dateOfLoss = getRandomString(6, 6); + const zipCode = getRandomString(6, 6); + const referralCorrelationId = getRandomString(6, 6); + store.order.parentAccountNumber = parentAccountNumber; + store.order.policy.policyNumber = policyNumber; + store.order.policy.dateOfLoss = dateOfLoss; + store.order.policy.policyZipCode = zipCode; + store.order.referralCorrelationId = referralCorrelationId; + store.issConfig.isCoverageEnabled = true; + store.issConfig.useMemberNumber = true; + store.applicationUser.coverageLookupAttempts = 0; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + await store.getCoveragePolicyInfo(); + + // Asserts + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + payload: expect.objectContaining({ + accountNumber: parentAccountNumber, + policyNumber, + memberNumber: policyNumber, + dateOfLoss, + zipCode, + referralCorrelationId + }) + })); }); it('null response by api => insuranceCoverage.coverageType is NONE', async () => { // Arrange