diff --git a/src/boot/axios.js b/src/boot/axios.js index 5da26a404..aee38e887 100644 --- a/src/boot/axios.js +++ b/src/boot/axios.js @@ -4,8 +4,9 @@ import { Router } from 'src/router'; import useNotify from 'src/composables/useNotify.js'; import { useStateQueryStore } from 'src/stores/useStateQueryStore'; -let session, notify, stateQuery; - +const session = useSession(); +const { notify } = useNotify(); +const stateQuery = useStateQueryStore(); const baseUrl = '/api/'; axios.defaults.baseURL = baseUrl; @@ -50,15 +51,9 @@ const onResponseError = (error) => { return Promise.reject(error); }; -export function setupAxios() { - session = useSession(); - notify = useNotify().notify; - stateQuery = useStateQueryStore(); - - axios.interceptors.request.use(onRequest, onRequestError); - axios.interceptors.response.use(onResponse, onResponseError); - axiosNoError.interceptors.request.use(onRequest); - axiosNoError.interceptors.response.use(onResponse); -} +axios.interceptors.request.use(onRequest, onRequestError); +axios.interceptors.response.use(onResponse, onResponseError); +axiosNoError.interceptors.request.use(onRequest); +axiosNoError.interceptors.response.use(onResponse); export { onRequest, onResponseError, axiosNoError }; diff --git a/src/boot/quasar.js b/src/boot/quasar.js index 1cc2e82cf..01fe68d8b 100644 --- a/src/boot/quasar.js +++ b/src/boot/quasar.js @@ -1,7 +1,6 @@ import { boot } from 'quasar/wrappers'; import qFormMixin from './qformMixin'; import keyShortcut from './keyShortcut'; -import { setupAxios } from 'src/boot/axios'; import useNotify from 'src/composables/useNotify.js'; import { CanceledError } from 'axios'; @@ -49,5 +48,4 @@ export default boot(({ app }) => { notify(message ?? 'globals.error', 'negative', 'error'); }; - setupAxios(); }); diff --git a/src/composables/useSession.js b/src/composables/useSession.js index 5097a1fee..633a30bb0 100644 --- a/src/composables/useSession.js +++ b/src/composables/useSession.js @@ -8,13 +8,9 @@ import useNotify from './useNotify'; import { useTokenConfig } from './useTokenConfig'; const TOKEN_MULTIMEDIA = 'tokenMultimedia'; const TOKEN = 'token'; -let router; -export default { - setup() { - router = useRouter(); - }, -}; + export function useSession() { + const router = useRouter(); const { notify } = useNotify(); let isCheckingToken = false; let intervalId = null; diff --git a/src/router/index.js b/src/router/index.js index 5ed8ad9ed..18541c0b2 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -14,8 +14,8 @@ import { useUserConfig } from 'src/composables/useUserConfig'; import { useTokenConfig } from 'src/composables/useTokenConfig'; import { useAcl } from 'src/composables/useAcl'; -let state, session; - +const state = useState(); +const session = useSession(); const { t, te } = i18n.global; const createHistory = process.env.SERVER @@ -43,10 +43,8 @@ const Router = createRouter({ * with the Router instance. */ export { Router }; -export default route((/* { store, ssrContext } */) => { +export default route(function (/* { store, ssrContext } */) { Router.beforeEach(async (to, from, next) => { - state = useState(); - session = useSession(); const { isLoggedIn } = session; const outLayout = Router.options.routes[0].children.map((r) => r.name); if (!isLoggedIn() && !outLayout.includes(to.name)) { diff --git a/test/vitest/__tests__/boot/axios.spec.js b/test/vitest/__tests__/boot/axios.spec.js index 3c59dbc48..19d396ec5 100644 --- a/test/vitest/__tests__/boot/axios.spec.js +++ b/test/vitest/__tests__/boot/axios.spec.js @@ -1,38 +1,23 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { setupAxios, onRequest, onResponseError } from 'src/boot/axios'; -import { useSession } from 'src/composables/useSession'; -import useNotify from 'src/composables/useNotify'; -import { useStateQueryStore } from 'src/stores/useStateQueryStore'; +import { Notify } from 'quasar'; +import { onRequest, onResponseError } from 'src/boot/axios'; +import { describe, expect, it, vi } from 'vitest'; -vi.mock('src/composables/useSession'); -vi.mock('src/composables/useNotify'); -vi.mock('src/stores/useStateQueryStore'); +vi.mock('src/composables/useSession', () => ({ + useSession: () => ({ + getToken: () => 'DEFAULT_TOKEN', + isLoggedIn: () => vi.fn(), + destroy: () => vi.fn(), + }), +})); + +vi.mock('src/stores/useStateQueryStore', () => ({ + useStateQueryStore: () => ({ + add: () => vi.fn(), + remove: () => vi.fn(), + }), +})); describe('Axios boot', () => { - let sessionMock, notifyMock, stateQueryMock; - - beforeEach(() => { - sessionMock = { - getToken: vi.fn().mockReturnValue('DEFAULT_TOKEN'), - isLoggedIn: vi.fn().mockReturnValue(true), - destroy: vi.fn(), - }; - - notifyMock = { - notify: vi.fn(), - }; - - stateQueryMock = { - add: vi.fn(), - remove: vi.fn(), - }; - - useSession.mockReturnValue(sessionMock); - useNotify.mockReturnValue(notifyMock); - useStateQueryStore.mockReturnValue(stateQueryMock); - - setupAxios(); - }); describe('onRequest()', async () => { it('should set the "Authorization" property on the headers', async () => { const config = { headers: {} };