fleet/frontend/components/TableContainer/DataTable/DataTable.tests.tsx
Martavis Parker ec23d4ee8e
Select all matching hosts (#1226)
* #940 passing matching props to table; typescript

* #940 fixed use of results title

* #940 logic to swap states of selected and not

* #940 optimized rendering selected text

* #940 began styling to match flexbox spacing

* #940 added logic to API

* #940 clean up

* #940 fixed action

* #940 fixed conflict and coment

* #940 hide select matching if under 100 hosts

* #940 fixed issue with status filter
2021-07-10 10:29:27 -07:00

163 lines
4.5 KiB
TypeScript

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";
const DEFAULT_PAGE_SIZE = 100;
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}
showMarkAllPages={false}
isAllPagesSelected={false}
resultsTitle="users"
defaultPageSize={DEFAULT_PAGE_SIZE}
/>
);
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}
showMarkAllPages={false}
isAllPagesSelected={false}
resultsTitle="users"
defaultPageSize={DEFAULT_PAGE_SIZE}
/>
);
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}
showMarkAllPages={false}
isAllPagesSelected={false}
resultsTitle="users"
defaultPageSize={DEFAULT_PAGE_SIZE}
/>
);
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}
showMarkAllPages={false}
isAllPagesSelected={false}
resultsTitle="users"
defaultPageSize={DEFAULT_PAGE_SIZE}
/>
);
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}
showMarkAllPages={false}
isAllPagesSelected={false}
resultsTitle="users"
defaultPageSize={DEFAULT_PAGE_SIZE}
/>
);
dataCells = screen.getAllByRole("cell");
firstNameInTableCell = dataCells[0];
secondNameInTableCell = dataCells[1];
expect(firstNameInTableCell).toHaveTextContent("bar user");
expect(secondNameInTableCell).toHaveTextContent("foo user");
});
});