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