From 0e8fd878aa384c0a1e7e2778a88ee49ec286d8b9 Mon Sep 17 00:00:00 2001 From: Kimmo Puputti Date: Mon, 20 Feb 2017 15:08:12 +0200 Subject: [PATCH] Remove user and inProgressState from the Auth store - user: will be changed to something else later anyways - inProgressState: not used anywhere --- src/containers/Topbar/Topbar.js | 16 +++-------- src/ducks/Auth.duck.js | 41 +++++++++++----------------- src/ducks/Auth.test.js | 48 +++++++++++++++------------------ 3 files changed, 41 insertions(+), 64 deletions(-) diff --git a/src/containers/Topbar/Topbar.js b/src/containers/Topbar/Topbar.js index 9f2c8484..157228f6 100644 --- a/src/containers/Topbar/Topbar.js +++ b/src/containers/Topbar/Topbar.js @@ -11,7 +11,7 @@ const House = () => ; /* eslint-enable react/no-danger */ const Topbar = props => { - const { isAuthenticated, onLogout, user, push: historyPush } = props; + const { isAuthenticated, onLogout, push: historyPush } = props; const hamburger = { dangerouslySetInnerHTML: { __html: '🍔' } }; const handleChange = e => { @@ -52,11 +52,7 @@ const Topbar = props => {
{isAuthenticated - ?
- Logged in as{' '} - {user.email} - -
+ ? : Login}
@@ -65,20 +61,16 @@ const Topbar = props => { Topbar.defaultProps = { user: null }; -const { bool, object, func } = PropTypes; +const { bool, func } = PropTypes; Topbar.propTypes = { isAuthenticated: bool.isRequired, - user: object, onLogout: func.isRequired, // history.push prop from withRouter push: func.isRequired, }; -const mapStateToProps = state => ({ - isAuthenticated: state.Auth.isAuthenticated, - user: state.Auth.user, -}); +const mapStateToProps = state => ({ isAuthenticated: state.Auth.isAuthenticated }); const mapDispatchToProps = dispatch => ({ onLogout: historyPush => dispatch(logout(historyPush)) }); diff --git a/src/ducks/Auth.duck.js b/src/ducks/Auth.duck.js index dfc6259e..9240bb0b 100644 --- a/src/ducks/Auth.duck.js +++ b/src/ducks/Auth.duck.js @@ -16,37 +16,23 @@ export const LOGOUT_ERROR = 'app/Auth/LOGOUT_ERROR'; // ================ Reducer ================ // -export const NOTHING_IN_PROGRESS = 'NOTHING_IN_PROGRESS'; -export const LOGIN_IN_PROGRESS = 'LOGIN_IN_PROGRESS'; -export const LOGOUT_IN_PROGRESS = 'LOGOUT_IN_PROGRESS'; - -const initialState = { - isAuthenticated: false, - user: null, - inProgressState: NOTHING_IN_PROGRESS, - error: null, -}; +const initialState = { isAuthenticated: false, error: null }; export default function reducer(state = initialState, action = {}) { const { type, payload } = action; switch (type) { case LOGIN_REQUEST: - return { ...state, inProgressState: LOGIN_IN_PROGRESS, error: null }; + return { ...state, error: null }; case LOGIN_SUCCESS: - return { - ...state, - inProgressState: NOTHING_IN_PROGRESS, - isAuthenticated: true, - user: payload, - }; + return { ...state, isAuthenticated: true }; case LOGIN_ERROR: - return { ...state, inProgressState: NOTHING_IN_PROGRESS, error: payload }; + return { ...state, error: payload }; case LOGOUT_REQUEST: - return { ...state, inProgressState: LOGOUT_IN_PROGRESS, error: null }; + return { ...state, error: null }; case LOGOUT_SUCCESS: - return { ...state, inProgressState: NOTHING_IN_PROGRESS, isAuthenticated: false, user: null }; + return { ...state, isAuthenticated: false }; case LOGOUT_ERROR: - return { ...state, inProgressState: NOTHING_IN_PROGRESS, error: payload }; + return { ...state, error: payload }; default: return state; } @@ -54,8 +40,11 @@ export default function reducer(state = initialState, action = {}) { // ================ Action creators ================ // -export const login = (email, password) => ({ type: LOGIN_REQUEST, payload: { email, password } }); -export const loginSuccess = user => ({ type: LOGIN_SUCCESS, payload: user }); +export const login = (username, password) => ({ + type: LOGIN_REQUEST, + payload: { username, password }, +}); +export const loginSuccess = () => ({ type: LOGIN_SUCCESS }); export const loginError = error => ({ type: LOGIN_ERROR, payload: error, error: true }); export const logout = historyPush => ({ type: LOGOUT_REQUEST, payload: { historyPush } }); @@ -66,10 +55,10 @@ export const logoutError = error => ({ type: LOGOUT_ERROR, payload: error, error export function* callLogin(action, sdk) { const { payload } = action; - const { email, password } = payload; + const { username, password } = payload; try { - yield call(sdk.login, email, password); - yield put(loginSuccess(payload)); + yield call(sdk.login, { username, password }); + yield put(loginSuccess()); } catch (e) { yield put(loginError(e)); } diff --git a/src/ducks/Auth.test.js b/src/ducks/Auth.test.js index 279bca37..81533ef1 100644 --- a/src/ducks/Auth.test.js +++ b/src/ducks/Auth.test.js @@ -22,67 +22,63 @@ describe('Auth duck', () => { it('should be logged out by default', () => { const state = reducer(); expect(state.isAuthenticated).toEqual(false); - expect(state.user).toBeNull(); expect(state.error).toBeNull(); - expect(state.inProgressState).toEqual(NOTHING_IN_PROGRESS); }); it('should login successfully', () => { - const email = 'x@x.x'; + const username = 'x@x.x'; const password = 'pass'; let state = reducer(); - state = reducer(state, login(email, password)); + state = reducer(state, login(username, password)); expect(state.isAuthenticated).toEqual(false); - expect(state.user).toBeNull(); - expect(state.inProgressState).toEqual(LOGIN_IN_PROGRESS); expect(state.error).toBeNull(); - state = reducer(state, loginSuccess({ email, password })); + state = reducer(state, loginSuccess()); expect(state.isAuthenticated).toEqual(true); - expect(state.user).toEqual({ email, password }); - expect(state.inProgressState).toEqual(NOTHING_IN_PROGRESS); expect(state.error).toBeNull(); }); it('should handle failed login', () => { let state = reducer(); - state = reducer(state, login('email', 'pass')); + state = reducer(state, login('username', 'pass')); expect(state.isAuthenticated).toEqual(false); - expect(state.user).toBeNull(); - expect(state.inProgressState).toEqual(LOGIN_IN_PROGRESS); expect(state.error).toBeNull(); const error = new Error('test error'); state = reducer(state, loginError(error)); expect(state.isAuthenticated).toEqual(false); - expect(state.user).toBeNull(); - expect(state.inProgressState).toEqual(NOTHING_IN_PROGRESS); expect(state.error).toEqual(error); }); }); describe('login worker', () => { it('should succeed when API call fulfills', () => { - const email = 'email'; + const username = 'username'; const password = 'pass'; - const payload = { email, password }; + const payload = { username, password }; const sdk = { login: jest.fn() }; - const loginAction = login(email, password); + const loginAction = login(username, password); const worker = callLogin(loginAction, sdk); - expect(worker.next()).toEqual({ done: false, value: call(sdk.login, email, password) }); - expect(worker.next(payload)).toEqual({ done: false, value: put(loginSuccess(payload)) }); + expect(worker.next()).toEqual({ + done: false, + value: call(sdk.login, { username, password }), + }); + expect(worker.next(payload)).toEqual({ done: false, value: put(loginSuccess()) }); expect(worker.next().done).toEqual(true); expect(sdk.login).not.toHaveBeenCalled(); }); it('should fail when API call rejects', () => { - const email = 'email'; + const username = 'username'; const password = 'pass'; const sdk = { login: jest.fn() }; - const loginAction = login(email, password); + const loginAction = login(username, password); const worker = callLogin(loginAction, sdk); - expect(worker.next()).toEqual({ done: false, value: call(sdk.login, email, password) }); + expect(worker.next()).toEqual({ + done: false, + value: call(sdk.login, { username, password }), + }); const error = new Error('Test login failed'); expect(worker.throw(error)).toEqual({ done: false, value: put(loginError(error)) }); expect(worker.next().done).toEqual(true); @@ -122,7 +118,7 @@ describe('Auth duck', () => { it('calls login', () => { const sdk = { login: jest.fn() }; const watcher = watchAuth(sdk); - const loginAction = login('email', 'password'); + const loginAction = login('username', 'password'); const takeLoginOrLogout = take([LOGIN_REQUEST, LOGOUT_REQUEST]); const forkLogin = fork(callLogin, loginAction, sdk); @@ -162,8 +158,8 @@ describe('Auth duck', () => { it('should cancel login if another login comes', () => { const sdk = { login: jest.fn(), logout: jest.fn() }; const watcher = watchAuth(sdk); - const loginAction1 = login('email1', 'password1'); - const loginAction2 = login('email2', 'password2'); + const loginAction1 = login('username1', 'password1'); + const loginAction2 = login('username2', 'password2'); const task = createMockTask(); const takeLoginOrLogout = take([LOGIN_REQUEST, LOGOUT_REQUEST]); const forkLogin1 = fork(callLogin, loginAction1, sdk); @@ -197,7 +193,7 @@ describe('Auth duck', () => { const sdk = { login: jest.fn(), logout: jest.fn() }; const historyPush = jest.fn(); const watcher = watchAuth(sdk); - const loginAction = login('email', 'password'); + const loginAction = login('username', 'password'); const logoutAction = logout(historyPush); const task = createMockTask(); const takeLoginOrLogout = take([LOGIN_REQUEST, LOGOUT_REQUEST]);