2021-05-21 16:29:28 +00:00
|
|
|
import React from "react";
|
|
|
|
|
import { render, screen } from "@testing-library/react";
|
|
|
|
|
import { noop } from "lodash";
|
|
|
|
|
// ignore TS error for now until these are rewritten in ts.
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
import DataTable from "./DataTable";
|
|
|
|
|
|
2021-07-10 17:29:27 +00:00
|
|
|
const DEFAULT_PAGE_SIZE = 100;
|
|
|
|
|
|
2021-05-21 16:29:28 +00:00
|
|
|
describe("DataTable - component", () => {
|
|
|
|
|
it("renders a data table based on the columns and data passed in", () => {
|
|
|
|
|
const columns = [
|
|
|
|
|
{
|
|
|
|
|
title: "Name",
|
|
|
|
|
Header: "Name",
|
|
|
|
|
accessor: "name",
|
|
|
|
|
disableHidden: false,
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const data = [{ name: "Test User", id: 1 }];
|
|
|
|
|
|
|
|
|
|
render(
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
|
|
|
|
data={data}
|
|
|
|
|
isLoading={false}
|
|
|
|
|
onSort={noop}
|
2021-07-10 17:29:27 +00:00
|
|
|
showMarkAllPages={false}
|
|
|
|
|
isAllPagesSelected={false}
|
|
|
|
|
resultsTitle="users"
|
|
|
|
|
defaultPageSize={DEFAULT_PAGE_SIZE}
|
2021-05-21 16:29:28 +00:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const nameHeader = screen.getByText("Name");
|
|
|
|
|
const nameDataCell = screen.getByText("Test User");
|
|
|
|
|
expect(nameHeader).toBeInTheDocument();
|
|
|
|
|
expect(nameDataCell).toBeInTheDocument();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("renders correctly given a sort header", () => {
|
|
|
|
|
const columns = [
|
|
|
|
|
{
|
|
|
|
|
title: "Name",
|
|
|
|
|
Header: "Name",
|
|
|
|
|
accessor: "name",
|
|
|
|
|
disableHidden: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: "Address",
|
|
|
|
|
Header: "Address",
|
|
|
|
|
accessor: "address",
|
|
|
|
|
disableHidden: false,
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// 'name' attribute is how we want to sort the data
|
|
|
|
|
const { rerender } = render(
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
|
|
|
|
data={[
|
|
|
|
|
{ name: "foo user", address: "biz address" },
|
|
|
|
|
{ name: "bar user", address: "daz address" },
|
|
|
|
|
]}
|
|
|
|
|
sortHeader={"name"}
|
|
|
|
|
sortDirection={"desc"}
|
|
|
|
|
isLoading={false}
|
|
|
|
|
onSort={noop}
|
2021-07-10 17:29:27 +00:00
|
|
|
showMarkAllPages={false}
|
|
|
|
|
isAllPagesSelected={false}
|
|
|
|
|
resultsTitle="users"
|
|
|
|
|
defaultPageSize={DEFAULT_PAGE_SIZE}
|
2021-05-21 16:29:28 +00:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let dataCells = screen.getAllByRole("cell");
|
|
|
|
|
let firstNameInTableCell = dataCells[0];
|
|
|
|
|
let secondNameInTableCell = dataCells[2];
|
|
|
|
|
expect(firstNameInTableCell).toHaveTextContent("foo user");
|
|
|
|
|
expect(secondNameInTableCell).toHaveTextContent("bar user");
|
|
|
|
|
|
|
|
|
|
// now want to sort on 'address' attribute
|
|
|
|
|
rerender(
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
|
|
|
|
data={[
|
|
|
|
|
{ name: "foo user", address: "biz address" },
|
|
|
|
|
{ name: "bar user", address: "daz address" },
|
|
|
|
|
]}
|
|
|
|
|
sortHeader={"address"}
|
|
|
|
|
sortDirection={"desc"}
|
|
|
|
|
isLoading={false}
|
|
|
|
|
onSort={noop}
|
2021-07-10 17:29:27 +00:00
|
|
|
showMarkAllPages={false}
|
|
|
|
|
isAllPagesSelected={false}
|
|
|
|
|
resultsTitle="users"
|
|
|
|
|
defaultPageSize={DEFAULT_PAGE_SIZE}
|
2021-05-21 16:29:28 +00:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
dataCells = screen.getAllByRole("cell");
|
|
|
|
|
firstNameInTableCell = dataCells[1];
|
|
|
|
|
secondNameInTableCell = dataCells[3];
|
|
|
|
|
expect(firstNameInTableCell).toHaveTextContent("daz address");
|
|
|
|
|
expect(secondNameInTableCell).toHaveTextContent("biz address");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("renders correctly given a sortDirection", () => {
|
|
|
|
|
const columns = [
|
|
|
|
|
{
|
|
|
|
|
title: "Name",
|
|
|
|
|
Header: "Name",
|
|
|
|
|
accessor: "name",
|
|
|
|
|
disableHidden: false,
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// testing 'desc' data
|
|
|
|
|
const { rerender } = render(
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
|
|
|
|
data={[{ name: "foo user" }, { name: "bar user" }]}
|
|
|
|
|
sortHeader={"name"}
|
|
|
|
|
sortDirection={"desc"}
|
|
|
|
|
isLoading={false}
|
|
|
|
|
onSort={noop}
|
2021-07-10 17:29:27 +00:00
|
|
|
showMarkAllPages={false}
|
|
|
|
|
isAllPagesSelected={false}
|
|
|
|
|
resultsTitle="users"
|
|
|
|
|
defaultPageSize={DEFAULT_PAGE_SIZE}
|
2021-05-21 16:29:28 +00:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let dataCells = screen.getAllByRole("cell");
|
|
|
|
|
let firstNameInTableCell = dataCells[0];
|
|
|
|
|
let secondNameInTableCell = dataCells[1];
|
|
|
|
|
expect(firstNameInTableCell).toHaveTextContent("foo user");
|
|
|
|
|
expect(secondNameInTableCell).toHaveTextContent("bar user");
|
|
|
|
|
|
|
|
|
|
// testing 'asc' data
|
|
|
|
|
rerender(
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
|
|
|
|
data={[{ name: "foo user" }, { name: "bar user" }]}
|
|
|
|
|
sortHeader={"name"}
|
|
|
|
|
sortDirection={"asc"}
|
|
|
|
|
isLoading={false}
|
|
|
|
|
onSort={noop}
|
2021-07-10 17:29:27 +00:00
|
|
|
showMarkAllPages={false}
|
|
|
|
|
isAllPagesSelected={false}
|
|
|
|
|
resultsTitle="users"
|
|
|
|
|
defaultPageSize={DEFAULT_PAGE_SIZE}
|
2021-05-21 16:29:28 +00:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
dataCells = screen.getAllByRole("cell");
|
|
|
|
|
firstNameInTableCell = dataCells[0];
|
|
|
|
|
secondNameInTableCell = dataCells[1];
|
|
|
|
|
expect(firstNameInTableCell).toHaveTextContent("bar user");
|
|
|
|
|
expect(secondNameInTableCell).toHaveTextContent("foo user");
|
|
|
|
|
});
|
|
|
|
|
});
|