fix(canvas): 画布媒体 - 修复预览首帧音量和创作状态展示

This commit is contained in:
Codex Audit
2026-09-23 11:10:45 +08:00
parent 7737047a8d
commit 12796b048c
30 changed files with 689 additions and 182 deletions

View File

@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test";
import { generationTaskShowsProgress, generationTaskStatusLabel, mediaDeliverySummary } from "@/lib/generation-task-display";
import { canCancelGenerationTask, generationTaskShowsProgress, generationTaskStageLabel, generationTaskStatusLabel, mediaDeliverySummary } from "@/lib/generation-task-display";
import { resetGenerationTaskMetadata } from "@/lib/canvas/canvas-task-state";
describe("作品保存阶段", () => {
@@ -22,3 +22,35 @@ describe("作品保存阶段", () => {
expect(metadata.taskCanRecoverMedia).toBeUndefined();
});
});
describe("生成任务取消边界", () => {
test("排队和本地准备阶段仍允许取消", () => {
expect(canCancelGenerationTask({ status: "queued", stage: "等待队列调度" })).toBe(true);
expect(canCancelGenerationTask({ status: "running", stage: "后端接管任务" })).toBe(true);
});
test("进入上游提交阶段后立即隐藏取消入口", () => {
for (const stage of ["调用生成模型", "正在连接上游", "上游生成中", "后台仍在生成", "等待上游任务同步", "generating", "submitting", "submitted", "submission_unknown"]) {
expect(canCancelGenerationTask({ status: "running", stage })).toBe(false);
}
});
test("已有上游请求或取消协调状态时不可取消", () => {
expect(canCancelGenerationTask({ status: "running", stage: "后端接管任务", providerRequestId: "provider-1" })).toBe(false);
expect(canCancelGenerationTask({ status: "running", stage: "后端接管任务", providerCancelStatus: "requested" })).toBe(false);
});
test("作品已生成进入保存阶段或上游返回未知阶段时也不暴露取消入口", () => {
expect(canCancelGenerationTask({ status: "running", stage: "作品已生成,正在保存", mediaStage: "upload" })).toBe(false);
expect(canCancelGenerationTask({ status: "running", stage: "provider_processing" })).toBe(false);
expect(canCancelGenerationTask({ status: "running", stage: "" })).toBe(false);
expect(canCancelGenerationTask({ status: "queued", stage: "" })).toBe(true);
});
});
describe("生成任务用户可见阶段", () => {
test("不向用户暴露参考素材准备和上游连接等技术阶段", () => {
expect(generationTaskStageLabel({ status: "running", stage: "正在准备参考素材" })).toBe("作品创作中");
expect(generationTaskStageLabel({ status: "running", stage: "正在连接上游" })).toBe("作品创作中");
});
});