|
8 | 8 | * 与 `nativeButtonBaseline.ts`(本件不做棘轮断言 —— 那是棘轮判据件的职责,重复一份会造两套口径)。 |
9 | 9 | * @ai-context: 具名断言的变量体 = 「删掉 toolbar 的 `tagColors` 透传」⇒ 有色芯片回落默认灰底, |
10 | 10 | * 两条断言(等于查色值 / 不等于无色底)同时红。 |
| 11 | + * @ai-context: ④ 覆盖**本任务新增的那一跳**(`NoteListView` → `NoteListToolbar` 的透传)—— |
| 12 | + * 只测 toolbar 本体时,把 `NoteListView` 里的 `tagColors={tagColors}` 删掉是**测不出来的** |
| 13 | + * (M3 实测:只测本体 ⇒ 变异体静默通过)⇒ 判据必须落在真实装配链上。 |
11 | 14 | */ |
12 | 15 | import { cleanup, render, screen } from "@testing-library/react"; |
13 | | -import { afterEach, describe, expect, it } from "vitest"; |
| 16 | +import { afterEach, describe, expect, it, vi } from "vitest"; |
| 17 | +import type { Note } from "../types"; |
14 | 18 | import { paletteHex } from "../utils/colorPalette"; |
| 19 | + |
| 20 | +const { invokeMock } = vi.hoisted(() => ({ invokeMock: vi.fn() })); |
| 21 | +vi.mock("@tauri-apps/api/core", () => ({ invoke: invokeMock })); |
| 22 | + |
| 23 | +import NoteListView from "./NoteListView"; |
15 | 24 | import NoteListToolbar from "./NoteListToolbar"; |
16 | 25 |
|
17 | 26 | afterEach(cleanup); |
@@ -69,3 +78,28 @@ describe("NoteListToolbar 过滤芯片着色(批 7 T18 · §C11.3)", () => { |
69 | 78 | expect(chip.style.color).toBe("rgb(13, 148, 136)"); |
70 | 79 | }); |
71 | 80 | }); |
| 81 | + |
| 82 | +describe("NoteListView → NoteListToolbar 的查色表透传(批 7 T18 新增的那一跳)", () => { |
| 83 | + it("④ 经真实装配链传 tagColors ⇒ 过滤芯片取到色(删掉这一跳的变异体在这里红)", async () => { |
| 84 | + // Arrange:NoteListView 会拉序行(mock 返回空);笔记带一个标签 |
| 85 | + invokeMock.mockReset(); |
| 86 | + invokeMock.mockImplementation(async () => []); |
| 87 | + const note: Note = { |
| 88 | + id: 1, title: "带标签的笔记", content: "", source: "manual", tags: JSON.stringify(["化妆"]), |
| 89 | + pin: 0, group_id: null, created_at: 0, updated_at: 0, |
| 90 | + }; |
| 91 | + const listProps = { |
| 92 | + notes: [note], groups: [], groupFilter: null, keyword: "", tagFilter: null, |
| 93 | + sortMode: "updated-desc" as const, allTags: ["化妆"], selectedId: null, status: "", |
| 94 | + noteColors: {}, tagColors: { 化妆: "purple" }, |
| 95 | + onKeywordChange: () => {}, onTagFilterChange: () => {}, onSortModeChange: () => {}, |
| 96 | + onSelect: () => {}, onCreate: () => {}, onRefresh: () => {}, onOpenSession: () => {}, |
| 97 | + onBatchDelete: async () => true, |
| 98 | + }; |
| 99 | + // Act |
| 100 | + render(<NoteListView {...listProps} />); |
| 101 | + // Assert |
| 102 | + const chip = await screen.findByTestId("tag-chip-化妆"); |
| 103 | + expect(chip.style.background, "NoteListView 没把查色表透到过滤面板").toBe(asRgba(`${paletteHex("purple", "light")}22`)); |
| 104 | + }); |
| 105 | +}); |
0 commit comments