import { expect, test } from "../../fixtures/test-base"; const PATH = "/settings/preferences/task-behavior"; test("concise descriptions retain hover and keyboard technical help", async ({ testPage }) => { await testPage.goto(`${PATH}?tab=unknown`); await expect(testPage.getByRole("tab", { name: "Tasks", exact: true })).toHaveAttribute( "aria-selected", "true", ); await expect(testPage.getByText("create_task_kandev", { exact: true })).not.toBeVisible(); const info = testPage.getByRole("button", { name: "About Profile for Tasks Created by Agents" }); await info.hover(); await expect(testPage.getByRole("tooltip")).toContainText("Workflow-selected profiles win first"); await testPage.mouse.move(0, 0); await info.focus(); await expect(testPage.getByRole("tooltip")).toContainText("agent_profile_id"); await testPage.keyboard.press("Escape"); await testPage.getByRole("tab", { name: "Runtime", exact: true }).click(); await expect(testPage.getByTestId("message-queue-max-per-session")).toBeVisible(); await expect(testPage.getByTestId("task-behavior-settings").locator("details")).toHaveCount(0); }); test("drafts and Reset span tabs and a failed inactive save reveals its tab once", async ({ testPage, }) => { await testPage.goto(PATH); const creation = testPage.locator("#creation-auto-focus"); const initial = await creation.getAttribute("aria-checked"); await creation.click(); await testPage.getByRole("tab", { name: "Conversation", exact: true }).click(); await testPage.locator("#show-anchored-prompt-bar").click(); await expect(testPage.getByRole("tab", { name: "Tasks", exact: true })).toContainText( "Unsaved changes", ); await expect(testPage.getByRole("tab", { name: "Conversation", exact: true })).toContainText( "Unsaved changes", ); await testPage.getByRole("tab", { name: "Runtime", exact: true }).click(); const queue = testPage.getByTestId("message-queue-max-per-session"); const baseline = await queue.inputValue(); await queue.fill(String(Number(baseline) + 1)); await testPage .getByTestId("settings-floating-save") .getByRole("button", { name: "Reset", exact: true }) .click(); await expect(queue).toHaveValue(baseline); await testPage.getByRole("tab", { name: "Tasks", exact: true }).click(); await expect(creation).toHaveAttribute("aria-checked", initial!); await creation.click(); await testPage.getByRole("tab", { name: "Conversation", exact: true }).click(); await testPage.route("**/api/v1/user/settings", async (route) => { if (route.request().method() === "PATCH") await route.fulfill({ status: 500, body: "{}" }); else await route.continue(); }); await testPage .getByTestId("settings-floating-save") .getByRole("button", { name: "Save changes" }) .click(); await expect(testPage.getByRole("tab", { name: "Tasks", exact: true })).toHaveAttribute( "aria-selected", "true", ); await testPage.getByRole("tab", { name: "Conversation", exact: true }).click(); await expect(testPage.getByRole("tab", { name: "Conversation", exact: true })).toHaveAttribute( "aria-selected", "true", ); await testPage .getByTestId("settings-floating-save") .getByRole("button", { name: "Reset", exact: true }) .click(); }); for (const width of [767, 768]) { test(`tabs and info stay contained at ${width}px`, async ({ testPage }) => { await testPage.setViewportSize({ width, height: 1000 }); await testPage.goto(PATH); const info = testPage.getByRole("button", { name: "About Open new tasks automatically" }); const box = await info.boundingBox(); expect(box!.height).toBe(width < 768 ? 44 : 24); expect( await testPage.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth), ).toBe(true); }); } test("Save changes persists drafts from all three tabs", async ({ testPage, apiClient }) => { const baseline = (await apiClient.getUserSettings()).settings; const queueResponse = await apiClient.rawRequest("GET", "/api/v1/system/message-queue/settings"); const queueBaseline = (await queueResponse.json()) as { settings: { max_per_session: number } }; try { await testPage.goto(PATH); await testPage.locator("#creation-auto-focus").click(); await testPage.getByRole("tab", { name: "Conversation", exact: true }).click(); await testPage.locator("#show-anchored-prompt-bar").click(); await testPage.getByRole("tab", { name: "Runtime", exact: true }).click(); const nextQueue = queueBaseline.settings.max_per_session + 1; await testPage.getByTestId("message-queue-max-per-session").fill(String(nextQueue)); await testPage .getByTestId("settings-floating-save") .getByRole("button", { name: "Save changes" }) .click(); await expect(testPage.getByTestId("settings-floating-save")).not.toBeVisible(); await testPage.reload(); await expect(testPage.getByTestId("message-queue-max-per-session")).toHaveValue( String(nextQueue), ); await testPage.getByRole("tab", { name: "Conversation", exact: true }).click(); await expect(testPage.locator("#show-anchored-prompt-bar")).toHaveAttribute( "aria-checked", String(!baseline.show_anchored_prompt_bar), ); await testPage.getByRole("tab", { name: "Tasks", exact: true }).click(); await expect(testPage.locator("#creation-auto-focus")).toHaveAttribute( "aria-checked", String(!baseline.auto_focus_new_tasks), ); } finally { await apiClient.saveUserSettings({ auto_focus_new_tasks: baseline.auto_focus_new_tasks, show_anchored_prompt_bar: baseline.show_anchored_prompt_bar, }); await apiClient.rawRequest("PATCH", "/api/v1/system/message-queue/settings", { max_per_session: queueBaseline.settings.max_per_session, }); } });