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', () => {
11 it('should add new project to the list', () => {
12 const initialState = undefined;
16 createdAt: '2018-01-01',
17 modifiedAt: '2018-01-01',
18 ownerUuid: 'owner-test123',
20 kind: ResourceKind.PROJECT
23 const state = projectsReducer(initialState, actions.CREATE_PROJECT(project));
24 expect(state.items[0].data).toEqual(project);
27 it('should load projects', () => {
28 const initialState = undefined;
32 createdAt: '2018-01-01',
33 modifiedAt: '2018-01-01',
34 ownerUuid: 'owner-test123',
36 kind: ResourceKind.PROJECT
39 const projects = [project, project];
40 const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
41 expect(state).toEqual({
62 it('should remove activity on projects list', () => {
63 const initialState = {
68 createdAt: '2018-01-01',
69 modifiedAt: '2018-01-01',
70 ownerUuid: 'owner-test123',
72 kind: ResourceKind.PROJECT
80 creator: { opened: false, pending: false, ownerUuid: "" },
87 createdAt: '2018-01-01',
88 modifiedAt: '2018-01-01',
89 ownerUuid: 'owner-test123',
91 kind: ResourceKind.PROJECT
101 const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
102 expect(state).toEqual(project);
105 it('should toggle project tree item activity', () => {
106 const initialState = {
111 createdAt: '2018-01-01',
112 modifiedAt: '2018-01-01',
113 ownerUuid: 'owner-test123',
115 kind: ResourceKind.PROJECT
123 creator: { opened: false, pending: false, ownerUuid: "" }
130 createdAt: '2018-01-01',
131 modifiedAt: '2018-01-01',
132 ownerUuid: 'owner-test123',
134 kind: ResourceKind.PROJECT,
143 creator: { opened: false, pending: false, ownerUuid: "" },
146 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
147 expect(state).toEqual(project);
151 it('should close project tree item ', () => {
152 const initialState = {
157 createdAt: '2018-01-01',
158 modifiedAt: '2018-01-01',
159 ownerUuid: 'owner-test123',
161 kind: ResourceKind.PROJECT
170 creator: { opened: false, pending: false, ownerUuid: "" }
177 createdAt: '2018-01-01',
178 modifiedAt: '2018-01-01',
179 ownerUuid: 'owner-test123',
181 kind: ResourceKind.PROJECT
190 creator: { opened: false, pending: false, ownerUuid: "" },
193 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
194 expect(state).toEqual(project);
198 describe("findTreeBranch", () => {
199 const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
205 status: TreeItemStatus.Initial
208 it("should return an array that matches path to the given item", () => {
209 const tree: Array<TreeItem<string>> = [
210 createTreeItem("1", [
211 createTreeItem("1.1", [
212 createTreeItem("1.1.1"),
213 createTreeItem("1.1.2")
216 createTreeItem("2", [
217 createTreeItem("2.1", [
218 createTreeItem("2.1.1"),
219 createTreeItem("2.1.2")
223 const branch = getTreePath(tree, "2.1.1");
224 expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
227 it("should return empty array if item is not found", () => {
228 const tree: Array<TreeItem<string>> = [
229 createTreeItem("1", [
230 createTreeItem("1.1", [
231 createTreeItem("1.1.1"),
232 createTreeItem("1.1.2")
235 createTreeItem("2", [
236 createTreeItem("2.1", [
237 createTreeItem("2.1.1"),
238 createTreeItem("2.1.2")
242 expect(getTreePath(tree, "3")).toHaveLength(0);