Jelajahi Sumber

test(de-ai): 补充 frontmatter 剥离与正文对比断言

覆盖审核弹窗只展示正文,并同步 entry 源码契约断言。

Co-authored-by: Cursor <cursoragent@cursor.com>
darknessomi 1 bulan lalu
induk
melakukan
24b12fb79c

+ 2 - 2
src/components/novel/de-ai-batch-entry.spec.ts

@@ -13,8 +13,8 @@ describe("de-ai batch entry and settings", () => {
     expect(previewPanel).toContain("runWholeChapterDeAi")
     expect(previewPanel).toContain("registerEditorExternalUpdateHandler")
     expect(previewPanel).toContain("createDeAiBatchChapterApplier")
-    expect(previewPanel).toContain("await applyDeAiBatchChapter(task.chapterPath, candidateContent)")
-    expect(previewPanel).toContain("updateTask(chapterId, { candidateContent })")
+    expect(previewPanel).toContain("await applyDeAiBatchChapter(task.chapterPath, body)")
+    expect(previewPanel).toContain("updateTask(chapterId, { candidateContent: body })")
     expect(previewPanel).toContain("useDeAiTaskStore.getState().closeReview(project.path)")
     expect(previewPanel).toContain("saveDeAiDraftWithoutOverwrite")
     expect(previewPanel).toContain("writeFileIfAbsent")

+ 38 - 1
src/components/novel/de-ai-batch-review-dialog.spec.tsx

@@ -237,4 +237,41 @@ describe("DeAiBatchReviewDialog", () => {
     expect(button("重新生成").disabled).toBe(true)
     expect(button("另存草稿").disabled).toBe(true)
     expect(button("取消当前章").disabled).toBe(true)
-  })})
+  })
+
+  it("对比时剥离 frontmatter 与标题,只展示正文", () => {
+    const source = record()
+    source.chapters[0] = {
+      ...source.chapters[0],
+      sourceContent: [
+        "---",
+        "type: chapter",
+        "title: 第一章",
+        "chapter_number: 1",
+        "---",
+        "",
+        "# 第一章",
+        "",
+        "第一章原文",
+      ].join("\n"),
+      candidateContent: [
+        "---",
+        "title: 不应出现",
+        "---",
+        "# 假标题",
+        "",
+        "第一章候选",
+      ].join("\n"),
+    }
+    const props = render("chapter-1", callbacks(), source)
+
+    expect(document.body.textContent).toContain("第一章原文")
+    expect(document.body.textContent).not.toContain("chapter_number")
+    expect(document.body.textContent).not.toContain("不应出现")
+    expect(document.body.querySelector<HTMLTextAreaElement>('textarea[aria-label="最新源码"]')?.value)
+      .toBe("第一章候选")
+
+    act(() => button("确认当前章").click())
+    expect(props.onConfirm).toHaveBeenCalledWith("task-a", "chapter-1", "第一章候选")
+  })
+})