diff --git a/src/tests/chart-elements/AreaChart.test.tsx b/src/tests/chart-elements/AreaChart.test.tsx new file mode 100644 index 000000000..57e062090 --- /dev/null +++ b/src/tests/chart-elements/AreaChart.test.tsx @@ -0,0 +1,108 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import AreaChart from "components/chart-elements/AreaChart/AreaChart"; + +describe("AreaChart", () => { + beforeAll(() => { + global.ResizeObserver = class MockedResizeObserver { + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); + }; + const mockChildMethod = jest.fn(); + jest.spyOn(React, "useRef").mockReturnValue({ + current: { + childMethod: mockChildMethod, + }, + }); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + it("renders the chart with data", () => { + const ref = React.useRef() as React.MutableRefObject; + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-full h-80").length).toBe(1); + }); + + it("renders the chart without gradient", () => { + const ref = React.useRef() as React.MutableRefObject; + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-full h-80").length).toBe(1); + }); + + it("renders the chart with custom colors", () => { + const ref = React.useRef() as React.MutableRefObject; + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-full h-80").length).toBe(1); + }); + + it("renders the chart with custom curve type", () => { + const ref = React.useRef() as React.MutableRefObject; + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-full h-80").length).toBe(1); + }); + + it("renders the chart with connectNulls", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: null }, + { name: "C", value: 30 }, + ]; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-full h-80").length).toBe(1); + }); + + it("renders the chart with no data", () => { + const { getByText } = render(); + expect(getByText("No data")).toBeDefined(); + }); +}); diff --git a/src/tests/chart-elements/BarChart.test.tsx b/src/tests/chart-elements/BarChart.test.tsx new file mode 100644 index 000000000..b4bc334b0 --- /dev/null +++ b/src/tests/chart-elements/BarChart.test.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import BarChart from "components/chart-elements/BarChart/BarChart"; + +describe("BarChart", () => { + beforeAll(() => { + global.ResizeObserver = class MockedResizeObserver { + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); + }; + const mockChildMethod = jest.fn(); + jest.spyOn(React, "useRef").mockReturnValue({ + current: { + childMethod: mockChildMethod, + }, + }); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + it("renders the chart with data", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + render(); + }); + + it("renders the chart with no data", () => { + const ref = React.useRef() as React.MutableRefObject; + const { getByText } = render(); + expect(getByText("No data")).toBeDefined(); + }); +}); diff --git a/src/tests/spark-elements/SparkAreaChart.test.tsx b/src/tests/spark-elements/SparkAreaChart.test.tsx new file mode 100644 index 000000000..4a3bd2fb4 --- /dev/null +++ b/src/tests/spark-elements/SparkAreaChart.test.tsx @@ -0,0 +1,126 @@ +import React, { useRef } from "react"; +import { render } from "@testing-library/react"; +import AreaChart from "components/spark-elements/SparkAreaChart/SparkAreaChart"; + +describe("AreaChart", () => { + beforeAll(() => { + global.ResizeObserver = class MockedResizeObserver { + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); + }; + const mockChildMethod = jest.fn(); + jest.spyOn(React, "useRef").mockReturnValue({ + current: { + childMethod: mockChildMethod, + }, + }); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + it("renders the chart with data", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-28 h-12 test").length).toBe(1); + }); + + it("renders the chart without gradient", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-28 h-12 test").length).toBe(1); + }); + + it("renders the chart with custom colors", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-28 h-12 test").length).toBe(1); + }); + + it("renders the chart with custom curve type", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-28 h-12 test").length).toBe(1); + }); + + it("renders the chart with connectNulls", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: null }, + { name: "C", value: 30 }, + ]; + const ref = React.useRef() as React.MutableRefObject; + const { container } = render( + , + ); + expect(container.getElementsByClassName("w-28 h-12 test").length).toBe(1); + }); + + it("renders the chart with no data", () => { + const ref = React.useRef() as React.MutableRefObject; + const { getByText } = render(); + expect(getByText("No data")).toBeDefined(); + }); +}); diff --git a/src/tests/text-elements/Legend.test.tsx b/src/tests/text-elements/Legend.test.tsx index 81b934872..fcab6cb1e 100644 --- a/src/tests/text-elements/Legend.test.tsx +++ b/src/tests/text-elements/Legend.test.tsx @@ -1,4 +1,4 @@ -import { render } from "@testing-library/react"; +import { fireEvent, render } from "@testing-library/react"; import React from "react"; import Legend from "components/text-elements/Legend/Legend"; @@ -7,4 +7,24 @@ describe("Legend", () => { test("renders the Legend component with default props", () => { render(); }); + it("renders the correct legend items", () => { + const { getByText } = render( + , + ); + expect(getByText("Category A")).toBeDefined(); + expect(getByText("Category B")).toBeDefined(); + expect(getByText("Category C")).toBeDefined(); + expect(getByText("Category D")).toBeDefined(); + }); + it("clicks a category item", () => { + const { getByText } = render(); + fireEvent.click(getByText("Category A")); + }); + it("tests the keydown handler", () => { + const { container, getByRole } = render( + , + ); + const event = new KeyboardEvent("keydown", { key: "ArrowLeft" }); + document.dispatchEvent(event); + }); });