Add typescript paths to top level folders
[arvados-workbench2.git] / src / store / project / project-reducer.test.ts
index cfb73fa8b45daa4be4dbb1a0dfeee5790d5461f3..cd96afce4a83241a60145d902188c955a800e191 100644 (file)
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import projectsReducer from "./project-reducer";
-import actions from "./project-action";
+import { projectsReducer, getTreePath } from "./project-reducer";
+import { projectActions } from "./project-action";
+import { TreeItem, TreeItemStatus } from "~/components/tree/tree";
+import { mockProjectResource } from "~/models/test-utils";
 
 describe('project-reducer', () => {
-    it('should add new project to the list', () => {
-        const initialState = undefined;
-        const project = {
-            name: 'test',
-            href: 'href',
-            createdAt: '2018-01-01',
-            modifiedAt: '2018-01-01',
-            ownerUuid: 'owner-test123',
-            uuid: 'test123',
-            kind: ""
-        };
-
-        const state = projectsReducer(initialState, actions.CREATE_PROJECT(project));
-        expect(state).toEqual([project]);
-    });
 
     it('should load projects', () => {
         const initialState = undefined;
-        const project = {
-            name: 'test',
-            href: 'href',
-            createdAt: '2018-01-01',
-            modifiedAt: '2018-01-01',
-            ownerUuid: 'owner-test123',
-            uuid: 'test123',
-            kind: ""
-        };
 
-        const projects = [project, project];
-        const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({projects, parentItemId: undefined}));
-        expect(state).toEqual([{
+        const projects = [mockProjectResource({ uuid: "1" }), mockProjectResource({ uuid: "2" })];
+        const state = projectsReducer(initialState, projectActions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
+        expect(state).toEqual({
+            items: [{
                 active: false,
                 open: false,
-                id: "test123",
+                id: "1",
                 items: [],
-                data: project,
+                data: mockProjectResource({ uuid: "1" }),
                 status: 0
             }, {
                 active: false,
                 open: false,
-                id: "test123",
+                id: "2",
                 items: [],
-                data: project,
-                status: 0
+                data: mockProjectResource({ uuid: "2" }),
+                status: TreeItemStatus.INITIAL
+            }
+            ],
+            currentItemId: "",
+            creator: {
+                opened: false,
+                ownerUuid: "",
             }
-        ]);
+        });
     });
+
+    it('should remove activity on projects list', () => {
+        const initialState = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: true,
+                active: true,
+                status: TreeItemStatus.PENDING
+            }],
+            currentItemId: "1",
+            creator: { opened: false, ownerUuid: "" },
+        };
+        const project = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: true,
+                active: false,
+                status: TreeItemStatus.PENDING
+            }],
+            currentItemId: "",
+            creator: { opened: false, ownerUuid: "" },
+        };
+
+        const state = projectsReducer(initialState, projectActions.RESET_PROJECT_TREE_ACTIVITY(initialState.items[0].id));
+        expect(state).toEqual(project);
+    });
+
+    it('should toggle project tree item activity', () => {
+        const initialState = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: true,
+                active: false,
+                status: TreeItemStatus.PENDING
+            }],
+            currentItemId: "1",
+            creator: { opened: false, ownerUuid: "" }
+        };
+        const project = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: true,
+                active: true,
+                status: TreeItemStatus.PENDING,
+            }],
+            currentItemId: "1",
+            creator: { opened: false, ownerUuid: "" },
+        };
+
+        const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(initialState.items[0].id));
+        expect(state).toEqual(project);
+    });
+
+
+    it('should close project tree item ', () => {
+        const initialState = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: true,
+                active: false,
+                status: TreeItemStatus.PENDING,
+            }],
+            currentItemId: "1",
+            creator: { opened: false, ownerUuid: "" }
+        };
+        const project = {
+            items: [{
+                data: mockProjectResource(),
+                id: "1",
+                open: false,
+                active: false,
+                status: TreeItemStatus.PENDING,
+            }],
+            currentItemId: "1",
+            creator: { opened: false, ownerUuid: "" },
+        };
+
+        const state = projectsReducer(initialState, projectActions.TOGGLE_PROJECT_TREE_ITEM_OPEN(initialState.items[0].id));
+        expect(state).toEqual(project);
+    });
+});
+
+describe("findTreeBranch", () => {
+    const createTreeItem = (id: string, items?: Array<TreeItem<string>>): TreeItem<string> => ({
+        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<TreeItem<string>> = [
+            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<TreeItem<string>> = [
+            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);
+    });
+
 });