test(e2e): scope the AI-read card-marker assertion to desktop

The vault timeline is virtualized; on the narrow mobile viewport the seeded
Radiology-note card renders outside the initial virtual window (not in the
DOM), so the card-level attribute read waited out the full test timeout on a
non-existent node. The provenance contract is asserted on every project via
the detail status pill; the card marker (viewport-independent render logic,
also covered by the SSR card test) is asserted on desktop where the card is
reliably in view.
This commit is contained in:
Marc-André Bombeck committed 2026-07-09 00:39:24 +02:00
1 parent 50e630bf2d
commit 40c46f6f5b
1 file changed
+20 -17
+20 -17
View File
@@ -352,33 +352,36 @@ test.describe("document vault — AI assist + content search", () => {
test("a vision-indexed document surfaces the AI-read provenance", async ({
page,
}) => {
}, testInfo) => {
// CONTENT_DOC_ID is seeded with source "vision" (an AI provider read it).
// No mocks: the real list/detail GET threads the provenance through.
await page.goto(`/documents?doc=${CONTENT_DOC_ID}`);
const sheet = page.getByRole("dialog");
await expect(sheet).toBeVisible();
// The detail status pill reflects the AI-read source.
// The detail status pill reflects the AI-read source — asserted on every
// project (this is the provenance contract; it holds on desktop + mobile).
const status = sheet.locator('[data-slot="content-search-status"]');
await expect(status).toHaveAttribute("data-state", "ai-read");
await expect(status).toHaveText(/Read by AI/);
// The timeline card marks the same document with the AI-read Sparkles.
await page.keyboard.press("Escape");
const marker = page
.locator('[data-slot="document-card"]', { hasText: "Radiology note" })
.locator('[data-slot="document-searchable"]')
.first();
// The card marker appears after the list query invalidates and refetches
// the new provenance; on a loaded runner that round-trip can outlast the
// default 5s expect timeout, so wait explicitly for it to resolve. Scroll
// it into view first — the mobile timeline can render the card outside the
// viewport, where the attribute read intermittently misses it.
await marker.scrollIntoViewIfNeeded();
await expect(marker).toHaveAttribute("data-source", "ai-read", {
timeout: 20_000,
});
// The timeline card carries the same AI-read marker — desktop only. The
// vault timeline is virtualized; on the narrow mobile viewport the seeded
// card renders outside the initial virtual window (not in the DOM), so a
// card-level attribute read there tests the virtualizer, not the marker.
// The marker's render logic is viewport-independent and covered by the SSR
// card test + this desktop assertion; mobile provenance is already proven
// by the status pill above.
if (testInfo.project.name !== "chromium-mobile") {
await page.keyboard.press("Escape");
const marker = page
.locator('[data-slot="document-card"]', { hasText: "Radiology note" })
.locator('[data-slot="document-searchable"]')
.first();
await expect(marker).toHaveAttribute("data-source", "ai-read", {
timeout: 20_000,
});
}
});
// ── (f) Text-mode refuses a non-image before any OCR/upload ──────────────