From b41c2627977b0fb5eae44f57570d065f1634b99f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 17 Jul 2018 15:06:12 +0200 Subject: [PATCH 1/3] correct loading value and resulting tests --- scm-ui/src/users/modules/users.js | 18 +++++++++++++----- scm-ui/src/users/modules/users.test.js | 4 ++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/scm-ui/src/users/modules/users.js b/scm-ui/src/users/modules/users.js index 2e1b3686f4..1d14f8cb33 100644 --- a/scm-ui/src/users/modules/users.js +++ b/scm-ui/src/users/modules/users.js @@ -219,8 +219,12 @@ export default function reducer(state: any = {}, action: any = {}) { switch (action.type) { case FETCH_USERS: return { - loading: true, - error: null + ...state, + users: { + error: null, + entries: null, + loading: true + } }; case DELETE_USER: return { @@ -246,13 +250,17 @@ export default function reducer(state: any = {}, action: any = {}) { usersByNames }; case FETCH_USERS_FAILURE: - case DELETE_USER_FAILURE: return { ...state, - login: false, error: action.payload, loading: false - }; + }; + case DELETE_USER_FAILURE: + return { + ...state, + error: action.payload, + loading: false + }; default: return state; diff --git a/scm-ui/src/users/modules/users.test.js b/scm-ui/src/users/modules/users.test.js index 4f4073e7a9..8d4db41985 100644 --- a/scm-ui/src/users/modules/users.test.js +++ b/scm-ui/src/users/modules/users.test.js @@ -157,8 +157,8 @@ describe("fetch tests", () => { describe("reducer tests", () => { test("users request", () => { var newState = reducer({}, { type: FETCH_USERS }); - expect(newState.loading).toBeTruthy(); - expect(newState.error).toBeNull(); + expect(newState.users.loading).toBeTruthy(); + expect(newState.users.error).toBeNull(); }); test("fetch users successful", () => { From ad1aaccfacff466b839ef5d5f27c969369076cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 17 Jul 2018 15:06:40 +0200 Subject: [PATCH 2/3] add tests for alert dialog --- .../users/containers/DeleteUserButton.test.js | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/scm-ui/src/users/containers/DeleteUserButton.test.js b/scm-ui/src/users/containers/DeleteUserButton.test.js index 937ee81172..944c739c35 100644 --- a/scm-ui/src/users/containers/DeleteUserButton.test.js +++ b/scm-ui/src/users/containers/DeleteUserButton.test.js @@ -3,6 +3,9 @@ import { configure, shallow } from "enzyme"; import DeleteUserButton from "./DeleteUserButton"; import Adapter from "enzyme-adapter-react-16"; +import { confirmAlert } from '../../components/ConfirmAlert'; +jest.mock('../../components/ConfirmAlert'); + import "raf/polyfill"; configure({ adapter: new Adapter() }); @@ -12,7 +15,7 @@ it("should render nothing, if the delete link is missing", () => { _links: {} }; - const button = shallow(); + const button = shallow( {}} />); expect(button.text()).toBe(""); }); @@ -25,11 +28,26 @@ it("should render the button", () => { } }; - const button = shallow(); + const button = shallow( {}} />); expect(button.text()).not.toBe(""); }); -//TODO: Fix wrong test! +it("should open the confirm dialog on button click", () => { + + const user = { + _links: { + delete: { + href: "/users" + } + } + }; + + const button = shallow( {}} />); + button.simulate("click"); + + expect(confirmAlert.mock.calls.length).toBe(1); +}); + it("should call the delete user function with delete url", () => { const user = { _links: { @@ -40,12 +58,11 @@ it("should call the delete user function with delete url", () => { }; let calledUrl = null; - function capture(url) { calledUrl = url; } - const button = shallow(); + const button = shallow(); button.simulate("click"); expect(calledUrl).toBe("/users"); From d95e272b6bd2c65f61b701b7f973fdcee242fc62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 17 Jul 2018 15:08:58 +0200 Subject: [PATCH 3/3] refactoring --- .../src/users/containers/DeleteUserButton.js | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/scm-ui/src/users/containers/DeleteUserButton.js b/scm-ui/src/users/containers/DeleteUserButton.js index 0ecaaa74be..a3a9e66022 100644 --- a/scm-ui/src/users/containers/DeleteUserButton.js +++ b/scm-ui/src/users/containers/DeleteUserButton.js @@ -1,28 +1,30 @@ // @flow import React from "react"; -import type { - User -} from "../types/User"; -import { - confirmAlert -} from '../../components/ConfirmAlert'; +import type { User } from "../types/User"; +import { confirmAlert } from '../../components/ConfirmAlert'; type Props = { user: User, + confirmDialog?: boolean, deleteUser: (link: string) => void, }; -class DeleteUserButton extends React.Component < Props > { +class DeleteUserButton extends React.Component { - deleteUser = () => { - this.props.deleteUser(this.props.user._links.delete.href); + static defaultProps = { + confirmDialog: true }; - confirmDelete = () => { - confirmAlert({ + deleteUser = () => { + this.props.deleteUser(this.props.user._links.delete.href); + }; + + confirmDelete = () =>{ + confirmAlert({ title: 'Delete user', message: 'Do you really want to delete the user?', - buttons: [{ + buttons: [ + { label: 'Yes', onClick: () => this.deleteUser() }, @@ -31,26 +33,24 @@ class DeleteUserButton extends React.Component < Props > { onClick: () => null } ] - }) - } + }); + }; isDeletable = () => { return this.props.user._links.delete; }; render() { + const { confirmDialog } = this.props; + const action = confirmDialog ? this.confirmDelete : this.deleteUser; + if (!this.isDeletable()) { return; } - return ( < - button type = "button" - onClick = { - (e) => { - this.confirmDelete() - } - } > - Delete User < - /button> + return ( + ); } }