Files
fusion/packages/dashboard/app/components/__tests__/ProjectNodeSelector.test.tsx
Fusion 3263babe1b feat(FN-2729): merge fusion/fn-2729
- 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
2026-04-28 23:23:34 -07:00

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");
});
});