Merge branch '13883-arrow-animation-is-not-working-after-loading'
[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                 pending: false
39             }
40         });
41     });
42
43     it('should remove activity on projects list', () => {
44         const initialState = {
45             items: [{
46                 data: mockProjectResource(),
47                 id: "1",
48                 open: true,
49                 active: true,
50                 status: TreeItemStatus.PENDING
51             }],
52             currentItemId: "1",
53             creator: { opened: false, pending: false, ownerUuid: "" },
54         };
55         const project = {
56             items: [{
57                 data: mockProjectResource(),
58                 id: "1",
59                 open: true,
60                 active: false,
61                 status: TreeItemStatus.PENDING
62             }],
63             currentItemId: "",
64             creator: { opened: false, pending: false, ownerUuid: "" },
65         };
66
67         const state = projectsReducer(initialState, projectActions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
68         expect(state).toEqual(project);
69     });
70
71     it('should toggle project tree item activity', () => {
72         const initialState = {
73             items: [{
74                 data: mockProjectResource(),
75                 id: "1",
76                 open: true,
77                 active: false,
78                 status: TreeItemStatus.PENDING
79             }],
80             currentItemId: "1",
81             creator: { opened: false, pending: false, ownerUuid: "" }
82         };
83         const project = {
84             items: [{
85                 data: mockProjectResource(),
86                 id: "1",
87                 open: true,
88                 active: true,
89                 status: TreeItemStatus.PENDING,
90             }],
91             currentItemId: "1",
92             creator: { opened: false, pending: false, ownerUuid: "" },
93         };
94
95         const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
96         expect(state).toEqual(project);
97     });
98
99
100     it('should close project tree item ', () => {
101         const initialState = {
102             items: [{
103                 data: mockProjectResource(),
104                 id: "1",
105                 open: true,
106                 active: false,
107                 status: TreeItemStatus.PENDING,
108             }],
109             currentItemId: "1",
110             creator: { opened: false, pending: false, ownerUuid: "" }
111         };
112         const project = {
113             items: [{
114                 data: mockProjectResource(),
115                 id: "1",
116                 open: false,
117                 active: false,
118                 status: TreeItemStatus.PENDING,
119             }],
120             currentItemId: "1",
121             creator: { opened: false, pending: false, ownerUuid: "" },
122         };
123
124         const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
125         expect(state).toEqual(project);
126     });
127 });
128
129 describe("findTreeBranch", () => {
130     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
131         id,
132         items,
133         active: false,
134         data: "",
135         open: false,
136         status: TreeItemStatus.INITIAL
137     });
138
139     it("should return an array that matches path to the given item", () => {
140         const tree: Array<TreeItem<string>> = [
141             createTreeItem("1", [
142                 createTreeItem("1.1", [
143                     createTreeItem("1.1.1"),
144                     createTreeItem("1.1.2")
145                 ])
146             ]),
147             createTreeItem("2", [
148                 createTreeItem("2.1", [
149                     createTreeItem("2.1.1"),
150                     createTreeItem("2.1.2")
151                 ])
152             ])
153         ];
154         const branch = getTreePath(tree, "2.1.1");
155         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
156     });
157
158     it("should return empty array if item is not found", () => {
159         const tree: Array<TreeItem<string>> = [
160             createTreeItem("1", [
161                 createTreeItem("1.1", [
162                     createTreeItem("1.1.1"),
163                     createTreeItem("1.1.2")
164                 ])
165             ]),
166             createTreeItem("2", [
167                 createTreeItem("2.1", [
168                     createTreeItem("2.1.1"),
169                     createTreeItem("2.1.2")
170                 ])
171             ])
172         ];
173         expect(getTreePath(tree, "3")).toHaveLength(0);
174     });
175
176 });