diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 857d1dcb..099496fb 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -2,6 +2,7 @@ import coverageStatement from '@/layouts/coverage-statement/coverage-statement.vue'; // Supporting Files +import { nextTick } from 'vue'; import { mount } from '@vue/test-utils'; import { getMountOptions } from '@/helpers/unit-test-helper.js'; import { createTestingPinia } from '@pinia/testing'; @@ -10,6 +11,7 @@ import { getRandomString, getRandomInt } from '@/helpers/data-generation.js'; import settleAllPromises from '@/helpers/layout-helper.js'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import routerParams from '@/router/router-constants/router-params'; +import { useMainStore } from '@/store/index.js'; jest.mock('@/helpers/layout-helper.js', () => jest.fn()); @@ -41,7 +43,7 @@ const loadingModalStub = { } }; -function getMountedComponent(mainInitialState = {}, initialData = {}) { +function getMountedComponent(mainInitialState = {}, initialData = {}, methodToRun = () => {}) { const mountOptions = getMountOptions({ router: { navigate: jest.fn() @@ -56,11 +58,15 @@ function getMountedComponent(mainInitialState = {}, initialData = {}) { alert: true, loadingModal: loadingModalStub }; - mountOptions.global.plugins = [createTestingPinia({ + const testingPinia = createTestingPinia({ initialState: { main: mainInitialState } - })]; + }); + useMainStore(testingPinia); + methodToRun(); + + mountOptions.global.plugins = [testingPinia]; mountOptions.mixins = [mockMixin]; mountOptions.data = () => ( initialData @@ -462,7 +468,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); test('If Verified Deductible, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange @@ -502,7 +509,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); test('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { // Arrange @@ -543,7 +551,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_ENABLED', () => { // Arrange @@ -587,7 +596,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_DISABLED', () => { // Arrange @@ -631,7 +641,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); test('If No Comp and selected Safelite, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange @@ -661,7 +672,8 @@ describe('coverageStatement.vue', () => { navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined, {}, - { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true }); + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); }); }); describe('ADAS', () => { @@ -735,7 +747,7 @@ describe('coverageStatement.vue', () => { expect(wrapper.vm.mainStore.registerClaim).not.toHaveBeenCalled(); }); - it('claim registration required => register claim method called', async () => { + it.only('claim registration required => register claim method called', async () => { // Arrange const sellingPrice = getRandomInt(50, 100); const deductible = sellingPrice - 1; @@ -756,17 +768,27 @@ describe('coverageStatement.vue', () => { isClaimRegistrationRequired: true } }; - const initialData = { - availableLineItems: [ + const mockStoreActions = () => { + useMainStore().getWipers = jest.fn().mockImplementation(() => Promise.resolve()); + useMainStore().getRainDefense = jest.fn().mockImplementation(() => Promise.resolve()); + useMainStore().getSupportingItems = jest.fn().mockImplementation(() => Promise.resolve()); + useMainStore().getPriceOrderItems = jest.fn().mockImplementation(() => Promise.resolve([ { sellingPrice, kitPrice: 0, laborAmount: 0 } - ] + ])); }; + const { wrapper } = getMountedComponent(initialStore, {}, mockStoreActions); + const next = (method) => { method(wrapper.vm); }; - const { wrapper } = getMountedComponent(initialStore, initialData); + // Act + coverageStatement.beforeRouteEnter.call(wrapper.vm, undefined, undefined, next); + for (let i = 0; i < 7; i++) { + // eslint-disable-next-line no-await-in-loop + await nextTick(); + } // Assert expect(wrapper.vm.mainStore.registerClaim).toHaveBeenCalled(); diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index b22cb88c..2eea2f2b 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -137,10 +137,10 @@ export default { }, mixins: [baseFormMixin, vehicleQuestionsMixin], async beforeRouteEnter(to, from, next) { - // Call APIs - const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); - const wipersPromise = useMainStore().getWipers(); - const rainDefensePromise = useMainStore().getRainDefense(); + // Call APIs + const cmsContentPromise = fetchCmsContentForPage(to?.query?.issPage); + const wipersPromise = await useMainStore().getWipers(); + const rainDefensePromise = await useMainStore().getRainDefense(); const supportingItemsPromise = await useMainStore().getSupportingItems(); // Settle promises and get results @@ -169,9 +169,9 @@ export default { : []; const availableLineItems = [ resultMap.rainDefense, - ...resultMap.supportingItems, - ...resultMap.wipers, - ...clonedGlassParts + ...(resultMap.supportingItems ?? []), + ...(resultMap.wipers ?? []), + ...(clonedGlassParts ?? []) ]; const pricingResults = await useMainStore().getPriceOrderItems(availableLineItems);