From 2f3c902a4abc5f351d841da714d9ff25d3da7125 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Thu, 16 May 2024 14:06:41 +0200
Subject: [PATCH] add email of logged user to error data

---
 src/redux/user/user.reducers.ts               |  2 ++
 src/redux/user/user.thunks.ts                 |  1 +
 src/utils/error-report/errorReporting.test.ts | 18 +++++++++++++++++-
 src/utils/error-report/errorReporting.ts      |  8 +++++++-
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/redux/user/user.reducers.ts b/src/redux/user/user.reducers.ts
index 1713e729..2cb2002a 100644
--- a/src/redux/user/user.reducers.ts
+++ b/src/redux/user/user.reducers.ts
@@ -12,6 +12,7 @@ export const loginReducer = (builder: ActionReducerMapBuilder<UserState>): void
       state.loading = 'succeeded';
       state.role = action.payload?.role || null;
       state.login = action.payload?.login || null;
+      state.userData = action.payload?.userData || null;
     })
     .addCase(login.rejected, state => {
       state.authenticated = false;
@@ -48,6 +49,7 @@ export const logoutReducer = (builder: ActionReducerMapBuilder<UserState>): void
       state.loading = 'succeeded';
       state.role = null;
       state.login = null;
+      state.userData = null;
     })
     .addCase(logout.rejected, state => {
       state.loading = 'failed';
diff --git a/src/redux/user/user.thunks.ts b/src/redux/user/user.thunks.ts
index 43aecbc9..19aa06df 100644
--- a/src/redux/user/user.thunks.ts
+++ b/src/redux/user/user.thunks.ts
@@ -54,6 +54,7 @@ export const login = createAsyncThunk(
         return {
           login: loginName,
           role,
+          userData,
         };
       }
 
diff --git a/src/utils/error-report/errorReporting.test.ts b/src/utils/error-report/errorReporting.test.ts
index afc07563..a49607f5 100644
--- a/src/utils/error-report/errorReporting.test.ts
+++ b/src/utils/error-report/errorReporting.test.ts
@@ -2,7 +2,7 @@ import { createErrorData } from '@/utils/error-report/errorReporting';
 import { apiPath } from '@/redux/apiPath';
 import { HttpStatusCode } from 'axios';
 import { loginFixture } from '@/models/fixtures/loginFixture';
-import { login } from '@/redux/user/user.thunks';
+import { login, logout } from '@/redux/user/user.thunks';
 import { mockNetworkResponse } from '@/utils/mockNetworkResponse';
 import { store } from '@/redux/store';
 import { getConfiguration } from '@/redux/configuration/configuration.thunks';
@@ -61,4 +61,20 @@ describe('createErrorData', () => {
     const error = createErrorData(new Error());
     expect(error.version).not.toBeNull();
   });
+
+  it('should add email when logged', async () => {
+    mockedAxiosClient.onPost(apiPath.postLogin()).reply(HttpStatusCode.Ok, loginFixture);
+    mockedAxiosClient.onGet(apiPath.user(loginFixture.login)).reply(HttpStatusCode.Ok, userFixture);
+    await store.dispatch(login(CREDENTIALS));
+
+    const error = createErrorData(new Error());
+    expect(error.email).toBe(userFixture.email);
+  });
+
+  it('email should be empty when not logged', async () => {
+    mockedAxiosClient.onPost(apiPath.logout()).reply(HttpStatusCode.Ok, {});
+    await store.dispatch(logout());
+    const error = createErrorData(new Error());
+    expect(error.email).toBeNull();
+  });
 });
diff --git a/src/utils/error-report/errorReporting.ts b/src/utils/error-report/errorReporting.ts
index f10be545..46538a86 100644
--- a/src/utils/error-report/errorReporting.ts
+++ b/src/utils/error-report/errorReporting.ts
@@ -14,6 +14,12 @@ export const createErrorData = (error: Error | SerializedError | undefined): Err
   if (!login) {
     login = 'anonymous';
   }
+
+  const { userData } = store.getState().user;
+  let email = null;
+  if (userData) {
+    email = userData.email;
+  }
   const configuration = store.getState().configuration.main.data;
   const version = configuration ? configuration.version : null;
 
@@ -22,7 +28,7 @@ export const createErrorData = (error: Error | SerializedError | undefined): Err
     login,
     browser: navigator.userAgent,
     comment: null,
-    email: null, // TODO
+    email,
     javaStacktrace: null, // TODO
     stacktrace,
     timestamp: Math.floor(+new Date() / ONE_THOUSAND),
-- 
GitLab