Merge branch 'master'
[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, { findTreeBranch } 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
59 describe("findTreeBranch", () => {
60
61     const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
62         id,
63         items,
64         active: false,
65         data: "",
66         open: false,
67         status: TreeItemStatus.Initial
68     });
69
70     it("should return an array that matches path to the given item", () => {
71         const tree: Array<TreeItem<string>> = [
72             createTreeItem("1", [
73                 createTreeItem("1.1", [
74                     createTreeItem("1.1.1"),
75                     createTreeItem("1.1.2")
76                 ])
77             ]),
78             createTreeItem("2", [
79                 createTreeItem("2.1", [
80                     createTreeItem("2.1.1"),
81                     createTreeItem("2.1.2")
82                 ])
83             ])
84         ];
85         const branch = findTreeBranch(tree, "2.1.1");
86         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
87     });
88
89     it("should return empty array if item is not found", () => {
90         const tree: Array<TreeItem<string>> = [
91             createTreeItem("1", [
92                 createTreeItem("1.1", [
93                     createTreeItem("1.1.1"),
94                     createTreeItem("1.1.2")
95                 ])
96             ]),
97             createTreeItem("2", [
98                 createTreeItem("2.1", [
99                     createTreeItem("2.1.1"),
100                     createTreeItem("2.1.2")
101                 ])
102             ])
103         ];
104         expect(findTreeBranch(tree, "3")).toHaveLength(0);
105     });
106
107 });