From 49102c744e277370da62c279d25563d633295cc2 Mon Sep 17 00:00:00 2001 From: Daniel Kos Date: Wed, 6 Jun 2018 17:33:40 +0200 Subject: [PATCH] Add auth reducer tests Feature #13563 Arvados-DCO-1.1-Signed-off-by: Daniel Kos : --- package.json | 5 +- src/services/auth-service/auth-service.ts | 8 +-- src/store/auth/auth-reducer.test.ts | 83 +++++++++++++++++++++++ yarn.lock | 4 ++ 4 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 src/store/auth/auth-reducer.test.ts diff --git a/package.json b/package.json index 9a31c4e7..ac890d8d 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,9 @@ "@types/react-router-dom": "4.2.7", "@types/react-router-redux": "5.0.15", "@types/redux-devtools": "3.0.44", - "typescript": "2.9.1", - "redux-devtools": "3.4.1" + "jest-localstorage-mock": "2.2.0", + "redux-devtools": "3.4.1", + "typescript": "2.9.1" }, "moduleNameMapper": { "^~/(.*)$": "/src/$1" diff --git a/src/services/auth-service/auth-service.ts b/src/services/auth-service/auth-service.ts index 12c5b680..9e75c72a 100644 --- a/src/services/auth-service/auth-service.ts +++ b/src/services/auth-service/auth-service.ts @@ -5,10 +5,10 @@ import { API_HOST } from "../../common/server-api"; import { User } from "../../models/user"; -const API_TOKEN_KEY = 'apiToken'; -const USER_EMAIL_KEY = 'userEmail'; -const USER_FIRST_NAME_KEY = 'userFirstName'; -const USER_LAST_NAME_KEY = 'userLastName'; +export const API_TOKEN_KEY = 'apiToken'; +export const USER_EMAIL_KEY = 'userEmail'; +export const USER_FIRST_NAME_KEY = 'userFirstName'; +export const USER_LAST_NAME_KEY = 'userLastName'; export default class AuthService { diff --git a/src/store/auth/auth-reducer.test.ts b/src/store/auth/auth-reducer.test.ts new file mode 100644 index 00000000..3d60c4f4 --- /dev/null +++ b/src/store/auth/auth-reducer.test.ts @@ -0,0 +1,83 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import authReducer from "./auth-reducer"; +import actions from "./auth-action"; +import { + API_TOKEN_KEY, + USER_EMAIL_KEY, + USER_FIRST_NAME_KEY, + USER_LAST_NAME_KEY +} from "../../services/auth-service/auth-service"; + +require('jest-localstorage-mock'); + +describe('auth-reducer', () => { + beforeAll(() => { + localStorage.clear(); + }); + + it('should return default state on initialisation', () => { + const initialState = undefined; + const state = authReducer(initialState, actions.INIT()); + expect(state).toEqual({ + apiToken: undefined, + user: undefined + }); + }); + + it('should read user and api token from local storage on init if they are there', () => { + const initialState = undefined; + + localStorage.setItem(API_TOKEN_KEY, "token"); + localStorage.setItem(USER_EMAIL_KEY, "test@test.com"); + localStorage.setItem(USER_FIRST_NAME_KEY, "John"); + localStorage.setItem(USER_LAST_NAME_KEY, "Doe"); + + const state = authReducer(initialState, actions.INIT()); + expect(state).toEqual({ + apiToken: "token", + user: { + email: "test@test.com", + firstName: "John", + lastName: "Doe" + } + }); + }); + + it('should store token in local storage', () => { + const initialState = undefined; + + const state = authReducer(initialState, actions.SAVE_API_TOKEN("token")); + expect(state).toEqual({ + apiToken: "token", + user: undefined + }); + + expect(localStorage.getItem(API_TOKEN_KEY)).toBe("token"); + }); + + it('should set user details on success fetch', () => { + const initialState = undefined; + + const userDetails = { + email: "test@test.com", + first_name: "John", + last_name: "Doe", + is_admin: true + }; + + const state = authReducer(initialState, actions.USER_DETAILS_SUCCESS(userDetails)); + expect(state).toEqual({ + apiToken: undefined, + user: { + email: "test@test.com", + firstName: "John", + lastName: "Doe" + } + }); + + expect(localStorage.getItem(API_TOKEN_KEY)).toBe("token"); + }); +}); diff --git a/yarn.lock b/yarn.lock index 2d6ca3c1..17549e01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4003,6 +4003,10 @@ jest-leak-detector@^22.4.0: dependencies: pretty-format "^22.4.3" +jest-localstorage-mock@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.2.0.tgz#ce9a9de01dfdde2ad8aa08adf73acc7e5cc394cf" + jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" -- 2.30.2