15088: Adds link account panel reducer tests
[arvados-workbench2.git] / src / store / link-account-panel / link-account-panel-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { linkAccountPanelActions, LinkAccountPanelAction } from "~/store/link-account-panel/link-account-panel-actions";
6 import { UserResource } from "~/models/user";
7
8 export enum LinkAccountPanelStatus {
9     INITIAL,
10     HAS_SESSION_DATA,
11     LINKING,
12     ERROR
13 }
14
15 export enum LinkAccountPanelError {
16     NONE,
17     INACTIVE,
18     NON_ADMIN,
19     SAME_USER
20 }
21
22 export enum OriginatingUser {
23     NONE,
24     TARGET_USER,
25     USER_TO_LINK
26 }
27
28 export interface LinkAccountPanelState {
29     originatingUser: OriginatingUser | undefined;
30     targetUser: UserResource | undefined;
31     targetUserToken: string | undefined;
32     userToLink: UserResource | undefined;
33     userToLinkToken: string | undefined;
34     status: LinkAccountPanelStatus;
35     error: LinkAccountPanelError;
36 }
37
38 const initialState = {
39     originatingUser: OriginatingUser.NONE,
40     targetUser: undefined,
41     targetUserToken: undefined,
42     userToLink: undefined,
43     userToLinkToken: undefined,
44     status: LinkAccountPanelStatus.INITIAL,
45     error: LinkAccountPanelError.NONE
46 };
47
48 export const linkAccountPanelReducer = (state: LinkAccountPanelState = initialState, action: LinkAccountPanelAction) =>
49     linkAccountPanelActions.match(action, {
50         default: () => state,
51         LINK_INIT: ({ targetUser }) => ({
52             targetUser, targetUserToken: undefined,
53             userToLink: undefined, userToLinkToken: undefined,
54             status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
55         }),
56         LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
57             originatingUser,
58             targetUser, targetUserToken,
59             userToLink, userToLinkToken,
60             status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
61         }),
62         LINK_INVALID: ({originatingUser, targetUser, userToLink, error}) => ({
63             originatingUser,
64             targetUser, targetUserToken: undefined,
65             userToLink, userToLinkToken: undefined,
66             error, status: LinkAccountPanelStatus.ERROR
67         }),
68         HAS_SESSION_DATA: () => ({
69             ...state, status: LinkAccountPanelStatus.HAS_SESSION_DATA
70         })
71     });