diff --git a/ui/src/e2e/new-session-page.e2e.test.ts b/ui/src/e2e/new-session-page.e2e.test.ts index 44bb3afe3764..560d8c1d2bd5 100644 --- a/ui/src/e2e/new-session-page.e2e.test.ts +++ b/ui/src/e2e/new-session-page.e2e.test.ts @@ -798,6 +798,22 @@ describeControlUiE2e("Control UI new-session page mocked Gateway E2E", () => { await expect .poll(() => page.locator(".new-session-page__error").textContent()) .toContain("cloud worker placement could not be verified"); + const alert = page.locator(".new-session-page__alert"); + await expect.poll(() => alert.getAttribute("role")).toBe("alert"); + await expect.poll(() => alert.locator("svg").count()).toBe(1); + const [alertBox, composerBox] = await Promise.all([ + alert.boundingBox(), + page.locator(".new-session-page__composer").boundingBox(), + ]); + expect(alertBox).not.toBeNull(); + expect(composerBox).not.toBeNull(); + expect( + Math.abs( + (alertBox?.x ?? 0) + + (alertBox?.width ?? 0) / 2 - + ((composerBox?.x ?? 0) + (composerBox?.width ?? 0) / 2), + ), + ).toBeLessThanOrEqual(1); await expect.poll(() => startButton.isDisabled()).toBe(false); await page.getByRole("button", { name: "Start session" }).click(); await expect diff --git a/ui/src/pages/new-session/new-session-page.ts b/ui/src/pages/new-session/new-session-page.ts index 80adb6967a48..294aa2699619 100644 --- a/ui/src/pages/new-session/new-session-page.ts +++ b/ui/src/pages/new-session/new-session-page.ts @@ -6,6 +6,7 @@ import { applicationContext, type ApplicationContext } from "../../app/context.t import { beginNativeWindowDragFromTopInset } from "../../app/native-window-drag.ts"; import { hasOperatorAdminAccess } from "../../app/operator-access.ts"; import { loadSettings } from "../../app/settings.ts"; +import { icons } from "../../components/icons.ts"; import "../../components/tooltip.ts"; import "../../components/web-awesome-popover.ts"; import "../../components/web-awesome-select.ts"; @@ -42,6 +43,15 @@ import { renderAgentSelect, renderFolderSelect, renderWhereSelect } from "./targ const CATALOG_RETRY_DELAYS_MS = [0, 1_000, 3_000] as const; +function renderDraftError(message: string) { + return html` +