From abdda18b4ab7394fce87078b9f5bdc83c4b4c067 Mon Sep 17 00:00:00 2001 From: Jeremy-Z Date: Wed, 1 Jul 2026 14:06:47 -0400 Subject: [PATCH] Added unit tests for beforeEach router method. --- src/router/router.beforeEach.spec.js | 72 ++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/router/router.beforeEach.spec.js diff --git a/src/router/router.beforeEach.spec.js b/src/router/router.beforeEach.spec.js new file mode 100644 index 00000000..85c9160e --- /dev/null +++ b/src/router/router.beforeEach.spec.js @@ -0,0 +1,72 @@ +import issPageValues from '@/router/router-constants/issPage-values'; + +let router; +let saveSession; +let showIssLoadingModal; +let mockBeforeEachHandler; +let mockStore; + +jest.mock('vue-router', () => ({ + createWebHistory: jest.fn(() => ({ state: {} })), + createRouter: jest.fn((options) => ({ + options, + beforeEach: jest.fn((handler) => { + mockBeforeEachHandler = handler; + }), + afterEach: jest.fn(), + addRoute: jest.fn(), + getRoutes: jest.fn(() => []), + hasRoute: jest.fn(() => true), + push: jest.fn(), + go: jest.fn(), + currentRoute: { value: { query: { issPage: 'welcome-page' } } } + })) +})); + +jest.mock('@/helpers/order-helper.js', () => ({ + saveSession: jest.fn(() => Promise.resolve()) +})); + +jest.mock('@/helpers/loading-modal-helper', () => jest.fn()); + +jest.mock('@/store', () => ({ + useMainStore: jest.fn(() => mockStore) +})); + +describe('Router beforeEach callSaveSession', () => { + beforeAll(() => { + router = require('@/router/').default; + ({ saveSession } = require('@/helpers/order-helper.js')); + const loadingModalModule = require('@/helpers/loading-modal-helper'); + showIssLoadingModal = loadingModalModule.default || loadingModalModule; + }); + + beforeEach(() => { + mockStore = { + order: {}, + isBailout: false + }; + + jest.clearAllMocks(); + }); + + it('calls saveSession synchronously when entering vehicle-selection without a referral number', async () => { + const result = await mockBeforeEachHandler( + { + name: issPageValues.VEHICLE_SELECTION, + query: { issPage: issPageValues.VEHICLE_SELECTION }, + href: '/?issPage=vehicle-selection' + }, + { + name: issPageValues.WELCOME_PAGE, + query: { issPage: issPageValues.WELCOME_PAGE } + } + ); + + 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