diff --git a/tests/runner-e2e/chat-catalog-domains/external-company-secret-create-dialog.test.ts b/tests/runner-e2e/chat-catalog-domains/external-company-secret-create-dialog.test.ts
new file mode 100644
index 00000000000..c12e2ba338c
--- /dev/null
+++ b/tests/runner-e2e/chat-catalog-domains/external-company-secret-create-dialog.test.ts
@@ -0,0 +1,34 @@
+import { readFile } from "node:fs/promises";
+import { chromium, type Page } from "@playwright/test";
+import { stripTypeScriptTypes } from "node:module";
+import { expect, it } from "vitest";
+
+it.skipIf(process.env.PAPERCLIP_CHAT_EVAL_SECRET_ROUTE_CANARY !== "1")("waits for the actual company create form to close while its details sheet stays open", async () => {
+ const source = await readFile(new URL("./external-private-browser-worker.ts", import.meta.url), "utf8");
+ const start = source.indexOf(' if(input.mode === "company-secret-create"){');
+ const end = source.indexOf(' if (input.mode === "gateway-token-rotation")', start);
+ expect(start >= 0 && end > start).toBe(true);
+ const code = stripTypeScriptTypes(`async function operation(input:any,page:any){${source.slice(start, end)}}`);
+ const operation = new Function(`${code};return operation`)() as (input: unknown, page: Page) => Promise<{ secretId: string; storageClean: boolean }>;
+ const ui = await readFile(new URL("../../../ui/src/pages/Secrets.tsx", import.meta.url), "utf8");
+ expect(ui).toContain('{editingDefinition ? "Edit user-provided secret" : "Create secret"}');
+ expect(ui).toContain("setCreateOpen(false)");
+ expect(ui).toContain("setDetailSelection(result.item.id)");
+ const browser = await chromium.launch({ headless: true, ...(process.env.PAPERCLIP_RUNNER_E2E_CHROMIUM_EXECUTABLE ? { executablePath: process.env.PAPERCLIP_RUNNER_E2E_CHROMIUM_EXECUTABLE } : {}) });
+ const companyId = "11111111-1111-4111-8111-111111111111", secretId = "22222222-2222-4222-8222-222222222222";
+ try {
+ for (const scenario of ["created", "failed POST", "missing form"]) {
+ const page = await browser.newPage(); page.setDefaultTimeout(700);
+ await page.route("**/*", async route => {
+ if (route.request().method() === "POST") return route.fulfill({ status: scenario === "failed POST" ? 400 : 201, contentType: "application/json", body: JSON.stringify({ id: secretId }) });
+ await route.fulfill({ contentType: "text/html; charset=utf-8", body: `` });
+ });
+ const result = operation({ mode: "company-secret-create", companyId, setupURL: "http://127.0.0.1:3300/RUN/company/settings/secrets", credential: "synthetic-private-value" }, page);
+ if (scenario === "created") {
+ expect(await result).toMatchObject({ secretId, storageClean: true });
+ expect(await page.getByRole("dialog", { name: "Deployment API key", exact: true }).isVisible()).toBe(true);
+ } else await expect(result).rejects.toThrow();
+ await page.close();
+ }
+ } finally { await browser.close(); }
+}, 15000);
diff --git a/tests/runner-e2e/chat-catalog-domains/external-private-browser-worker.ts b/tests/runner-e2e/chat-catalog-domains/external-private-browser-worker.ts
index c79bcbfb740..dec2c43d0ec 100644
--- a/tests/runner-e2e/chat-catalog-domains/external-private-browser-worker.ts
+++ b/tests/runner-e2e/chat-catalog-domains/external-private-browser-worker.ts
@@ -232,7 +232,7 @@ async function main() {
if(input.mode === "company-secret-create"){
if(!input.companyId||!/^[a-f0-9-]{36}$/i.test(input.companyId)||!new URL(input.setupURL).pathname.endsWith("/company/settings/secrets"))throw new Error("Invalid finite company secret operation");
await page.goto(input.setupURL,{waitUntil:"domcontentloaded"});await page.getByRole("button",{name:"New secret",exact:true}).click();
- const dialog=page.getByRole("dialog");await dialog.getByLabel("Name",{exact:true}).fill("Deployment API key");
+ const dialog=page.getByRole("dialog",{name:"Create secret",exact:true});await dialog.getByLabel("Name",{exact:true}).fill("Deployment API key");
await dialog.getByLabel("Provider",{exact:true}).selectOption("local_encrypted");
await dialog.getByLabel("Value",{exact:true}).fill(input.credential);
const created=page.waitForResponse(response=>new URL(response.url()).pathname===`/api/companies/${input.companyId}/secrets`&&response.request().method()==="POST"&&response.status()===201);