- fix(FN-2729): silence ansi strip lint warning - test(FN-2729): complete Step 10 — cover node health indicators - feat(FN-2729): complete Step 9 — colorize CLI node status output - feat(FN-2729): complete Step 8 — use NodeHealthDot in settings routing status - test(FN-2729): align ListView node override option expectations - feat(FN-2729): complete Step 7 — add bulk node status indicators - fix(engine): prevent auto-merge cooldown loop on unresolvable conflicts - feat(FN-2911): improve chat attachment compose and preview UX - feat(FN-2921): merge fusion/fn-2921 - feat(FN-2909): merge fusion/fn-2909 - feat(FN-2914): merge fusion/fn-2914 - feat(FN-2902): merge fusion/fn-2902 - chore(release): v0.8.3 - Update changeset - fix(tui): swap 3/4 panel hotkeys so they match the help text - fix(tui): always show auth token and report accurate macOS memory usage Fusion-Task-Id: FN-2729
35 lines
1.7 KiB
TypeScript
35 lines
1.7 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { render, screen } from "@testing-library/react";
|
|
import { ProjectNodeSelector } from "../ProjectNodeSelector";
|
|
import type { NodeInfo } from "../../api";
|
|
|
|
const nodes: NodeInfo[] = [
|
|
{ id: "node-1", name: "Alpha", type: "remote", status: "online" },
|
|
{ id: "node-2", name: "Beta", type: "remote", status: "offline" },
|
|
{ id: "node-3", name: "Gamma", type: "local", status: "error" },
|
|
];
|
|
|
|
describe("ProjectNodeSelector", () => {
|
|
it("renders select with auto option", () => {
|
|
render(<ProjectNodeSelector projectId="p1" nodes={nodes} onSelect={vi.fn()} />);
|
|
expect(screen.getByRole("option", { name: "Auto (no assignment)" })).toBeInTheDocument();
|
|
});
|
|
|
|
it("renders node option labels with type and status", () => {
|
|
render(<ProjectNodeSelector projectId="p1" nodes={nodes} onSelect={vi.fn()} />);
|
|
expect(screen.getByRole("option", { name: "Alpha (remote) — online" })).toBeInTheDocument();
|
|
expect(screen.getByRole("option", { name: "Beta (remote) — offline" })).toBeInTheDocument();
|
|
});
|
|
|
|
it("dims offline and error options", () => {
|
|
render(<ProjectNodeSelector projectId="p1" nodes={nodes} onSelect={vi.fn()} />);
|
|
expect(screen.getByRole("option", { name: "Beta (remote) — offline" })).toHaveClass("project-node-selector__option--dim");
|
|
expect(screen.getByRole("option", { name: "Gamma (local) — error" })).toHaveClass("project-node-selector__option--dim");
|
|
});
|
|
|
|
it("does not dim online options", () => {
|
|
render(<ProjectNodeSelector projectId="p1" nodes={nodes} onSelect={vi.fn()} />);
|
|
expect(screen.getByRole("option", { name: "Alpha (remote) — online" })).not.toHaveClass("project-node-selector__option--dim");
|
|
});
|
|
});
|