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";
9 describe('project-reducer', () => {
10 it('should add new project to the list', () => {
11 const initialState = undefined;
15 createdAt: '2018-01-01',
16 modifiedAt: '2018-01-01',
17 ownerUuid: 'owner-test123',
22 const state = projectsReducer(initialState, actions.CREATE_PROJECT(project));
23 expect(state).toEqual([project]);
26 it('should load projects', () => {
27 const initialState = undefined;
31 createdAt: '2018-01-01',
32 modifiedAt: '2018-01-01',
33 ownerUuid: 'owner-test123',
38 const projects = [project, project];
39 const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
40 expect(state).toEqual([{
58 it('should remove activity on projects list', () => {
59 const initialState = [
64 createdAt: '2018-01-01',
65 modifiedAt: '2018-01-01',
66 ownerUuid: 'owner-test123',
81 createdAt: '2018-01-01',
82 modifiedAt: '2018-01-01',
83 ownerUuid: 'owner-test123',
94 const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState[0].id));
95 expect(state).toEqual(project);
98 it('should toggle project tree item activity', () => {
99 const initialState = [
104 createdAt: '2018-01-01',
105 modifiedAt: '2018-01-01',
106 ownerUuid: 'owner-test123',
121 createdAt: '2018-01-01',
122 modifiedAt: '2018-01-01',
123 ownerUuid: 'owner-test123',
134 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState[0].id));
135 expect(state).toEqual(project);
139 it('should close project tree item ', () => {
140 const initialState = [
145 createdAt: '2018-01-01',
146 modifiedAt: '2018-01-01',
147 ownerUuid: 'owner-test123',
163 createdAt: '2018-01-01',
164 modifiedAt: '2018-01-01',
165 ownerUuid: 'owner-test123',
177 const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState[0].id));
178 expect(state).toEqual(project);
182 describe("findTreeBranch", () => {
184 const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
190 status: TreeItemStatus.Initial
193 it("should return an array that matches path to the given item", () => {
194 const tree: Array<TreeItem<string>> = [
195 createTreeItem("1", [
196 createTreeItem("1.1", [
197 createTreeItem("1.1.1"),
198 createTreeItem("1.1.2")
201 createTreeItem("2", [
202 createTreeItem("2.1", [
203 createTreeItem("2.1.1"),
204 createTreeItem("2.1.2")
208 const branch = getTreePath(tree, "2.1.1");
209 expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
212 it("should return empty array if item is not found", () => {
213 const tree: Array<TreeItem<string>> = [
214 createTreeItem("1", [
215 createTreeItem("1.1", [
216 createTreeItem("1.1.1"),
217 createTreeItem("1.1.2")
220 createTreeItem("2", [
221 createTreeItem("2.1", [
222 createTreeItem("2.1.1"),
223 createTreeItem("2.1.2")
227 expect(getTreePath(tree, "3")).toHaveLength(0);