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