From 978565609ab5283d85b72bed25f9d9502e5124ad Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 25 Jul 2018 09:44:48 +0200 Subject: [PATCH] fixed reducer for FETCH_USER_SUCCESS --- scm-ui/src/users/modules/users.js | 21 +++++--------- scm-ui/src/users/modules/users.test.js | 38 ++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/scm-ui/src/users/modules/users.js b/scm-ui/src/users/modules/users.js index b96aa1b56b..3c381146a1 100644 --- a/scm-ui/src/users/modules/users.js +++ b/scm-ui/src/users/modules/users.js @@ -374,25 +374,18 @@ export default function reducer(state: any = {}, action: any = {}) { }); case FETCH_USER_SUCCESS: - const ubn = extractUsersByNames( - [action.payload], - [action.payload.name], - state.usersByNames - ); - return { - ...state, - users: { - error: null, - entries: [action.payload.name], - loading: false - }, - usersByNames: ubn - }; + return reduceUsersByNames(state, action.payload.name, { + loading: false, + error: null, + entry: action.payload + }); + case FETCH_USER_FAILURE: return reduceUsersByNames(state, action.payload.username, { loading: true, error: action.payload.error }); + // Delete single user cases case DELETE_USER: return reduceUsersByNames(state, action.payload.name, { diff --git a/scm-ui/src/users/modules/users.test.js b/scm-ui/src/users/modules/users.test.js index 1a8a598c4c..fea3bbe540 100644 --- a/scm-ui/src/users/modules/users.test.js +++ b/scm-ui/src/users/modules/users.test.js @@ -35,7 +35,8 @@ import { deleteUserSuccess, fetchUsersPending, fetchUserPending, - fetchUserFailure + fetchUserFailure, + fetchUserSuccess } from "./users"; import reducer from "./users"; @@ -443,11 +444,44 @@ describe("users reducer", () => { expect(newState.usersByNames["zaphod"].loading).toBeTruthy(); }); + it("should not affect users state", () => { + const newState = reducer( + { + users: { + entries: ["ford"] + } + }, + fetchUserPending("zaphod") + ); + expect(newState.usersByNames["zaphod"].loading).toBeTruthy(); + expect(newState.users.entries).toEqual(["ford"]); + }); + it("should update state according to FETCH_USER_FAILURE action", () => { const newState = reducer( {}, fetchUserFailure(userFord.name, new Error("kaputt!")) ); - expect(newState.usersByNames["ford"].error).toBeTruthy; + expect(newState.usersByNames["ford"].error).toBeTruthy(); + }); + + it("should update state according to FETCH_USER_SUCCESS action", () => { + const newState = reducer({}, fetchUserSuccess(userFord)); + expect(newState.usersByNames["ford"].loading).toBeFalsy(); + expect(newState.usersByNames["ford"].entry).toBe(userFord); + }); + + it("should affect users state nor the state of other users", () => { + const newState = reducer( + { + users: { + entries: ["zaphod"] + } + }, + fetchUserSuccess(userFord) + ); + expect(newState.usersByNames["ford"].loading).toBeFalsy(); + expect(newState.usersByNames["ford"].entry).toBe(userFord); + expect(newState.users.entries).toEqual(["zaphod"]); }); });