13902-ui-move-to-popup
[arvados-workbench2.git] / src / store / tree-picker / tree-picker-reducer.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { createTree, getNodeValue, getNodeChildren } from "../../models/tree";
6 import { TreePickerNode, createTreePickerNode } from "./tree-picker";
7 import { treePickerReducer } from "./tree-picker-reducer";
8 import { treePickerActions } from "./tree-picker-actions";
9 import { TreeItemStatus } from "../../components/tree/tree";
10
11
12 describe('TreePickerReducer', () => {
13     it('LOAD_TREE_PICKER_NODE - initial state', () => {
14         const tree = createTree<TreePickerNode>();
15         const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" }));
16         expect(newState).toEqual({ 'projects': tree });
17     });
18
19     it('LOAD_TREE_PICKER_NODE', () => {
20         const node = createTreePickerNode({ id: '1', value: '1' });
21         const [newState] = [{
22             projects: createTree<TreePickerNode>()
23         }]
24             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
25             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })));
26
27         expect(getNodeValue('1')(newState.projects)).toEqual({
28             ...createTreePickerNode({ id: '1', value: '1' }),
29             status: TreeItemStatus.PENDING
30         });
31     });
32
33     it('LOAD_TREE_PICKER_NODE_SUCCESS - initial state', () => {
34         const subNode = createTreePickerNode({ id: '1.1', value: '1.1' });
35         const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [subNode], pickerId: "projects" }));
36         expect(getNodeChildren('')(newState.projects)).toEqual(['1.1']);
37     });
38
39     it('LOAD_TREE_PICKER_NODE_SUCCESS', () => {
40         const node = createTreePickerNode({ id: '1', value: '1' });
41         const subNode = createTreePickerNode({ id: '1.1', value: '1.1' });
42         const [newState] = [{
43             projects: createTree<TreePickerNode>()
44         }]
45             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
46             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '1', nodes: [subNode], pickerId: "projects" })));
47         expect(getNodeChildren('1')(newState.projects)).toEqual(['1.1']);
48         expect(getNodeValue('1')(newState.projects)).toEqual({
49             ...createTreePickerNode({ id: '1', value: '1' }),
50             status: TreeItemStatus.LOADED
51         });
52     });
53
54     it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - collapsed', () => {
55         const node = createTreePickerNode({ id: '1', value: '1' });
56         const [newState] = [{
57             projects: createTree<TreePickerNode>()
58         }]
59             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
60             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
61         expect(getNodeValue('1')(newState.projects)).toEqual({
62             ...createTreePickerNode({ id: '1', value: '1' }),
63             collapsed: false
64         });
65     });
66
67     it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - expanded', () => {
68         const node = createTreePickerNode({ id: '1', value: '1' });
69         const [newState] = [{
70             projects: createTree<TreePickerNode>()
71         }]
72             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
73             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })))
74             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
75         expect(getNodeValue('1')(newState.projects)).toEqual({
76             ...createTreePickerNode({ id: '1', value: '1' }),
77             collapsed: true
78         });
79     });
80
81     it('TOGGLE_TREE_PICKER_NODE_SELECT - selected', () => {
82         const node = createTreePickerNode({ id: '1', value: '1' });
83         const [newState] = [{
84             projects: createTree<TreePickerNode>()
85         }]
86             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
87             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })));
88         expect(getNodeValue('1')(newState.projects)).toEqual({
89             ...createTreePickerNode({ id: '1', value: '1' }),
90             selected: true
91         });
92     });
93
94     it('TOGGLE_TREE_PICKER_NODE_SELECT - not selected', () => {
95         const node = createTreePickerNode({ id: '1', value: '1' });
96         const [newState] = [{
97             projects: createTree<TreePickerNode>()
98         }]
99             .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
100             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })))
101             .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })));
102         expect(getNodeValue('1')(newState.projects)).toEqual({
103             ...createTreePickerNode({ id: '1', value: '1' }),
104             selected: false
105         });
106     });
107 });