From 9879fcf4750be33eae5d063789f331aa169790bc Mon Sep 17 00:00:00 2001 From: Piotr Gawron <p.gawron@atcomp.pl> Date: Wed, 15 May 2024 13:34:30 +0200 Subject: [PATCH] change reporting to new handler --- pages/_app.tsx | 3 ++ .../middlewares/error.middleware.test.ts | 37 ++++++++++++------- src/redux/middlewares/error.middleware.ts | 24 ++---------- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index 570dbf6e..da35a0c3 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -3,6 +3,9 @@ import type { AppProps } from 'next/app'; import '@/styles/index.css'; import { useEffect } from 'react'; import { store } from '@/redux/store'; +import { initializeErrorReporting } from '@/utils/error-report/errorReporting'; + +initializeErrorReporting(); const MyApp = ({ Component, pageProps }: AppProps): JSX.Element => { const project = store.getState().project.data; diff --git a/src/redux/middlewares/error.middleware.test.ts b/src/redux/middlewares/error.middleware.test.ts index 7662714e..c9f3d022 100644 --- a/src/redux/middlewares/error.middleware.test.ts +++ b/src/redux/middlewares/error.middleware.test.ts @@ -1,11 +1,13 @@ -import { showToast } from '@/utils/showToast'; +import { handleError } from '@/utils/error-report/errorReporting'; import { errorMiddlewareListener } from './error.middleware'; -jest.mock('../../utils/showToast', () => ({ - showToast: jest.fn(), +jest.mock('../../utils/error-report/errorReporting', () => ({ + handleError: jest.fn(), })); describe('errorMiddlewareListener', () => { + // eslint-disable-next-line no-console + beforeEach(() => { jest.clearAllMocks(); }); @@ -19,9 +21,12 @@ describe('errorMiddlewareListener', () => { rejectedWithValue: true, requestStatus: 'rejected', }, + error: { + code: 'Error 2', + }, }; await errorMiddlewareListener(action); - expect(showToast).toHaveBeenCalledWith({ type: 'error', message: 'Error message' }); + expect(handleError).toHaveBeenCalledWith({ code: 'Error 2' }); }); it('should show toast with unknown error when action is rejected without value', async () => { @@ -33,12 +38,12 @@ describe('errorMiddlewareListener', () => { rejectedWithValue: true, requestStatus: 'rejected', }, + error: { + code: 'Error 3', + }, }; await errorMiddlewareListener(action); - expect(showToast).toHaveBeenCalledWith({ - type: 'error', - message: 'An unknown error occurred. Please try again later.', - }); + expect(handleError).toHaveBeenCalledWith({ code: 'Error 3' }); }); it('should not show toast when action is not rejected', async () => { @@ -51,7 +56,7 @@ describe('errorMiddlewareListener', () => { }, }; await errorMiddlewareListener(action); - expect(showToast).not.toHaveBeenCalled(); + expect(handleError).not.toHaveBeenCalled(); }); it('should show toast with unknown error when action payload is not a string', async () => { @@ -63,12 +68,13 @@ describe('errorMiddlewareListener', () => { rejectedWithValue: true, requestStatus: 'rejected', }, + error: { + code: 'ERROR', + message: 'Error message', + }, }; await errorMiddlewareListener(action); - expect(showToast).toHaveBeenCalledWith({ - type: 'error', - message: 'An unknown error occurred. Please try again later.', - }); + expect(handleError).toHaveBeenCalledWith({ code: 'ERROR', message: 'Error message' }); }); it('should show toast with custom message when action payload is a string', async () => { @@ -80,8 +86,11 @@ describe('errorMiddlewareListener', () => { rejectedWithValue: true, requestStatus: 'rejected', }, + error: { + code: 'ERROR', + }, }; await errorMiddlewareListener(action); - expect(showToast).toHaveBeenCalledWith({ type: 'error', message: 'Failed to fetch' }); + expect(handleError).toHaveBeenCalledWith({ code: 'ERROR' }); }); }); diff --git a/src/redux/middlewares/error.middleware.ts b/src/redux/middlewares/error.middleware.ts index 0ba6a0f7..906ddfc0 100644 --- a/src/redux/middlewares/error.middleware.ts +++ b/src/redux/middlewares/error.middleware.ts @@ -1,30 +1,14 @@ import type { AppStartListening } from '@/redux/store'; -import { UNKNOWN_ERROR } from '@/utils/getErrorMessage/getErrorMessage.constants'; -import { showToast } from '@/utils/showToast'; -import { - Action, - createListenerMiddleware, - isRejected, - isRejectedWithValue, -} from '@reduxjs/toolkit'; +import { Action, createListenerMiddleware, isRejected } from '@reduxjs/toolkit'; +import { handleError } from '@/utils/error-report/errorReporting'; export const errorListenerMiddleware = createListenerMiddleware(); const startListening = errorListenerMiddleware.startListening as AppStartListening; export const errorMiddlewareListener = async (action: Action): Promise<void> => { - if (isRejectedWithValue(action)) { - let message: string; - if (typeof action.payload === 'string') { - message = action.payload; - } else { - message = UNKNOWN_ERROR; - } - - showToast({ - type: 'error', - message, - }); + if (isRejected(action)) { + handleError(action.error); } }; -- GitLab