/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import React from "react";
import { render, screen, fireEvent } from "@testing-library/react";
import MetricsList from "../MetricsList";
import { Metric } from "../../models";
test("renders the component", async () => {
const metrics = [{ title: "temperature", value: 90 }] as Metric[];
const onClickMock = jest.fn();
const wrapper = render(
,
);
expect(wrapper.container).toMatchSnapshot();
});
test("renders the MetricsAdd button", async () => {
const metrics = [{ title: "temperature", value: 90 }] as Metric[];
const onClickMock = jest.fn();
render();
const addMetricsButton = screen.getByRole("button", {
name: "+ Add metric",
});
fireEvent.click(addMetricsButton);
expect(onClickMock).toBeCalled();
});
test("renders zero metrics with MetricsAdd button", async () => {
const metrics = [] as Metric[];
const onClickMock = jest.fn();
render();
const addMetricsButton = screen.getByRole("button", {
name: "+ Add metric",
});
fireEvent.click(addMetricsButton);
expect(screen.getByText("No metrics added yet.")).toBeInTheDocument();
expect(onClickMock).toBeCalled();
});
test("click on the metric name should trigger onEdit callback", async () => {
const metrics = [{ title: "temperature", value: 90 }] as Metric[];
const onEditMock = jest.fn();
render(
{}}
onEdit={onEditMock}
metrics={metrics}
allowAddMetric={false}
/>,
);
const actionsButton = screen.getByRole("button", {
name: "Edit temperature",
});
fireEvent.click(actionsButton);
expect(onEditMock).toBeCalled();
});
test("click on delete button should trigger onDelete callback", async () => {
const metrics = [{ title: "temperature", value: 90 }] as Metric[];
const onDeleteMock = jest.fn();
render(
{}}
onDelete={onDeleteMock}
metrics={metrics}
allowAddMetric={false}
/>,
);
const deleteButton = screen.getByText("Delete");
fireEvent.click(deleteButton);
expect(onDeleteMock).toBeCalled();
});
test("click on the up arrow should trigger onMoveUp callback", async () => {
const metrics = [
{ title: "polution", value: 25 },
{ title: "temperature", value: 90 },
] as Metric[];
const onMoveUpMock = jest.fn();
render(
{}}
onMoveUp={onMoveUpMock}
metrics={metrics}
allowAddMetric={false}
/>,
);
const onMoveUpButton = screen.getByRole("button", {
name: "Move temperature up",
});
fireEvent.click(onMoveUpButton);
expect(onMoveUpMock).toBeCalled();
});
test("click on the up arrow should trigger onMoveUp callback", async () => {
const metrics = [
{ title: "polution", value: 25 },
{ title: "temperature", value: 90 },
] as Metric[];
const onMoveDownMock = jest.fn();
render(
{}}
onMoveDown={onMoveDownMock}
metrics={metrics}
allowAddMetric={false}
/>,
);
const onMoveUpButton = screen.getByRole("button", {
name: "Move polution down",
});
fireEvent.click(onMoveUpButton);
expect(onMoveDownMock).toBeCalled();
});