1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { DataExplorerMiddlewareService } from "./data-explorer-middleware-service";
6 import { dataExplorerMiddleware } from "./data-explorer-middleware";
7 import { MiddlewareAPI } from "redux";
8 import { DataColumns } from "../../components/data-table/data-table";
9 import { dataExplorerActions } from "./data-explorer-action";
12 describe("DataExplorerMiddleware", () => {
14 it("handles only actions that are identified by service id", () => {
23 requestItems: jest.fn(),
26 const service = new ServiceMock(config);
31 const next = jest.fn();
32 const middleware = dataExplorerMiddleware(service)(api)(next);
33 middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
34 middleware(dataExplorerActions.SET_PAGE({ id: "ServiceId", page: 0 }));
35 middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
36 expect(api.dispatch).toHaveBeenCalledWith(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
37 expect(api.dispatch).toHaveBeenCalledTimes(1);
40 it("handles REQUEST_ITEMS action", () => {
49 requestItems: jest.fn(),
52 const service = new ServiceMock(config);
57 const next = jest.fn();
58 const middleware = dataExplorerMiddleware(service)(api)(next);
59 middleware(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
60 expect(config.requestItems).toHaveBeenCalled();
63 it("handles SET_PAGE action", () => {
67 requestItems: jest.fn(),
70 const service = new ServiceMock(config);
75 const next = jest.fn();
76 const middleware = dataExplorerMiddleware(service)(api)(next);
77 middleware(dataExplorerActions.SET_PAGE({ id: service.getId(), page: 0 }));
78 expect(api.dispatch).toHaveBeenCalledTimes(1);
81 it("handles SET_ROWS_PER_PAGE action", () => {
85 requestItems: jest.fn(),
88 const service = new ServiceMock(config);
93 const next = jest.fn();
94 const middleware = dataExplorerMiddleware(service)(api)(next);
95 middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
96 expect(api.dispatch).toHaveBeenCalledTimes(1);
99 it("handles SET_FILTERS action", () => {
103 requestItems: jest.fn(),
106 const service = new ServiceMock(config);
111 const next = jest.fn();
112 const middleware = dataExplorerMiddleware(service)(api)(next);
113 middleware(dataExplorerActions.SET_FILTERS({ id: service.getId(), columnName: "", filters: [] }));
114 expect(api.dispatch).toHaveBeenCalledTimes(2);
117 it("handles SET_ROWS_PER_PAGE action", () => {
121 requestItems: jest.fn(),
124 const service = new ServiceMock(config);
129 const next = jest.fn();
130 const middleware = dataExplorerMiddleware(service)(api)(next);
131 middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
132 expect(api.dispatch).toHaveBeenCalledTimes(1);
135 it("handles TOGGLE_SORT action", () => {
139 requestItems: jest.fn(),
142 const service = new ServiceMock(config);
147 const next = jest.fn();
148 const middleware = dataExplorerMiddleware(service)(api)(next);
149 middleware(dataExplorerActions.TOGGLE_SORT({ id: service.getId(), columnName: "" }));
150 expect(api.dispatch).toHaveBeenCalledTimes(1);
153 it("handles SET_SEARCH_VALUE action", () => {
157 requestItems: jest.fn(),
160 const service = new ServiceMock(config);
165 const next = jest.fn();
166 const middleware = dataExplorerMiddleware(service)(api)(next);
167 middleware(dataExplorerActions.SET_SEARCH_VALUE({ id: service.getId(), searchValue: "" }));
168 expect(api.dispatch).toHaveBeenCalledTimes(2);
171 it("forwards other actions", () => {
175 requestItems: jest.fn(),
178 const service = new ServiceMock(config);
183 const next = jest.fn();
184 const middleware = dataExplorerMiddleware(service)(api)(next);
185 middleware(dataExplorerActions.SET_COLUMNS({ id: service.getId(), columns: [] }));
186 middleware(dataExplorerActions.SET_ITEMS({ id: service.getId(), items: [], rowsPerPage: 0, itemsAvailable: 0, page: 0 }));
187 middleware(dataExplorerActions.TOGGLE_COLUMN({ id: service.getId(), columnName: "" }));
188 expect(api.dispatch).toHaveBeenCalledTimes(0);
189 expect(next).toHaveBeenCalledTimes(3);
194 class ServiceMock extends DataExplorerMiddlewareService {
195 constructor(private config: {
197 columns: DataColumns<any>,
198 requestItems: (api: MiddlewareAPI) => void
204 return this.config.columns;
207 requestItems(api: MiddlewareAPI) {
208 this.config.requestItems(api);