43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { expect, test, type Page } from "@playwright/test";
|
|
|
|
async function ensureSignedIn(page: Page) {
|
|
await page.goto("/");
|
|
const devLogin = page.getByRole("button", { name: "Dev login" });
|
|
if (await devLogin.isVisible().catch(() => false)) {
|
|
await devLogin.click();
|
|
await page.waitForURL((url) => !url.pathname.startsWith("/login"));
|
|
}
|
|
}
|
|
|
|
test("assistant bubble is hidden until opted in", async ({ page }) => {
|
|
await page.goto("/");
|
|
await expect(page.getByRole("button", { name: "Open assistant" })).toHaveCount(0);
|
|
});
|
|
|
|
test("assistant chat smoke after opt-in", async ({ page }) => {
|
|
await ensureSignedIn(page);
|
|
await page.goto("/settings?s=appearance");
|
|
const assistantSwitch = page.getByRole("switch", { name: "AI assistant" });
|
|
if (!(await assistantSwitch.isChecked())) {
|
|
await assistantSwitch.click();
|
|
}
|
|
await expect(assistantSwitch).toBeChecked();
|
|
|
|
await page.goto("/");
|
|
await page.getByRole("button", { name: "Open assistant" }).click();
|
|
await expect(page.getByRole("dialog", { name: "Assistant" })).toBeVisible();
|
|
await expect(page.getByRole("combobox", { name: "Assistant model" })).toBeVisible();
|
|
|
|
await page.getByLabel("Message for Assistant").fill("hello assistant");
|
|
await page.getByRole("button", { name: "Send" }).click();
|
|
|
|
await expect(page.getByText("hello assistant")).toBeVisible();
|
|
const dialog = page.getByRole("dialog", { name: "Assistant" });
|
|
await expect(dialog.locator(".animate-spin").first()).toBeVisible({ timeout: 5000 });
|
|
await expect(dialog.locator(".animate-spin")).toHaveCount(0, { timeout: 30_000 });
|
|
|
|
await page.reload();
|
|
await page.getByRole("button", { name: "Open assistant" }).click();
|
|
await expect(page.getByText("hello assistant")).toBeVisible();
|
|
});
|