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/resource";
10 describe('project-reducer', () => {
12 it('should load projects', () => {
13 const initialState = undefined;
17 createdAt: '2018-01-01',
18 modifiedAt: '2018-01-01',
19 ownerUuid: 'owner-test123',
21 kind: ResourceKind.PROJECT
24 const projects = [project, project];
25 const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
26 expect(state).toEqual({
52 it('should remove activity on projects list', () => {
53 const initialState = {
58 createdAt: '2018-01-01',
59 modifiedAt: '2018-01-01',
60 ownerUuid: 'owner-test123',
62 kind: ResourceKind.PROJECT
70 creator: { opened: false, pending: false, ownerUuid: "" },
77 createdAt: '2018-01-01',
78 modifiedAt: '2018-01-01',
79 ownerUuid: 'owner-test123',
81 kind: ResourceKind.PROJECT
89 creator: { opened: false, pending: false, ownerUuid: "" },
92 const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
93 expect(state).toEqual(project);
96 it('should toggle project tree item activity', () => {
97 const initialState = {
102 createdAt: '2018-01-01',
103 modifiedAt: '2018-01-01',
104 ownerUuid: 'owner-test123',
106 kind: ResourceKind.PROJECT
114 creator: { opened: false, pending: false, ownerUuid: "" }
121 createdAt: '2018-01-01',
122 modifiedAt: '2018-01-01',
123 ownerUuid: 'owner-test123',
125 kind: ResourceKind.PROJECT,
134 creator: { opened: false, pending: false, ownerUuid: "" },
137 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
138 expect(state).toEqual(project);
142 it('should close project tree item ', () => {
143 const initialState = {
148 createdAt: '2018-01-01',
149 modifiedAt: '2018-01-01',
150 ownerUuid: 'owner-test123',
152 kind: ResourceKind.PROJECT
161 creator: { opened: false, pending: false, ownerUuid: "" }
168 createdAt: '2018-01-01',
169 modifiedAt: '2018-01-01',
170 ownerUuid: 'owner-test123',
172 kind: ResourceKind.PROJECT
181 creator: { opened: false, pending: false, ownerUuid: "" },
184 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
185 expect(state).toEqual(project);
189 describe("findTreeBranch", () => {
190 const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
196 status: TreeItemStatus.Initial
199 it("should return an array that matches path to the given item", () => {
200 const tree: Array<TreeItem<string>> = [
201 createTreeItem("1", [
202 createTreeItem("1.1", [
203 createTreeItem("1.1.1"),
204 createTreeItem("1.1.2")
207 createTreeItem("2", [
208 createTreeItem("2.1", [
209 createTreeItem("2.1.1"),
210 createTreeItem("2.1.2")
214 const branch = getTreePath(tree, "2.1.1");
215 expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
218 it("should return empty array if item is not found", () => {
219 const tree: Array<TreeItem<string>> = [
220 createTreeItem("1", [
221 createTreeItem("1.1", [
222 createTreeItem("1.1.1"),
223 createTreeItem("1.1.2")
226 createTreeItem("2", [
227 createTreeItem("2.1", [
228 createTreeItem("2.1.1"),
229 createTreeItem("2.1.2")
233 expect(getTreePath(tree, "3")).toHaveLength(0);