1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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";
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 });
19 it('LOAD_TREE_PICKER_NODE', () => {
20 const node = createTreePickerNode({ id: '1', value: '1' });
22 projects: createTree<TreePickerNode>()
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" })));
27 expect(getNodeValue('1')(newState.projects)).toEqual({
28 ...createTreePickerNode({ id: '1', value: '1' }),
29 status: TreeItemStatus.PENDING
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']);
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' });
43 projects: createTree<TreePickerNode>()
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
54 it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - collapsed', () => {
55 const node = createTreePickerNode({ id: '1', value: '1' });
57 projects: createTree<TreePickerNode>()
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' }),
67 it('TOGGLE_TREE_PICKER_NODE_COLLAPSE - expanded', () => {
68 const node = createTreePickerNode({ id: '1', value: '1' });
70 projects: createTree<TreePickerNode>()
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' }),
81 it('TOGGLE_TREE_PICKER_NODE_SELECT - selected', () => {
82 const node = createTreePickerNode({ id: '1', value: '1' });
84 projects: createTree<TreePickerNode>()
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' }),
94 it('TOGGLE_TREE_PICKER_NODE_SELECT - not selected', () => {
95 const node = createTreePickerNode({ id: '1', value: '1' });
97 projects: createTree<TreePickerNode>()
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' }),