From d82c69b4b0555129bef7a2a1e417b2e393cfdeee Mon Sep 17 00:00:00 2001 From: Shaheer Sarfaraz <53654735+DaKheera47@users.noreply.github.com> Date: Mon, 9 Feb 2026 21:25:00 +0000 Subject: [PATCH] Edit job details in UI (#119) * api(jobs): normalize PATCH /jobs/:id response contract and error mapping * api(jobs): support core job detail edits in update schema * feat(client): add JobDetailsEditDrawer with core metadata form * feat(orchestrator): open edit drawer from JobDetailPanel more actions * feat(orchestrator): add edit drawer trigger to ready and discovered more actions --- .../components/JobDetailsEditDrawer.test.tsx | 154 ++++++++ .../components/JobDetailsEditDrawer.tsx | 360 ++++++++++++++++++ .../src/client/components/ReadyPanel.test.tsx | 49 +++ .../src/client/components/ReadyPanel.tsx | 14 + .../discovered-panel/DecideMode.tsx | 7 + .../discovered-panel/DiscoveredPanel.test.tsx | 49 +++ .../discovered-panel/DiscoveredPanel.tsx | 11 + .../orchestrator/JobDetailPanel.test.tsx | 50 +++ .../pages/orchestrator/JobDetailPanel.tsx | 15 + .../src/server/api/routes/jobs.test.ts | 113 ++++++ orchestrator/src/server/api/routes/jobs.ts | 68 +++- shared/src/types.ts | 9 +- 12 files changed, 889 insertions(+), 10 deletions(-) create mode 100644 orchestrator/src/client/components/JobDetailsEditDrawer.test.tsx create mode 100644 orchestrator/src/client/components/JobDetailsEditDrawer.tsx diff --git a/orchestrator/src/client/components/JobDetailsEditDrawer.test.tsx b/orchestrator/src/client/components/JobDetailsEditDrawer.test.tsx new file mode 100644 index 0000000..a24cac0 --- /dev/null +++ b/orchestrator/src/client/components/JobDetailsEditDrawer.test.tsx @@ -0,0 +1,154 @@ +import type { Job } from "@shared/types.js"; +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import type React from "react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import * as api from "../api"; +import { JobDetailsEditDrawer } from "./JobDetailsEditDrawer"; + +vi.mock("@/components/ui/sheet", () => ({ + Sheet: ({ open, children }: { open: boolean; children: React.ReactNode }) => + open ?
{children}
+ ), +})); + +vi.mock("../api", () => ({ + updateJob: vi.fn(), + checkSponsor: vi.fn(), + rescoreJob: vi.fn(), +})); + +vi.mock("sonner", () => ({ + toast: { + success: vi.fn(), + error: vi.fn(), + }, +})); + +const createJob = (overrides: Partial