import "../../../molecules/forms/select/all.ts";
import "../../../molecules/table/all.ts";
import { fireEvent, render, screen, within } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import availableActions from "../../__fixtures__/form-actions.json";
import data from "./__fixtures__/data.json";
import { ActionsTable } from "./ActionsTable";
const args: any = {
data: data,
availableActions: availableActions.map(({ name, title }) => ({
label: title,
value: name
})),
operations: [
{
title: "Edit",
action: "edit",
alias: "row",
path: "/resources/:resourceId/submissions/:submissionId",
icon: "edit",
permissionsResolver() {
return true;
}
},
{
action: "delete",
path: "/resources/:resourceId/submissions/:submissionId/delete",
icon: "trash",
buttonType: "danger",
permissionsResolver() {
return true;
}
}
]
};
describe("ActionsTable", () => {
it("should render the table actions", async () => {
const onAddAction = vi.fn();
render();
const btn = screen.getByTestId("action-table-add");
const cells = screen.getAllByRole("cell");
const options = within(screen.getByTestId("action-table-select")).getAllByRole("option");
expect(btn).toHaveProperty("disabled");
expect(btn.innerHTML).toMatch("Add action");
expect(cells[0].innerHTML).toMatch("Save Submission");
expect(options.length).toEqual(17);
expect(options[0].innerHTML).toMatch("Select an action");
expect(options[1].innerHTML).toMatch("Webhook (Premium)");
});
it("should not call addAction when the default item is selected", async () => {
const onAddAction = vi.fn();
render();
const btn = screen.getByTestId("action-table-add");
fireEvent.click(btn);
expect(onAddAction).not.toHaveBeenCalled();
});
it("should call addAction with the selected action", async () => {
const onAddAction = vi.fn();
render();
const btn = screen.getByTestId("action-table-add");
const select = screen.getByTestId("action-table-select");
await userEvent.selectOptions(select, "sql");
fireEvent.click(btn);
expect(btn).not.toHaveProperty("disabled", true);
expect(onAddAction).toHaveBeenCalledWith("sql");
});
});