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