Files
fusion/packages/dashboard/app/components/__tests__/DockerTargetSelector.test.tsx
Fusion 93ecc88fee feat(FN-3109): add Docker connectivity service and target selector UI
This merge adds Docker connectivity management to Fusion (FN-3109), introducing a Docker client service in `@fusion/core` with typed interfaces for daemon connection configuration (host, socket path, TLS). The dashboard gains a `DockerTargetSelector` component for choosing between local socket and T

Fusion-Task-Id: FN-3109
2026-05-03 07:47:45 -07:00

41 lines
1.6 KiB
TypeScript

import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { DockerTargetSelector } from "../DockerTargetSelector";
vi.mock("lucide-react", () => ({ RefreshCw: () => null }));
const hookState = {
contexts: [{ name: "default", isCurrentContext: true }],
isLoadingContexts: false,
contextsError: null,
loadContexts: vi.fn().mockResolvedValue(undefined),
testConnection: vi.fn().mockResolvedValue({ success: true, dockerVersion: "24.0" }),
isTestingConnection: false,
lastTestResult: null,
checkLocalDocker: vi.fn().mockResolvedValue({ available: true, version: "24.0" }),
isCheckingLocal: false,
};
vi.mock("../../hooks/useDockerTargets", () => ({ useDockerTargets: () => hookState }));
describe("DockerTargetSelector", () => {
it("renders modes and emits config", async () => {
const onChange = vi.fn();
render(<DockerTargetSelector onChange={onChange} />);
expect(screen.getByText("Local Docker")).toBeInTheDocument();
expect(screen.getByText("Docker Context")).toBeInTheDocument();
expect(screen.getByText("Remote Host")).toBeInTheDocument();
fireEvent.click(screen.getByText("Docker Context"));
await waitFor(() => expect(hookState.loadContexts).toHaveBeenCalled());
fireEvent.click(screen.getByText("Remote Host"));
expect(screen.getByPlaceholderText("tcp://host:2376")).toBeInTheDocument();
fireEvent.click(screen.getByText("Test Connection"));
await waitFor(() => expect(hookState.testConnection).toHaveBeenCalled());
expect(onChange).toHaveBeenCalled();
});
});