From 13bbede1b7e62e4bd17da661565688d9c129aed3 Mon Sep 17 00:00:00 2001 From: c-bata Date: Wed, 8 Sep 2021 16:30:16 +0900 Subject: [PATCH] Add tests of DataGrid --- frontend_tests/DataGrid.test.tsx | 84 ++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 frontend_tests/DataGrid.test.tsx diff --git a/frontend_tests/DataGrid.test.tsx b/frontend_tests/DataGrid.test.tsx new file mode 100644 index 00000000..c525745f --- /dev/null +++ b/frontend_tests/DataGrid.test.tsx @@ -0,0 +1,84 @@ +import React from "react" +global.URL.createObjectURL = jest.fn() + +import { cleanup, render, fireEvent } from "@testing-library/react" +import { + DataGrid, + DataGridColumn, +} from "../optuna_dashboard/static/components/DataGrid" + +afterEach(cleanup) + +it("Filter rows of DataGrid", () => { + interface DummyAttribute { + id: number + key: string + value: number + } + const dummyAttributes = [ + { id: 1, key: "foo", value: 1 }, + { id: 2, key: "bar", value: 1 }, + { id: 3, key: "bar", value: 2 }, + { id: 4, key: "foo", value: 2 }, + { id: 5, key: "foo", value: 3 }, + ] + const columns: DataGridColumn[] = [ + { field: "key", label: "Key", filterable: true }, + { + field: "value", + label: "Value", + sortable: true, + }, + ] + + const { queryAllByText } = render( + + columns={columns} + rows={dummyAttributes} + keyField={"id"} + /> + ) + expect(queryAllByText("bar").length).toBe(2) + + // Filter rows by "foo" + fireEvent.click(queryAllByText("foo")[0]) + expect(queryAllByText("foo").length).toBe(3) + expect(queryAllByText("bar").length).toBe(0) +}) + +it("Filter rows after sorted", () => { + interface DummyAttribute { + id: number + key: string + value: number + } + const dummyAttributes = [ + { id: 1, key: "foo", value: 4000 }, + { id: 2, key: "bar", value: 1000 }, + { id: 3, key: "bar", value: 2000 }, + { id: 4, key: "foo", value: 3000 }, + { id: 5, key: "foo", value: 5000 }, + ] + const columns: DataGridColumn[] = [ + { field: "key", label: "Key", filterable: true }, + { + field: "value", + label: "Value", + sortable: true, + }, + ] + + const { getByText, queryAllByText } = render( + + columns={columns} + rows={dummyAttributes} + keyField={"id"} + /> + ) + // Sort and filter rows + fireEvent.click(getByText("Value")) + fireEvent.click(queryAllByText("bar")[0]) + + expect(queryAllByText("1000").length).toBe(1) + expect(queryAllByText("2000").length).toBe(1) +})