BangSo/apps/web/e2e/artifact-preview.spec.ts

66 lines
2.7 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { captureScreenshot, completeOnboarding, signup } from "./helpers";
test.describe.configure({ mode: "serial" });
test("agent-attached files appear as downloadable cards", async ({ page }, testInfo) => {
const stamp = Date.now();
await signup(page, `artifact-card-${stamp}@rakazo.test`, "password12", "Artifact Card");
await completeOnboarding(page);
const composer = page.getByPlaceholder(/Message/);
await composer.fill("write notes/result.txt and attach it to the thread");
await page.keyboard.press("Enter");
// Scope to ArtifactFileCard text (name + mime); sidebar bot status can also
// include the prompt path notes/result.txt once status syncs immediately.
const fileCard = page.getByRole("button", { name: /result\.txt text\/plain/ });
await expect(fileCard).toBeVisible({ timeout: 30_000 });
await captureScreenshot(page, testInfo, "current-file-card");
const downloadPromise = page.waitForEvent("download");
await fileCard.click();
const download = await downloadPromise;
expect(download.suggestedFilename()).toBe("result.txt");
});
test("agent-attached Markdown opens a rendered preview and can be downloaded", async ({
page,
}, testInfo) => {
const stamp = Date.now();
await signup(page, `markdown-preview-${stamp}@rakazo.test`, "password12", "Markdown Preview");
await completeOnboarding(page);
const composer = page.getByPlaceholder(/Message/);
await composer.fill(
"write path notes/preview.md and attach it to the thread says # Project preview",
);
await page.keyboard.press("Enter");
const previewButton = page.getByRole("button", { name: "Preview preview.md" });
await expect(previewButton).toBeVisible({ timeout: 30_000 });
await captureScreenshot(page, testInfo, "markdown-file-card");
await previewButton.click();
const dialog = page.getByRole("dialog", { name: "preview.md" });
await expect(dialog).toBeVisible();
await expect(dialog.getByRole("heading", { name: "Project preview" })).toBeVisible();
const closeButton = dialog.getByRole("button", { name: "Close preview" });
const downloadButton = dialog.getByRole("button", { name: "Download preview.md" });
await expect(closeButton).toBeFocused();
await page.keyboard.press("Tab");
await expect(downloadButton).toBeFocused();
await page.keyboard.press("Shift+Tab");
await expect(closeButton).toBeFocused();
await captureScreenshot(page, testInfo, "markdown-preview-open");
const downloadPromise = page.waitForEvent("download");
await downloadButton.click();
const download = await downloadPromise;
expect(download.suggestedFilename()).toBe("preview.md");
await page.keyboard.press("Escape");
await expect(dialog).toHaveCount(0);
await expect(previewButton).toBeFocused();
});