X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/c77b1a5becebf382fddc349ae9081503d511a02a..1b15486e36f96b209a1854c1f33f8330e97f1b94:/src/store/auth/auth-reducer.test.ts diff --git a/src/store/auth/auth-reducer.test.ts b/src/store/auth/auth-reducer.test.ts index a60e82a6..eb7e0c0d 100644 --- a/src/store/auth/auth-reducer.test.ts +++ b/src/store/auth/auth-reducer.test.ts @@ -2,111 +2,85 @@ // // 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, - USER_OWNER_UUID_KEY, - USER_UUID_KEY -} from "../../services/auth-service/auth-service"; -import { API_HOST } from "../../common/api/server-api"; +import { authReducer, AuthState } from "./auth-reducer"; +import { AuthAction, authActions } from "./auth-action"; import 'jest-localstorage-mock'; +import { createServices } from "~/services/services"; +import { mockConfig } from '~/common/config'; +import { ApiActions } from "~/services/api/api-actions"; describe('auth-reducer', () => { + let reducer: (state: AuthState | undefined, action: AuthAction) => any; + const actions: ApiActions = { + progressFn: (id: string, working: boolean) => {}, + errorFn: (id: string, message: string) => {} + }; + beforeAll(() => { localStorage.clear(); + reducer = authReducer(createServices(mockConfig({}), actions)); }); - 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', () => { + it('should correctly initialise state', () => { 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"); - localStorage.setItem(USER_UUID_KEY, "uuid"); - localStorage.setItem(USER_OWNER_UUID_KEY, "ownerUuid"); - - const state = authReducer(initialState, actions.INIT()); + const user = { + email: "test@test.com", + firstName: "John", + lastName: "Doe", + uuid: "uuid", + ownerUuid: "ownerUuid", + identityUrl: "identityUrl", + prefs: {}, + isAdmin: false + }; + const state = reducer(initialState, authActions.INIT({ user, token: "token" })); expect(state).toEqual({ apiToken: "token", - user: { - email: "test@test.com", - firstName: "John", - lastName: "Doe", - uuid: "uuid", - ownerUuid: "ownerUuid" - } + user, + sshKeys: [] }); }); - it('should store token in local storage', () => { + it('should save api token', () => { const initialState = undefined; - const state = authReducer(initialState, actions.SAVE_API_TOKEN("token")); + const state = reducer(initialState, authActions.SAVE_API_TOKEN("token")); expect(state).toEqual({ apiToken: "token", - user: undefined + user: undefined, + sshKeys: [] }); - - expect(localStorage.getItem(API_TOKEN_KEY)).toBe("token"); }); it('should set user details on success fetch', () => { const initialState = undefined; - const userDetails = { + const user = { email: "test@test.com", - first_name: "John", - last_name: "Doe", + firstName: "John", + lastName: "Doe", uuid: "uuid", - owner_uuid: "ownerUuid", - is_admin: true + ownerUuid: "ownerUuid", + identityUrl: "identityUrl", + prefs: {}, + isAdmin: false }; - const state = authReducer(initialState, actions.USER_DETAILS_SUCCESS(userDetails)); + const state = reducer(initialState, authActions.USER_DETAILS_SUCCESS(user)); expect(state).toEqual({ apiToken: undefined, + sshKeys: [], user: { email: "test@test.com", firstName: "John", lastName: "Doe", uuid: "uuid", ownerUuid: "ownerUuid", + identityUrl: "identityUrl", + prefs: {}, + isAdmin: false } }); - - expect(localStorage.getItem(API_TOKEN_KEY)).toBe("token"); - }); - - it('should fire external url to login', () => { - const initialState = undefined; - window.location.assign = jest.fn(); - authReducer(initialState, actions.LOGIN()); - expect(window.location.assign).toBeCalledWith( - `${API_HOST}/login?return_to=${window.location.protocol}//${window.location.host}/token` - ); - }); - - it('should fire external url to logout', () => { - const initialState = undefined; - window.location.assign = jest.fn(); - authReducer(initialState, actions.LOGOUT()); - expect(window.location.assign).toBeCalledWith( - `${API_HOST}/logout?return_to=${location.protocol}//${location.host}` - ); }); });