Fix tests
[arvados-workbench2.git] / src / store / project / project-reducer.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import projectsReducer, { getTreePath } from "./project-reducer";
6 import actions from "./project-action";
7 import { TreeItem, TreeItemStatus } from "../../components/tree/tree";
8 import { ResourceKind } from "../../models/kinds";
9 import { mockProjectResource } from "../../models/test-utils";
10 import { ProjectResource } from "../../models/project";
11 import { GroupClass } from "../../models/group";
12
13 describe('project-reducer', () => {
14
15     it('should load projects', () => {
16         const initialState = undefined;
17
18         const projects = [mockProjectResource({ uuid: "1" }), mockProjectResource({ uuid: "2" })];
19         const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
20         expect(state).toEqual({
21             items: [{
22                 active: false,
23                 open: false,
24                 id: "1",
25                 items: [],
26                 data: mockProjectResource({ uuid: "1" }),
27                 status: 0
28             }, {
29                 active: false,
30                 open: false,
31                 id: "2",
32                 items: [],
33                 data: mockProjectResource({ uuid: "2" }),
34                 status: 0
35             }
36             ],
37             currentItemId: "",
38             creator: {
39                 opened: false,
40                 ownerUuid: "",
41                 pending: false
42             }
43         });
44     });
45
46     it('should remove activity on projects list', () => {
47         const initialState = {
48             items: [{
49                 data: mockProjectResource(),
50                 id: "1",
51                 open: true,
52                 active: true,
53                 status: 1
54             }],
55             currentItemId: "1",
56             creator: { opened: false, pending: false, ownerUuid: "" },
57         };
58         const project = {
59             items: [{
60                 data: mockProjectResource(),
61                 id: "1",
62                 open: true,
63                 active: false,
64                 status: 1
65             }],
66             currentItemId: "",
67             creator: { opened: false, pending: false, ownerUuid: "" },
68         };
69
70         const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
71         expect(state).toEqual(project);
72     });
73
74     it('should toggle project tree item activity', () => {
75         const initialState = {
76             items: [{
77                 data: mockProjectResource(),
78                 id: "1",
79                 open: true,
80                 active: false,
81                 status: 1
82             }],
83             currentItemId: "1",
84             creator: { opened: false, pending: false, ownerUuid: "" }
85         };
86         const project = {
87             items: [{
88                 data: mockProjectResource(),
89                 id: "1",
90                 open: true,
91                 active: true,
92                 status: 1,
93                 toggled: true
94             }],
95             currentItemId: "1",
96             creator: { opened: false, pending: false, ownerUuid: "" },
97         };
98
99         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
100         expect(state).toEqual(project);
101     });
102
103
104     it('should close project tree item ', () => {
105         const initialState = {
106             items: [{
107                 data: mockProjectResource(),
108                 id: "1",
109                 open: true,
110                 active: false,
111                 status: 1,
112                 toggled: false,
113             }],
114             currentItemId: "1",
115             creator: { opened: false, pending: false, ownerUuid: "" }
116         };
117         const project = {
118             items: [{
119                 data: mockProjectResource(),
120                 id: "1",
121                 open: false,
122                 active: false,
123                 status: 1,
124                 toggled: true
125             }],
126             currentItemId: "1",
127             creator: { opened: false, pending: false, ownerUuid: "" },
128         };
129
130         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
131         expect(state).toEqual(project);
132     });
133 });
134
135 describe("findTreeBranch", () => {
136     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
137         id,
138         items,
139         active: false,
140         data: "",
141         open: false,
142         status: TreeItemStatus.Initial
143     });
144
145     it("should return an array that matches path to the given item", () => {
146         const tree: Array<TreeItem<string>> = [
147             createTreeItem("1", [
148                 createTreeItem("1.1", [
149                     createTreeItem("1.1.1"),
150                     createTreeItem("1.1.2")
151                 ])
152             ]),
153             createTreeItem("2", [
154                 createTreeItem("2.1", [
155                     createTreeItem("2.1.1"),
156                     createTreeItem("2.1.2")
157                 ])
158             ])
159         ];
160         const branch = getTreePath(tree, "2.1.1");
161         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
162     });
163
164     it("should return empty array if item is not found", () => {
165         const tree: Array<TreeItem<string>> = [
166             createTreeItem("1", [
167                 createTreeItem("1.1", [
168                     createTreeItem("1.1.1"),
169                     createTreeItem("1.1.2")
170                 ])
171             ]),
172             createTreeItem("2", [
173                 createTreeItem("2.1", [
174                     createTreeItem("2.1.1"),
175                     createTreeItem("2.1.2")
176                 ])
177             ])
178         ];
179         expect(getTreePath(tree, "3")).toHaveLength(0);
180     });
181
182 });