/*
Copyright (C) 2023 Cloudbase Solutions SRL
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
import React from "react";
import { fireEvent, render } from "@testing-library/react";
import TestUtils from "@tests/TestUtils";
import ReplicaExecutionOptions from ".";
jest.mock("@src/plugins/default/ContentPlugin", () => jest.fn(() => null));
describe("ReplicaExecutionOptions", () => {
let defaultProps: ReplicaExecutionOptions["props"];
beforeEach(() => {
defaultProps = {
options: {
shutdown_instances: true,
},
disableExecutionOptions: false,
onChange: jest.fn(),
executionLabel: "Execute",
onCancelClick: jest.fn(),
onExecuteClick: jest.fn(),
};
});
it("renders without crashing", () => {
const { getByText } = render();
expect(getByText(defaultProps.executionLabel)).toBeTruthy();
});
it("executes on Enter", () => {
render();
fireEvent.keyDown(document.body, { key: "Enter" });
expect(defaultProps.onExecuteClick).toHaveBeenCalled();
});
it("returns original field value if options is null", () => {
render(
);
expect(TestUtils.select("Switch__Wrapper")?.textContent).toBe("No");
});
it("handles value change", () => {
render();
fireEvent.click(TestUtils.select("Switch__InputWrapper")!);
expect(defaultProps.onChange).toHaveBeenCalledWith(
"shutdown_instances",
false
);
});
it("handles execute click", () => {
const { getByText } = render();
fireEvent.click(getByText(defaultProps.executionLabel));
expect(defaultProps.onExecuteClick).toHaveBeenCalled();
});
});