Merge remote-tracking branch 'origin/main' into 19051-handle-quotes-in-search
[arvados-workbench2.git] / src / store / data-explorer / data-explorer-middleware.test.ts
index 412e703db0f3ca395a74c0ea829d0d915097a7e0..ef6cfe42e0f494c90aead7f3a83a83956d4946af 100644 (file)
@@ -1,52 +1,18 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 import { DataExplorerMiddlewareService } from "./data-explorer-middleware-service";
 import { dataExplorerMiddleware } from "./data-explorer-middleware";
-import { MiddlewareAPI } from "../../../node_modules/redux";
-import { columns } from "../../views/project-panel/project-panel";
-import { DataColumns } from "../../components/data-table/data-table";
+import { MiddlewareAPI } from "redux";
+import { DataColumns } from "components/data-table/data-table";
 import { dataExplorerActions } from "./data-explorer-action";
+import { SortDirection } from "components/data-table/data-column";
+import { createTree } from 'models/tree';
+import { DataTableFilterItem } from "components/data-table-filters/data-table-filters-tree";
 
-// Copyright (C) The Arvados Authors. All rights reserved.
-//
-// SPDX-License-Identifier: AGPL-3.0
 
 describe("DataExplorerMiddleware", () => {
-    it("initializes service with middleware api", () => {
-        const config = {
-            id: "",
-            columns: [],
-            requestItems: jest.fn(),
-            setApi: jest.fn()
-        };
-        const service = new ServiceMock(config);
-        const api = {
-            getState: jest.fn(),
-            dispatch: jest.fn()
-        };
-        dataExplorerMiddleware(service)(api)(jest.fn());
-        expect(config.setApi).toHaveBeenCalled();
-    });
-
-    it("initializes columns in the store", () => {
-        const config = {
-            id: "Id",
-            columns: [{
-                name: "Column",
-                selected: true,
-                render: jest.fn()
-            }],
-            requestItems: jest.fn(),
-            setApi: jest.fn()
-        };
-        const service = new ServiceMock(config);
-        const api = {
-            getState: jest.fn(),
-            dispatch: jest.fn()
-        };
-        const next = jest.fn();
-        dataExplorerMiddleware(service)(api)(next);
-        expect(next)
-            .toHaveBeenCalledWith(dataExplorerActions.SET_COLUMNS({ id: service.Id, columns: service.Columns }));
-    });
 
     it("handles only actions that are identified by service id", () => {
         const config = {
@@ -54,6 +20,9 @@ describe("DataExplorerMiddleware", () => {
             columns: [{
                 name: "Column",
                 selected: true,
+                configurable: false,
+                sortDirection: SortDirection.NONE,
+                filters: createTree<DataTableFilterItem>(),
                 render: jest.fn()
             }],
             requestItems: jest.fn(),
@@ -69,7 +38,7 @@ describe("DataExplorerMiddleware", () => {
         middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
         middleware(dataExplorerActions.SET_PAGE({ id: "ServiceId", page: 0 }));
         middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
-        expect(api.dispatch).toHaveBeenCalledWith(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
+        expect(api.dispatch).toHaveBeenCalledWith(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId", criteriaChanged: false }));
         expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
@@ -79,6 +48,9 @@ describe("DataExplorerMiddleware", () => {
             columns: [{
                 name: "Column",
                 selected: true,
+                configurable: false,
+                sortDirection: SortDirection.NONE,
+                filters: createTree<DataTableFilterItem>(),
                 render: jest.fn()
             }],
             requestItems: jest.fn(),
@@ -92,7 +64,7 @@ describe("DataExplorerMiddleware", () => {
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
         middleware(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
-        expect(config.requestItems).toHaveBeenCalled();
+        expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
     it("handles SET_PAGE action", () => {
@@ -109,7 +81,7 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_PAGE({ id: service.Id, page: 0 }));
+        middleware(dataExplorerActions.SET_PAGE({ id: service.getId(), page: 0 }));
         expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
@@ -127,7 +99,7 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.Id, rowsPerPage: 0 }));
+        middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
         expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
@@ -145,7 +117,7 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_FILTERS({ id: service.Id, columnName: "", filters: [] }));
+        middleware(dataExplorerActions.SET_FILTERS({ id: service.getId(), columnName: "", filters: createTree() }));
         expect(api.dispatch).toHaveBeenCalledTimes(2);
     });
 
@@ -163,15 +135,8 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_PAGE({ id: service.Id, page: 0 }));
-        middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.Id, rowsPerPage: 0 }));
-        middleware(dataExplorerActions.SET_FILTERS({ id: service.Id, columnName: "", filters: [] }));
-        middleware(dataExplorerActions.TOGGLE_SORT({ id: service.Id, columnName: "" }));
-        middleware(dataExplorerActions.TOGGLE_COLUMN({ id: service.Id, columnName: "" }));
-        middleware(dataExplorerActions.REQUEST_ITEMS({ id: service.Id }));
-        middleware(dataExplorerActions.SET_SEARCH_VALUE({ id: service.Id, searchValue: "" }));
-        middleware(dataExplorerActions.RESET_PAGINATION({ id: service.Id }));
-        expect(api.dispatch).toHaveBeenCalledTimes(7);
+        middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
+        expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
     it("handles TOGGLE_SORT action", () => {
@@ -188,7 +153,7 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.TOGGLE_SORT({ id: service.Id, columnName: "" }));
+        middleware(dataExplorerActions.TOGGLE_SORT({ id: service.getId(), columnName: "" }));
         expect(api.dispatch).toHaveBeenCalledTimes(1);
     });
 
@@ -206,7 +171,7 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_SEARCH_VALUE({ id: service.Id, searchValue: "" }));
+        middleware(dataExplorerActions.SET_EXPLORER_SEARCH_VALUE({ id: service.getId(), searchValue: "" }));
         expect(api.dispatch).toHaveBeenCalledTimes(2);
     });
 
@@ -224,11 +189,11 @@ describe("DataExplorerMiddleware", () => {
         };
         const next = jest.fn();
         const middleware = dataExplorerMiddleware(service)(api)(next);
-        middleware(dataExplorerActions.SET_COLUMNS({ id: service.Id, columns: [] }));
-        middleware(dataExplorerActions.SET_ITEMS({ id: service.Id, items: [], rowsPerPage: 0, itemsAvailable: 0, page: 0 }));
-        middleware(dataExplorerActions.TOGGLE_COLUMN({ id: service.Id, columnName: "" }));
+        middleware(dataExplorerActions.SET_COLUMNS({ id: service.getId(), columns: [] }));
+        middleware(dataExplorerActions.SET_ITEMS({ id: service.getId(), items: [], rowsPerPage: 0, itemsAvailable: 0, page: 0 }));
+        middleware(dataExplorerActions.TOGGLE_COLUMN({ id: service.getId(), columnName: "" }));
         expect(api.dispatch).toHaveBeenCalledTimes(0);
-        expect(next).toHaveBeenCalledTimes(4);
+        expect(next).toHaveBeenCalledTimes(3);
     });
 
 });
@@ -237,27 +202,17 @@ class ServiceMock extends DataExplorerMiddlewareService {
     constructor(private config: {
         id: string,
         columns: DataColumns<any>,
-        requestItems: (api: MiddlewareAPI) => void;
-        setApi: () => void;
+        requestItems: (api: MiddlewareAPI) => Promise<void>
     }) {
-        super();
+        super(config.id);
     }
 
-    get Id() {
-        return this.config.id;
-    }
-
-    get Columns() {
+    getColumns() {
         return this.config.columns;
     }
 
-    requestItems() {
-        this.config.requestItems(this.api);
+    requestItems(api: MiddlewareAPI): Promise<void> {
+        this.config.requestItems(api);
+        return Promise.resolve();
     }
-
-    set Api(value: MiddlewareAPI) {
-        this.config.setApi();
-        this.api = value;
-    }
-
-}
\ No newline at end of file
+}