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