import { render, screen, waitFor } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import ConnectionArea from ".";
jest.mock("@robotical/webapp-types/dist-types/src/store/SelectedRaftContext", () => ({
NewRobotIdE: {
NEW: "=+__new__+=",
},
}));
jest.mock("./RobotButton", () => ({
__esModule: true,
default: ({ connectedRaft }: { connectedRaft: { id: string } }) => (
Connected robot {connectedRaft.id}
),
}));
const setApplicationManager = (applicationManager: Record) => {
Object.defineProperty(window, "applicationManager", {
configurable: true,
value: applicationManager,
});
};
describe("ConnectionArea", () => {
it("keeps the legacy connect tile as a semantic button", async () => {
const connectGeneric = jest.fn(
async (afterConnected?: (raft: { id: string }) => void) => {
afterConnected?.({ id: "marty-1" });
}
);
setApplicationManager({
connectedRafts: {},
connectGeneric,
disconnectGeneric: jest.fn(),
});
render();
const connectButton = screen.getByRole("button", { name: "Connect device" });
expect(connectButton.tagName).toBe("BUTTON");
userEvent.click(connectButton);
await waitFor(() => expect(connectGeneric).toHaveBeenCalledTimes(1));
expect(screen.getByRole("status").textContent).toBe(
"Ready to connect a device."
);
});
it("shows the legacy add control when a robot is connected", async () => {
const connectGeneric = jest.fn(async () => undefined);
setApplicationManager({
connectedRafts: {
"marty-1": {
id: "marty-1",
type: "Marty",
},
},
connectGeneric,
disconnectGeneric: jest.fn(),
});
render();
expect(screen.getByText("Connected robot marty-1")).toBeTruthy();
const addButton = screen.getByRole("button", {
name: "Connect another robot",
});
userEvent.click(addButton);
await waitFor(() => expect(connectGeneric).toHaveBeenCalledTimes(1));
});
});