X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/28bb06ae7b9983da793f2459c5cc3e8debd71949..9dcc70fc137fac02991f3ebe830748badb4eab35:/src/store/project/project-reducer.test.ts diff --git a/src/store/project/project-reducer.test.ts b/src/store/project/project-reducer.test.ts index 9c1ed3b4..c80f18c8 100644 --- a/src/store/project/project-reducer.test.ts +++ b/src/store/project/project-reducer.test.ts @@ -2,8 +2,10 @@ // // SPDX-License-Identifier: AGPL-3.0 -import projectsReducer from "./project-reducer"; +import projectsReducer, { getTreePath } from "./project-reducer"; import actions from "./project-action"; +import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; +import { ResourceKind } from "../../models/resource"; describe('project-reducer', () => { it('should add new project to the list', () => { @@ -14,11 +16,12 @@ describe('project-reducer', () => { createdAt: '2018-01-01', modifiedAt: '2018-01-01', ownerUuid: 'owner-test123', - uuid: 'test123' + uuid: 'test123', + kind: ResourceKind.PROJECT }; const state = projectsReducer(initialState, actions.CREATE_PROJECT(project)); - expect(state).toEqual([project]); + expect(state.items[0].data).toEqual(project); }); it('should load projects', () => { @@ -29,24 +32,209 @@ describe('project-reducer', () => { createdAt: '2018-01-01', modifiedAt: '2018-01-01', ownerUuid: 'owner-test123', - uuid: 'test123' + uuid: 'test123', + kind: ResourceKind.PROJECT }; const projects = [project, project]; - const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({projects, parentItemId: undefined})); - expect(state).toEqual([{ + const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined })); + expect(state).toEqual({ + items: [{ active: false, open: false, id: "test123", items: [], - data: project + data: project, + status: 0 }, { active: false, open: false, id: "test123", items: [], - data: project + data: project, + status: 0 } - ]); + ], + currentItemId: "" + }); }); + + it('should remove activity on projects list', () => { + const initialState = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT + }, + id: "1", + open: true, + active: true, + status: 1 + }], + currentItemId: "1" + }; + const project = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT + }, + id: "1", + open: true, + active: false, + status: 1 + }], + currentItemId: "" + }; + + const state = projectsReducer(initialState, actions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id)); + expect(state).toEqual(project); + }); + + it('should toggle project tree item activity', () => { + const initialState = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT + }, + id: "1", + open: true, + active: false, + status: 1 + }], + currentItemId: "1" + }; + const project = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT, + }, + id: "1", + open: true, + active: true, + status: 1, + toggled: true + }], + currentItemId: "1" + }; + + const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id)); + expect(state).toEqual(project); + }); + + + it('should close project tree item ', () => { + const initialState = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT + }, + id: "1", + open: true, + active: false, + status: 1, + toggled: false, + }], + currentItemId: "1" + }; + const project = { + items: [{ + data: { + name: 'test', + href: 'href', + createdAt: '2018-01-01', + modifiedAt: '2018-01-01', + ownerUuid: 'owner-test123', + uuid: 'test123', + kind: ResourceKind.PROJECT + }, + id: "1", + open: false, + active: false, + status: 1, + toggled: true + }], + currentItemId: "1" + }; + + const state = projectsReducer(initialState, actions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id)); + expect(state).toEqual(project); + }); +}); + +describe("findTreeBranch", () => { + const createTreeItem = (id: string, items?: Array>): TreeItem => ({ + id, + items, + active: false, + data: "", + open: false, + status: TreeItemStatus.Initial + }); + + it("should return an array that matches path to the given item", () => { + const tree: Array> = [ + createTreeItem("1", [ + createTreeItem("1.1", [ + createTreeItem("1.1.1"), + createTreeItem("1.1.2") + ]) + ]), + createTreeItem("2", [ + createTreeItem("2.1", [ + createTreeItem("2.1.1"), + createTreeItem("2.1.2") + ]) + ]) + ]; + const branch = getTreePath(tree, "2.1.1"); + expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]); + }); + + it("should return empty array if item is not found", () => { + const tree: Array> = [ + createTreeItem("1", [ + createTreeItem("1.1", [ + createTreeItem("1.1.1"), + createTreeItem("1.1.2") + ]) + ]), + createTreeItem("2", [ + createTreeItem("2.1", [ + createTreeItem("2.1.1"), + createTreeItem("2.1.2") + ]) + ]) + ]; + expect(getTreePath(tree, "3")).toHaveLength(0); + }); + });