// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from "react"; import { configure, mount } from "enzyme"; import Adapter from "enzyme-adapter-react-16"; import { DataExplorer } from "./data-explorer"; import { ColumnSelector } from "../column-selector/column-selector"; import { DataTable, DataTableFetchMode } from "../data-table/data-table"; import { SearchInput } from "../search-input/search-input"; import { TablePagination } from "@material-ui/core"; import { ProjectIcon } from "../icon/icon"; import { SortDirection } from "../data-table/data-column"; import { combineReducers, createStore } from "redux"; import { Provider } from "react-redux"; configure({ adapter: new Adapter() }); describe("", () => { let store; beforeEach(() => { const initialMSState = { multiselect: { checkedList: {}, isVisible: false, }, resources: {}, }; store = createStore( combineReducers({ multiselect: (state: any = initialMSState.multiselect, action: any) => state, resources: (state: any = initialMSState.resources, action: any) => state, }) ); }); it("communicates with ", () => { const onSearch = jest.fn(); const onSetColumns = jest.fn(); const dataExplorer = mount( ); expect(dataExplorer.find(SearchInput).prop("value")).toEqual("search value"); dataExplorer.find(SearchInput).prop("onSearch")("new value"); expect(onSearch).toHaveBeenCalledWith("new value"); }); it("communicates with ", () => { const onColumnToggle = jest.fn(); const onSetColumns = jest.fn(); const columns = [{ name: "Column 1", render: jest.fn(), selected: true, configurable: true, sortDirection: SortDirection.ASC, filters: {} }]; const dataExplorer = mount( ); expect(dataExplorer.find(ColumnSelector).prop("columns")).toBe(columns); dataExplorer.find(ColumnSelector).prop("onColumnToggle")("columns"); expect(onColumnToggle).toHaveBeenCalledWith("columns"); }); it("communicates with ", () => { const onFiltersChange = jest.fn(); const onSortToggle = jest.fn(); const onRowClick = jest.fn(); const onSetColumns = jest.fn(); const columns = [{ name: "Column 1", render: jest.fn(), selected: true, configurable: true, sortDirection: SortDirection.ASC, filters: {} }]; const items = [{ name: "item 1" }]; const dataExplorer = mount( ); expect(dataExplorer.find(DataTable).prop("columns").slice(1, 2)).toEqual(columns); expect(dataExplorer.find(DataTable).prop("items")).toBe(items); dataExplorer.find(DataTable).prop("onRowClick")("event", "rowClick"); dataExplorer.find(DataTable).prop("onFiltersChange")("filtersChange"); dataExplorer.find(DataTable).prop("onSortToggle")("sortToggle"); expect(onFiltersChange).toHaveBeenCalledWith("filtersChange"); expect(onSortToggle).toHaveBeenCalledWith("sortToggle"); expect(onRowClick).toHaveBeenCalledWith("rowClick"); }); it("communicates with ", () => { const onChangePage = jest.fn(); const onChangeRowsPerPage = jest.fn(); const onSetColumns = jest.fn(); const dataExplorer = mount( ); expect(dataExplorer.find(TablePagination).prop("page")).toEqual(10); expect(dataExplorer.find(TablePagination).prop("rowsPerPage")).toEqual(50); dataExplorer.find(TablePagination).prop("onChangePage")(undefined, 6); dataExplorer.find(TablePagination).prop("onChangeRowsPerPage")({ target: { value: 10 } }); expect(onChangePage).toHaveBeenCalledWith(6); expect(onChangeRowsPerPage).toHaveBeenCalledWith(10); }); }); const mockDataExplorerProps = () => ({ fetchMode: DataTableFetchMode.PAGINATED, columns: [], items: [], itemsAvailable: 0, contextActions: [], searchValue: "", page: 0, rowsPerPage: 0, rowsPerPageOptions: [0], onSearch: jest.fn(), onFiltersChange: jest.fn(), onSortToggle: jest.fn(), onRowClick: jest.fn(), onRowDoubleClick: jest.fn(), onColumnToggle: jest.fn(), onChangePage: jest.fn(), onChangeRowsPerPage: jest.fn(), onContextMenu: jest.fn(), defaultIcon: ProjectIcon, onSetColumns: jest.fn(), onLoadMore: jest.fn(), defaultMessages: ["testing"], contextMenuColumn: true, setCheckedListOnStore: jest.fn(), toggleMSToolbar: jest.fn(), isMSToolbarVisible: false, checkedList: {}, });