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