Merge branch '13694-Data-operations-Project-creation'
[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/resource";
9
10 describe('project-reducer', () => {
11
12     it('should load projects', () => {
13         const initialState = undefined;
14         const project = {
15             name: 'test',
16             href: 'href',
17             createdAt: '2018-01-01',
18             modifiedAt: '2018-01-01',
19             ownerUuid: 'owner-test123',
20             uuid: 'test123',
21             kind: ResourceKind.PROJECT
22         };
23
24         const projects = [project, project];
25         const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
26         expect(state).toEqual({
27             items: [{
28                 active: false,
29                 open: false,
30                 id: "test123",
31                 items: [],
32                 data: project,
33                 status: 0
34             }, {
35                 active: false,
36                 open: false,
37                 id: "test123",
38                 items: [],
39                 data: project,
40                 status: 0
41             }
42             ],
43             currentItemId: "",
44             creator: {
45                 opened: false,
46                 ownerUuid: "",
47                 pending: false
48             }
49         });
50     });
51
52     it('should remove activity on projects list', () => {
53         const initialState = {
54             items: [{
55                 data: {
56                     name: 'test',
57                     href: 'href',
58                     createdAt: '2018-01-01',
59                     modifiedAt: '2018-01-01',
60                     ownerUuid: 'owner-test123',
61                     uuid: 'test123',
62                     kind: ResourceKind.PROJECT
63                 },
64                 id: "1",
65                 open: true,
66                 active: true,
67                 status: 1
68             }],
69             currentItemId: "1",
70             creator: { opened: false, pending: false, ownerUuid: "" },
71         };
72         const project = {
73             items: [{
74                 data: {
75                     name: 'test',
76                     href: 'href',
77                     createdAt: '2018-01-01',
78                     modifiedAt: '2018-01-01',
79                     ownerUuid: 'owner-test123',
80                     uuid: 'test123',
81                     kind: ResourceKind.PROJECT
82                 },
83                 id: "1",
84                 open: true,
85                 active: false,
86                 status: 1
87             }],
88             currentItemId: "",
89             creator: { opened: false, pending: false, ownerUuid: "" },
90         };
91
92         const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
93         expect(state).toEqual(project);
94     });
95
96     it('should toggle project tree item activity', () => {
97         const initialState = {
98             items: [{
99                 data: {
100                     name: 'test',
101                     href: 'href',
102                     createdAt: '2018-01-01',
103                     modifiedAt: '2018-01-01',
104                     ownerUuid: 'owner-test123',
105                     uuid: 'test123',
106                     kind: ResourceKind.PROJECT
107                 },
108                 id: "1",
109                 open: true,
110                 active: false,
111                 status: 1
112             }],
113             currentItemId: "1",
114             creator: { opened: false, pending: false, ownerUuid: "" }
115         };
116         const project = {
117             items: [{
118                 data: {
119                     name: 'test',
120                     href: 'href',
121                     createdAt: '2018-01-01',
122                     modifiedAt: '2018-01-01',
123                     ownerUuid: 'owner-test123',
124                     uuid: 'test123',
125                     kind: ResourceKind.PROJECT,
126                 },
127                 id: "1",
128                 open: true,
129                 active: true,
130                 status: 1,
131                 toggled: true
132             }],
133             currentItemId: "1",
134             creator: { opened: false, pending: false, ownerUuid: "" },
135         };
136
137         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
138         expect(state).toEqual(project);
139     });
140
141
142     it('should close project tree item ', () => {
143         const initialState = {
144             items: [{
145                 data: {
146                     name: 'test',
147                     href: 'href',
148                     createdAt: '2018-01-01',
149                     modifiedAt: '2018-01-01',
150                     ownerUuid: 'owner-test123',
151                     uuid: 'test123',
152                     kind: ResourceKind.PROJECT
153                 },
154                 id: "1",
155                 open: true,
156                 active: false,
157                 status: 1,
158                 toggled: false,
159             }],
160             currentItemId: "1",
161             creator: { opened: false, pending: false, ownerUuid: "" }
162         };
163         const project = {
164             items: [{
165                 data: {
166                     name: 'test',
167                     href: 'href',
168                     createdAt: '2018-01-01',
169                     modifiedAt: '2018-01-01',
170                     ownerUuid: 'owner-test123',
171                     uuid: 'test123',
172                     kind: ResourceKind.PROJECT
173                 },
174                 id: "1",
175                 open: false,
176                 active: false,
177                 status: 1,
178                 toggled: true
179             }],
180             currentItemId: "1",
181             creator: { opened: false, pending: false, ownerUuid: "" },
182         };
183
184         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
185         expect(state).toEqual(project);
186     });
187 });
188
189 describe("findTreeBranch", () => {
190     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
191         id,
192         items,
193         active: false,
194         data: "",
195         open: false,
196         status: TreeItemStatus.Initial
197     });
198
199     it("should return an array that matches path to the given item", () => {
200         const tree: Array<TreeItem<string>> = [
201             createTreeItem("1", [
202                 createTreeItem("1.1", [
203                     createTreeItem("1.1.1"),
204                     createTreeItem("1.1.2")
205                 ])
206             ]),
207             createTreeItem("2", [
208                 createTreeItem("2.1", [
209                     createTreeItem("2.1.1"),
210                     createTreeItem("2.1.2")
211                 ])
212             ])
213         ];
214         const branch = getTreePath(tree, "2.1.1");
215         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
216     });
217
218     it("should return empty array if item is not found", () => {
219         const tree: Array<TreeItem<string>> = [
220             createTreeItem("1", [
221                 createTreeItem("1.1", [
222                     createTreeItem("1.1.1"),
223                     createTreeItem("1.1.2")
224                 ])
225             ]),
226             createTreeItem("2", [
227                 createTreeItem("2.1", [
228                     createTreeItem("2.1.1"),
229                     createTreeItem("2.1.2")
230                 ])
231             ])
232         ];
233         expect(getTreePath(tree, "3")).toHaveLength(0);
234     });
235
236 });