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 actions from "./project-action";
7 import { TreeItem, TreeItemStatus } from "../../components/tree/tree";
8 import { ResourceKind } from "../../models/kinds";
9 import { mockProjectResource } from "../../models/test-utils";
10 import { ProjectResource } from "../../models/project";
11 import { GroupClass } from "../../models/group";
13 describe('project-reducer', () => {
15 it('should load projects', () => {
16 const initialState = undefined;
18 const projects = [mockProjectResource({ uuid: "1" }), mockProjectResource({ uuid: "2" })];
19 const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
20 expect(state).toEqual({
26 data: mockProjectResource({ uuid: "1" }),
33 data: mockProjectResource({ uuid: "2" }),
46 it('should remove activity on projects list', () => {
47 const initialState = {
49 data: mockProjectResource(),
56 creator: { opened: false, pending: false, ownerUuid: "" },
60 data: mockProjectResource(),
67 creator: { opened: false, pending: false, ownerUuid: "" },
70 const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
71 expect(state).toEqual(project);
74 it('should toggle project tree item activity', () => {
75 const initialState = {
77 data: mockProjectResource(),
84 creator: { opened: false, pending: false, ownerUuid: "" }
88 data: mockProjectResource(),
96 creator: { opened: false, pending: false, ownerUuid: "" },
99 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
100 expect(state).toEqual(project);
104 it('should close project tree item ', () => {
105 const initialState = {
107 data: mockProjectResource(),
115 creator: { opened: false, pending: false, ownerUuid: "" }
119 data: mockProjectResource(),
127 creator: { opened: false, pending: false, ownerUuid: "" },
130 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
131 expect(state).toEqual(project);
135 describe("findTreeBranch", () => {
136 const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
142 status: TreeItemStatus.Initial
145 it("should return an array that matches path to the given item", () => {
146 const tree: Array<TreeItem<string>> = [
147 createTreeItem("1", [
148 createTreeItem("1.1", [
149 createTreeItem("1.1.1"),
150 createTreeItem("1.1.2")
153 createTreeItem("2", [
154 createTreeItem("2.1", [
155 createTreeItem("2.1.1"),
156 createTreeItem("2.1.2")
160 const branch = getTreePath(tree, "2.1.1");
161 expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
164 it("should return empty array if item is not found", () => {
165 const tree: Array<TreeItem<string>> = [
166 createTreeItem("1", [
167 createTreeItem("1.1", [
168 createTreeItem("1.1.1"),
169 createTreeItem("1.1.2")
172 createTreeItem("2", [
173 createTreeItem("2.1", [
174 createTreeItem("2.1.1"),
175 createTreeItem("2.1.2")
179 expect(getTreePath(tree, "3")).toHaveLength(0);