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 "../../../node_modules/redux";
8 import { DataColumns } from "../../components/data-table/data-table";
9 import { dataExplorerActions } from "./data-explorer-action";
12 describe("DataExplorerMiddleware", () => {
14 it("initializes columns in the store", () => {
22 requestItems: jest.fn(),
25 const service = new ServiceMock(config);
30 const next = jest.fn();
31 dataExplorerMiddleware(service)(api)(next);
33 .toHaveBeenCalledWith(dataExplorerActions.SET_COLUMNS({ id: service.getId(), columns: service.getColumns() }));
36 it("handles only actions that are identified by service id", () => {
44 requestItems: jest.fn(),
47 const service = new ServiceMock(config);
52 const next = jest.fn();
53 const middleware = dataExplorerMiddleware(service)(api)(next);
54 middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
55 middleware(dataExplorerActions.SET_PAGE({ id: "ServiceId", page: 0 }));
56 middleware(dataExplorerActions.SET_PAGE({ id: "OtherId", page: 0 }));
57 expect(api.dispatch).toHaveBeenCalledWith(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
58 expect(api.dispatch).toHaveBeenCalledTimes(1);
61 it("handles REQUEST_ITEMS action", () => {
69 requestItems: jest.fn(),
72 const service = new ServiceMock(config);
77 const next = jest.fn();
78 const middleware = dataExplorerMiddleware(service)(api)(next);
79 middleware(dataExplorerActions.REQUEST_ITEMS({ id: "ServiceId" }));
80 expect(config.requestItems).toHaveBeenCalled();
83 it("handles SET_PAGE action", () => {
87 requestItems: jest.fn(),
90 const service = new ServiceMock(config);
95 const next = jest.fn();
96 const middleware = dataExplorerMiddleware(service)(api)(next);
97 middleware(dataExplorerActions.SET_PAGE({ id: service.getId(), page: 0 }));
98 expect(api.dispatch).toHaveBeenCalledTimes(1);
101 it("handles SET_ROWS_PER_PAGE action", () => {
105 requestItems: jest.fn(),
108 const service = new ServiceMock(config);
113 const next = jest.fn();
114 const middleware = dataExplorerMiddleware(service)(api)(next);
115 middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
116 expect(api.dispatch).toHaveBeenCalledTimes(1);
119 it("handles SET_FILTERS action", () => {
123 requestItems: jest.fn(),
126 const service = new ServiceMock(config);
131 const next = jest.fn();
132 const middleware = dataExplorerMiddleware(service)(api)(next);
133 middleware(dataExplorerActions.SET_FILTERS({ id: service.getId(), columnName: "", filters: [] }));
134 expect(api.dispatch).toHaveBeenCalledTimes(2);
137 it("handles SET_ROWS_PER_PAGE action", () => {
141 requestItems: jest.fn(),
144 const service = new ServiceMock(config);
149 const next = jest.fn();
150 const middleware = dataExplorerMiddleware(service)(api)(next);
151 middleware(dataExplorerActions.SET_ROWS_PER_PAGE({ id: service.getId(), rowsPerPage: 0 }));
152 expect(api.dispatch).toHaveBeenCalledTimes(1);
155 it("handles TOGGLE_SORT action", () => {
159 requestItems: jest.fn(),
162 const service = new ServiceMock(config);
167 const next = jest.fn();
168 const middleware = dataExplorerMiddleware(service)(api)(next);
169 middleware(dataExplorerActions.TOGGLE_SORT({ id: service.getId(), columnName: "" }));
170 expect(api.dispatch).toHaveBeenCalledTimes(1);
173 it("handles SET_SEARCH_VALUE action", () => {
177 requestItems: jest.fn(),
180 const service = new ServiceMock(config);
185 const next = jest.fn();
186 const middleware = dataExplorerMiddleware(service)(api)(next);
187 middleware(dataExplorerActions.SET_SEARCH_VALUE({ id: service.getId(), searchValue: "" }));
188 expect(api.dispatch).toHaveBeenCalledTimes(2);
191 it("forwards other actions", () => {
195 requestItems: jest.fn(),
198 const service = new ServiceMock(config);
203 const next = jest.fn();
204 const middleware = dataExplorerMiddleware(service)(api)(next);
205 middleware(dataExplorerActions.SET_COLUMNS({ id: service.getId(), columns: [] }));
206 middleware(dataExplorerActions.SET_ITEMS({ id: service.getId(), items: [], rowsPerPage: 0, itemsAvailable: 0, page: 0 }));
207 middleware(dataExplorerActions.TOGGLE_COLUMN({ id: service.getId(), columnName: "" }));
208 expect(api.dispatch).toHaveBeenCalledTimes(0);
209 expect(next).toHaveBeenCalledTimes(4);
214 class ServiceMock extends DataExplorerMiddlewareService {
215 constructor(private config: {
217 columns: DataColumns<any>,
218 requestItems: (api: MiddlewareAPI) => void;
225 return this.config.columns;
228 requestItems(api: MiddlewareAPI) {
229 this.config.requestItems(api);