import {render,screen} from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import {it,expect,vi,afterEach} from "vitest"; import {EditorWorkflowPanel} from "../src/components/tools/EditorWorkflowPanel.js"; const url="/api/sessions/ses_1/editor/job_1/workflow"; afterEach(()=>vi.unstubAllGlobals()); it("shows the actual registered preview with REVIEW labeling and no auto approval",async()=>{ vi.stubGlobal("fetch",()=>Promise.resolve({ok:true,json:()=>Promise.resolve({jobId:"job_1",selection:null,plan:null,preview:{url:"/api/sessions/ses_1/editor/job_1/plans/plan_1/preview",duration:10,reviewStatus:"REVIEW",sha256:"abc",machinePass:true}})})); render(); await userEvent.click(screen.getByRole("button",{name:"打开剪辑审核与预览"})); expect(await screen.findByText(/10 秒/)).toBeVisible(); expect(screen.getByLabelText("REVIEW 视频预览")).toHaveAttribute("src","/api/sessions/ses_1/editor/job_1/plans/plan_1/preview"); expect(screen.getByRole("link",{name:"下载 REVIEW MP4"})).toHaveAttribute("href","/api/sessions/ses_1/editor/job_1/plans/plan_1/preview?download=1"); expect(screen.queryByText("最终审核 PASS")).not.toBeInTheDocument(); }); it("keeps human review boxes unchecked and rejects off-job media URLs",async()=>{ vi.stubGlobal("fetch",()=>Promise.resolve({ok:true,json:()=>Promise.resolve({jobId:"job_1",selection:{hash:"abc",reviewed:false,segments:[{id:"one",episodeNo:1,start:0,end:10,videoUrl:"https://external.example/secret",reason:"Test",subtitles:"Test"}]},plan:null,preview:null})})); render();await userEvent.click(screen.getByRole("button",{name:"打开剪辑审核与预览"})); for(const checkbox of await screen.findAllByRole("checkbox"))expect(checkbox).not.toBeChecked(); expect(screen.queryByLabelText("选段 one 原声视频")).not.toBeInTheDocument(); });