Restric order and filters arguments of favorite list
[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 { 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, actions.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: 0
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: 1
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: 1
62             }],
63             currentItemId: "",
64             creator: { opened: false, pending: false, ownerUuid: "" },
65         };
66
67         const state = projectsReducer(initialState, actions.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: 1
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: 1,
90                 toggled: true
91             }],
92             currentItemId: "1",
93             creator: { opened: false, pending: false, ownerUuid: "" },
94         };
95
96         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
97         expect(state).toEqual(project);
98     });
99
100
101     it('should close project tree item ', () => {
102         const initialState = {
103             items: [{
104                 data: mockProjectResource(),
105                 id: "1",
106                 open: true,
107                 active: false,
108                 status: 1,
109                 toggled: false,
110             }],
111             currentItemId: "1",
112             creator: { opened: false, pending: false, ownerUuid: "" }
113         };
114         const project = {
115             items: [{
116                 data: mockProjectResource(),
117                 id: "1",
118                 open: false,
119                 active: false,
120                 status: 1,
121                 toggled: true
122             }],
123             currentItemId: "1",
124             creator: { opened: false, pending: false, ownerUuid: "" },
125         };
126
127         const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
128         expect(state).toEqual(project);
129     });
130 });
131
132 describe("findTreeBranch", () => {
133     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
134         id,
135         items,
136         active: false,
137         data: "",
138         open: false,
139         status: TreeItemStatus.Initial
140     });
141
142     it("should return an array that matches path to the given item", () => {
143         const tree: Array<TreeItem<string>> = [
144             createTreeItem("1", [
145                 createTreeItem("1.1", [
146                     createTreeItem("1.1.1"),
147                     createTreeItem("1.1.2")
148                 ])
149             ]),
150             createTreeItem("2", [
151                 createTreeItem("2.1", [
152                     createTreeItem("2.1.1"),
153                     createTreeItem("2.1.2")
154                 ])
155             ])
156         ];
157         const branch = getTreePath(tree, "2.1.1");
158         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
159     });
160
161     it("should return empty array if item is not found", () => {
162         const tree: Array<TreeItem<string>> = [
163             createTreeItem("1", [
164                 createTreeItem("1.1", [
165                     createTreeItem("1.1.1"),
166                     createTreeItem("1.1.2")
167                 ])
168             ]),
169             createTreeItem("2", [
170                 createTreeItem("2.1", [
171                     createTreeItem("2.1.1"),
172                     createTreeItem("2.1.2")
173                 ])
174             ])
175         ];
176         expect(getTreePath(tree, "3")).toHaveLength(0);
177     });
178
179 });