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).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([{
59 it('should remove activity on projects list', () => {
60 const initialState = {
65 createdAt: '2018-01-01',
66 modifiedAt: '2018-01-01',
67 ownerUuid: 'owner-test123',
69 kind: ResourceKind.PROJECT
83 createdAt: '2018-01-01',
84 modifiedAt: '2018-01-01',
85 ownerUuid: 'owner-test123',
87 kind: ResourceKind.PROJECT
97 const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState[0].id));
98 expect(state).toEqual(project);
101 it('should toggle project tree item activity', () => {
102 const initialState = {
107 createdAt: '2018-01-01',
108 modifiedAt: '2018-01-01',
109 ownerUuid: 'owner-test123',
111 kind: ResourceKind.PROJECT
125 createdAt: '2018-01-01',
126 modifiedAt: '2018-01-01',
127 ownerUuid: 'owner-test123',
129 kind: ResourceKind.PROJECT
139 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState[0].id));
140 expect(state).toEqual(project);
144 it('should close project tree item ', () => {
145 const initialState = {
150 createdAt: '2018-01-01',
151 modifiedAt: '2018-01-01',
152 ownerUuid: 'owner-test123',
154 kind: ResourceKind.PROJECT
169 createdAt: '2018-01-01',
170 modifiedAt: '2018-01-01',
171 ownerUuid: 'owner-test123',
173 kind: ResourceKind.PROJECT
184 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState[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);