feat(FN-2729): merge fusion/fn-2729

- feat(FN-2729): align routing lock and bulk node status indicator
- feat(FN-2729): complete Step 4 — remove duplicated node status CSS
- feat(FN-2729): complete Step 3 — add routing summary health dot
- feat(FN-2729): complete Step 2 — adopt NodeHealthDot in InlineCreateCard
- feat(FN-2729): complete Step 1 — adopt NodeHealthDot in TaskForm

Fusion-Task-Id: FN-2729
This commit is contained in:
Fusion
2026-04-29 09:03:27 -07:00
committed by gsxdsm
parent 3672700306
commit 9bdc80fa06

View File

@@ -2211,6 +2211,21 @@ describe("ListView - Bulk Selection", () => {
expect(await screen.findByRole("option", { name: "○ Node Two (Offline)" })).toBeInTheDocument(); expect(await screen.findByRole("option", { name: "○ Node Two (Offline)" })).toBeInTheDocument();
}); });
it("shows NodeHealthDot for selected bulk node override", async () => {
const user = userEvent.setup();
const tasks = [createMockTask({ id: "FN-001" })];
vi.mocked(fetchNodes).mockResolvedValue([{ id: "node-abc", name: "Node ABC", status: "online" } as never]);
render(<ListView tasks={tasks} onMoveTask={vi.fn()} onOpenDetail={vi.fn()} addToast={mockAddToast} projectId={TEST_PROJECT_ID} availableModels={availableModels} />);
await user.click(screen.getByLabelText("Select FN-001"));
const nodeSelect = await screen.findByLabelText("Node Override");
await user.selectOptions(nodeSelect, "node-abc");
expect(document.querySelector(".status-dot--online")).toBeInTheDocument();
expect(screen.getByText("Online")).toBeInTheDocument();
});
it("applies explicit node override through batchUpdateTaskModels", async () => { it("applies explicit node override through batchUpdateTaskModels", async () => {
const user = userEvent.setup(); const user = userEvent.setup();
const tasks = [createMockTask({ id: "FN-001" })]; const tasks = [createMockTask({ id: "FN-001" })];