Added central action for navigation
[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     it('should add new project to the list', () => {
12         const initialState = undefined;
13         const project = {
14             name: 'test',
15             href: 'href',
16             createdAt: '2018-01-01',
17             modifiedAt: '2018-01-01',
18             ownerUuid: 'owner-test123',
19             uuid: 'test123',
20             kind: ResourceKind.PROJECT
21         };
22
23         const state = projectsReducer(initialState, actions.CREATE_PROJECT(project));
24         expect(state).toEqual([project]);
25     });
26
27     it('should load projects', () => {
28         const initialState = undefined;
29         const project = {
30             name: 'test',
31             href: 'href',
32             createdAt: '2018-01-01',
33             modifiedAt: '2018-01-01',
34             ownerUuid: 'owner-test123',
35             uuid: 'test123',
36             kind: ResourceKind.PROJECT
37         };
38
39         const projects = [project, project];
40         const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
41         expect(state).toEqual([{
42                 active: false,
43                 open: false,
44                 id: "test123",
45                 items: [],
46                 data: project,
47                 status: 0
48             }, {
49                 active: false,
50                 open: false,
51                 id: "test123",
52                 items: [],
53                 data: project,
54                 status: 0
55             }
56         ]);
57     });
58 });
59
60 describe("findTreeBranch", () => {
61
62     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
63         id,
64         items,
65         active: false,
66         data: "",
67         open: false,
68         status: TreeItemStatus.Initial
69     });
70
71     it("should return an array that matches path to the given item", () => {
72         const tree: Array<TreeItem<string>> = [
73             createTreeItem("1", [
74                 createTreeItem("1.1", [
75                     createTreeItem("1.1.1"),
76                     createTreeItem("1.1.2")
77                 ])
78             ]),
79             createTreeItem("2", [
80                 createTreeItem("2.1", [
81                     createTreeItem("2.1.1"),
82                     createTreeItem("2.1.2")
83                 ])
84             ])
85         ];
86         const branch = getTreePath(tree, "2.1.1");
87         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
88     });
89
90     it("should return empty array if item is not found", () => {
91         const tree: Array<TreeItem<string>> = [
92             createTreeItem("1", [
93                 createTreeItem("1.1", [
94                     createTreeItem("1.1.1"),
95                     createTreeItem("1.1.2")
96                 ])
97             ]),
98             createTreeItem("2", [
99                 createTreeItem("2.1", [
100                     createTreeItem("2.1.1"),
101                     createTreeItem("2.1.2")
102                 ])
103             ])
104         ];
105         expect(getTreePath(tree, "3")).toHaveLength(0);
106     });
107
108 });