// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import React from "react";
import DaysTable from "../../../src/components/daysTable";
import { render, cleanup } from "@testing-library/react";
import "@testing-library/jest-dom";
import "@testing-library/jest-dom/extend-expect";
describe("DaysTable component", () => {
const headersData: object[] = [
{ projectionType: "Supply (In-Transit)" },
{ projectionType: "Supply (On-Hand)" },
{ projectionType: "Inventory (BoH)" },
{ projectionType: "Inventory (EoH)" },
{ projectionType: "Demand (Planned)" }
];
const mockedProjections = [
{
date: "2023-01-28T00:00:00.000Z",
daysOut: 1,
futureDateId: "9ec2f78d-fac2-0394-c6fd-60384e5a1498",
inventoryEndingOnHand: 100,
supplyInTransit: 0,
supplyPlanned: 0,
inventoryBeginningOnHand: 90,
demandPlanned: 0,
dateGenerated: "2023-01-27T15:29:17.978Z"
}
];
const rows = {
supply: {
inTransit: {},
onHand: {}
},
inventory: {
boh: {},
eoh: {}
},
demand: {
planned: {}
}
} as any;
for (const projection of mockedProjections) {
rows.supply.inTransit[`day${projection["daysOut"]}`] = projection["supplyInTransit"];
rows.supply.onHand[`day${projection["daysOut"]}`] = projection["supplyPlanned"];
rows.inventory.boh[`day${projection["daysOut"]}`] = projection["inventoryBeginningOnHand"];
rows.inventory.eoh[`day${projection["daysOut"]}`] = projection["inventoryEndingOnHand"];
rows.demand.planned[`day${projection["daysOut"]}`] = projection["demandPlanned"];
}
const table = headersData;
table[0] = { ...table[0], ...rows.supply.inTransit };
table[1] = { ...table[1], ...rows.supply.onHand };
table[2] = { ...table[2], ...rows.inventory.boh };
table[3] = { ...table[3], ...rows.inventory.eoh };
table[4] = { ...table[4], ...rows.demand.planned };
afterEach(cleanup);
test("renders the correct number of columns", () => {
const { container } = render();
const thElements = container.querySelectorAll("th");
expect(thElements.length).toEqual(4);
});
test("renders the correct headers", () => {
const { getByText } = render();
expect(getByText("Type")).toBeDefined();
expect(getByText("Day 1")).toBeInTheDocument();
expect(getByText("Day 2")).toBeInTheDocument();
expect(getByText("Day 3")).toBeInTheDocument();
});
test("renders the correct headers on larger tables", () => {
const { getByText } = render();
expect(getByText("Supply (In-Transit)")).toBeInTheDocument();
for (let i = 1; i <= 30; i++) {
expect(getByText(`Day ${i.toString()}`)).toBeInTheDocument();
}
});
test("renders the correct data", () => {
const { getByText } = render();
expect(getByText("Supply (In-Transit)")).toBeInTheDocument();
expect(getByText(100)).toBeInTheDocument();
});
});