1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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";
10 describe('project-reducer', () => {
12 it('should load projects', () => {
13 const initialState = undefined;
15 const projects = [mockProjectResource({ uuid: "1" }), mockProjectResource({ uuid: "2" })];
16 const state = projectsReducer(initialState, projectActions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
17 expect(state).toEqual({
23 data: mockProjectResource({ uuid: "1" }),
30 data: mockProjectResource({ uuid: "2" }),
31 status: TreeItemStatus.Initial
43 it('should remove activity on projects list', () => {
44 const initialState = {
46 data: mockProjectResource(),
50 status: TreeItemStatus.Pending
53 creator: { opened: false, pending: false, ownerUuid: "" },
57 data: mockProjectResource(),
61 status: TreeItemStatus.Pending
64 creator: { opened: false, pending: false, ownerUuid: "" },
67 const state = projectsReducer(initialState, projectActions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
68 expect(state).toEqual(project);
71 it('should toggle project tree item activity', () => {
72 const initialState = {
74 data: mockProjectResource(),
78 status: TreeItemStatus.Pending
81 creator: { opened: false, pending: false, ownerUuid: "" }
85 data: mockProjectResource(),
89 status: TreeItemStatus.Pending,
92 creator: { opened: false, pending: false, ownerUuid: "" },
95 const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
96 expect(state).toEqual(project);
100 it('should close project tree item ', () => {
101 const initialState = {
103 data: mockProjectResource(),
107 status: TreeItemStatus.Pending,
110 creator: { opened: false, pending: false, ownerUuid: "" }
114 data: mockProjectResource(),
118 status: TreeItemStatus.Pending,
121 creator: { opened: false, pending: false, ownerUuid: "" },
124 const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
125 expect(state).toEqual(project);
129 describe("findTreeBranch", () => {
130 const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
136 status: TreeItemStatus.Initial
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")
147 createTreeItem("2", [
148 createTreeItem("2.1", [
149 createTreeItem("2.1.1"),
150 createTreeItem("2.1.2")
154 const branch = getTreePath(tree, "2.1.1");
155 expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
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")
166 createTreeItem("2", [
167 createTreeItem("2.1", [
168 createTreeItem("2.1.1"),
169 createTreeItem("2.1.2")
173 expect(getTreePath(tree, "3")).toHaveLength(0);