WitNote / dashboard /src /components /molecules /StartInstanceModal.test.tsx
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
import { render, screen, waitFor } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { beforeEach, describe, expect, it, vi } from "vitest";
import StartInstanceModal from "./StartInstanceModal";
import { useAppStore } from "../../stores/useAppStore";
import type { Instance, Profile } from "../../generated/types";
vi.mock("../../services/api", () => ({
launchInstance: vi.fn(),
fetchInstances: vi.fn(),
}));
const profile: Profile = {
id: "prof_alpha",
name: "alpha",
created: "2026-03-01T10:00:00Z",
lastUsed: "2026-03-05T10:00:00Z",
diskUsage: 1024,
sizeMB: 12,
running: false,
};
describe("StartInstanceModal", () => {
beforeEach(() => {
vi.clearAllMocks();
useAppStore.setState({ instances: [] });
});
it("builds its own launch command from local form state", async () => {
render(
<StartInstanceModal open={true} profile={profile} onClose={() => {}} />,
);
const command = document.querySelector("textarea") as HTMLTextAreaElement;
expect(command.value).toContain('"profileId":"prof_alpha"');
expect(command.value).toContain('"mode":"headed"');
await userEvent.type(
screen.getByPlaceholderText("Auto-select from configured range"),
"9988",
);
await userEvent.click(
screen.getByLabelText("Headless (best for Docker/VPS)"),
);
expect(command.value).toContain('"port":"9988"');
expect(command.value).not.toContain('"mode":"headed"');
});
it("launches the selected profile and refreshes instances", async () => {
const { fetchInstances, launchInstance } =
await import("../../services/api");
const onClose = vi.fn();
const updatedInstances: Instance[] = [
{
id: "inst_alpha",
profileId: "prof_alpha",
profileName: "alpha",
port: "9988",
headless: false,
status: "running",
startTime: "2026-03-06T10:00:00Z",
attached: false,
},
];
vi.mocked(launchInstance).mockResolvedValue({} as never);
vi.mocked(fetchInstances).mockResolvedValue(updatedInstances);
render(
<StartInstanceModal open={true} profile={profile} onClose={onClose} />,
);
await userEvent.click(screen.getByRole("button", { name: "Start" }));
await waitFor(() => {
expect(launchInstance).toHaveBeenCalledWith({
name: "alpha",
mode: "headed",
port: undefined,
});
});
expect(fetchInstances).toHaveBeenCalledTimes(1);
expect(useAppStore.getState().instances).toEqual(updatedInstances);
expect(onClose).toHaveBeenCalledTimes(1);
});
});