1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { createTree, getNodeValue, getNodeChildrenIds } from "~/models/tree";
6 import { treePickerReducer } from "./tree-picker-reducer";
7 import { treePickerActions } from "./tree-picker-actions";
8 import { TreeItemStatus } from "~/components/tree/tree";
9 import { initTreeNode } from '~/models/tree';
11 describe('TreePickerReducer', () => {
12 it('LOAD_TREE_PICKER_NODE - initial state', () => {
13 const tree = createTree<{}>();
14 const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" }));
15 expect(newState).toEqual({ 'projects': tree });
18 it('LOAD_TREE_PICKER_NODE', () => {
19 const node = initTreeNode({ id: '1', value: '1' });
21 projects: createTree<{}>()
23 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
24 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })));
26 expect(getNodeValue('1')(newState.projects)).toEqual({
27 ...initTreeNode({ id: '1', value: '1' }),
28 status: TreeItemStatus.PENDING
32 it('LOAD_TREE_PICKER_NODE_SUCCESS - initial state', () => {
33 const subNode = initTreeNode({ id: '1.1', value: '1.1' });
34 const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [subNode], pickerId: "projects" }));
35 expect(getNodeChildrenIds('')(newState.projects)).toEqual(['1.1']);
38 it('LOAD_TREE_PICKER_NODE_SUCCESS', () => {
39 const node = initTreeNode({ id: '1', value: '1' });
40 const subNode = initTreeNode({ id: '1.1', value: '1.1' });
42 projects: createTree<{}>()
44 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
45 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '1', nodes: [subNode], pickerId: "projects" })));
46 expect(getNodeChildrenIds('1')(newState.projects)).toEqual(['1.1']);
47 expect(getNodeValue('1')(newState.projects)).toEqual({
48 ...initTreeNode({ id: '1', value: '1' }),
49 status: TreeItemStatus.LOADED
53 it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - collapsed', () => {
54 const node = initTreeNode({ id: '1', value: '1' });
56 projects: createTree<{}>()
58 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
59 .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
60 expect(getNodeValue('1')(newState.projects)).toEqual({
61 ...initTreeNode({ id: '1', value: '1' }),
66 it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - expanded', () => {
67 const node = initTreeNode({ id: '1', value: '1' });
69 projects: createTree<{}>()
71 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
72 .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })))
73 .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
74 expect(getNodeValue('1')(newState.projects)).toEqual({
75 ...initTreeNode({ id: '1', value: '1' }),
80 it('TOGGLE_TREE_PICKER_NODE_SELECT - selected', () => {
81 const node = initTreeNode({ id: '1', value: '1' });
83 projects: createTree<{}>()
85 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
86 .map(state => treePickerReducer(state, treePickerActions.ACTIVATE_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })));
87 expect(getNodeValue('1')(newState.projects)).toEqual({
88 ...initTreeNode({ id: '1', value: '1' }),
93 it('TOGGLE_TREE_PICKER_NODE_SELECT - not selected', () => {
94 const node = initTreeNode({ id: '1', value: '1' });
96 projects: createTree<{}>()
98 .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
99 .map(state => treePickerReducer(state, treePickerActions.ACTIVATE_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })))
100 .map(state => treePickerReducer(state, treePickerActions.ACTIVATE_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })));
101 expect(getNodeValue('1')(newState.projects)).toEqual({
102 ...initTreeNode({ id: '1', value: '1' }),