Clone state before updating on PROJECT_SUCCESS
[arvados-workbench2.git] / src / store / project / project-reducer.test.ts
index 3e828830421ed713d0d006fa7c8f0e7e788822b6..f14ee9a8ef055665033286ef4593469754151198 100644 (file)
@@ -2,12 +2,14 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import projectsReducer, { findTreeBranch } from "./project-reducer";
+import projectsReducer, { getTreePath } from "./project-reducer";
 import actions from "./project-action";
-import { TreeItem } from "../../components/tree/tree";
+import { TreeItem, TreeItemStatus } from "../../components/tree/tree";
+import { ResourceKind } from "../../models/resource";
 
 describe('project-reducer', () => {
-    it('should add new project to the list', () => {
+
+    it('should load projects', () => {
         const initialState = undefined;
         const project = {
             name: 'test',
@@ -15,51 +17,183 @@ 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]);
+        const projects = [project, project];
+        const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
+        expect(state).toEqual({
+            items: [{
+                active: false,
+                open: false,
+                id: "test123",
+                items: [],
+                data: project,
+                status: 0
+            }, {
+                active: false,
+                open: false,
+                id: "test123",
+                items: [],
+                data: project,
+                status: 0
+            }
+            ],
+            currentItemId: "",
+            creator: {
+                opened: false,
+                ownerUuid: "",
+                pending: false
+            }
+        });
     });
 
-    it('should load projects', () => {
-        const initialState = undefined;
+    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",
+            creator: { opened: false, pending: false, ownerUuid: "" },
+        };
         const project = {
-            name: 'test',
-            href: 'href',
-            createdAt: '2018-01-01',
-            modifiedAt: '2018-01-01',
-            ownerUuid: 'owner-test123',
-            uuid: 'test123'
+            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: "",
+            creator: { opened: false, pending: false, ownerUuid: "" },
         };
 
-        const projects = [project, project];
-        const state = projectsReducer(initialState, actions.PROJECTS_SUCCESS({ projects, parentItemId: undefined }));
-        expect(state).toEqual([{
-            active: false,
-            open: false,
-            id: "test123",
-            items: [],
-            data: project
-        }, {
-            active: false,
-            open: false,
-            id: "test123",
-            items: [],
-            data: project
-        }
-        ]);
+        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",
+            creator: { opened: false, pending: false, ownerUuid: "" }
+        };
+        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",
+            creator: { opened: false, pending: false, ownerUuid: "" },
+        };
+
+        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",
+            creator: { opened: false, pending: false, ownerUuid: "" }
+        };
+        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",
+            creator: { opened: false, pending: false, ownerUuid: "" },
+        };
+
+        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<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", () => {
@@ -77,7 +211,7 @@ describe("findTreeBranch", () => {
                 ])
             ])
         ];
-        const branch = findTreeBranch(tree, "2.1.1");
+        const branch = getTreePath(tree, "2.1.1");
         expect(branch.map(item => item.id)).toEqual(["2", "2.1", "2.1.1"]);
     });
 
@@ -96,7 +230,7 @@ describe("findTreeBranch", () => {
                 ])
             ])
         ];
-        expect(findTreeBranch(tree, "3")).toHaveLength(0);
+        expect(getTreePath(tree, "3")).toHaveLength(0);
     });
 
 });