mirror of
https://github.com/grp06/openclaw-studio.git
synced 2026-08-14 08:52:03 +00:00
Make first-run connection setup explain how users open Studio separately from how Studio reaches OpenClaw, so remote and same-host cloud installs are less confusing for beginners. Made-with: Cursor
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { createElement } from "react";
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
|
|
import { ConnectionPanel } from "@/features/agents/components/ConnectionPanel";
|
|
|
|
const buildProps = () => ({
|
|
savedGatewayUrl: "ws://127.0.0.1:18789",
|
|
draftGatewayUrl: "ws://127.0.0.1:18789",
|
|
token: "token",
|
|
hasStoredToken: true,
|
|
localGatewayDefaultsHasToken: false,
|
|
hasUnsavedChanges: false,
|
|
status: "disconnected" as const,
|
|
statusReason: null,
|
|
error: null,
|
|
testResult: null,
|
|
saving: false,
|
|
testing: false,
|
|
onGatewayUrlChange: vi.fn(),
|
|
onTokenChange: vi.fn(),
|
|
onSaveSettings: vi.fn(),
|
|
onTestConnection: vi.fn(),
|
|
onDisconnect: vi.fn(),
|
|
});
|
|
|
|
describe("ConnectionPanel close control", () => {
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
it("renders close control and calls handler when provided", () => {
|
|
const onClose = vi.fn();
|
|
const props = buildProps();
|
|
|
|
render(
|
|
createElement(ConnectionPanel, {
|
|
...props,
|
|
onClose,
|
|
})
|
|
);
|
|
|
|
fireEvent.click(screen.getByTestId("gateway-connection-close"));
|
|
expect(onClose).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("does not render close control when handler is missing", () => {
|
|
render(createElement(ConnectionPanel, buildProps()));
|
|
|
|
expect(screen.queryByTestId("gateway-connection-close")).not.toBeInTheDocument();
|
|
});
|
|
|
|
it("renders semantic gateway status class markers", () => {
|
|
const { rerender } = render(
|
|
createElement(ConnectionPanel, {
|
|
...buildProps(),
|
|
})
|
|
);
|
|
|
|
const disconnected = screen.getByText("Disconnected");
|
|
expect(disconnected).toHaveAttribute("data-status", "disconnected");
|
|
expect(disconnected).toHaveClass("ui-badge-status-disconnected");
|
|
|
|
rerender(
|
|
createElement(ConnectionPanel, {
|
|
...buildProps(),
|
|
status: "connected",
|
|
})
|
|
);
|
|
|
|
const connected = screen.getByText("Connected");
|
|
expect(connected).toHaveAttribute("data-status", "connected");
|
|
expect(connected).toHaveClass("ui-badge-status-connected");
|
|
});
|
|
});
|