Q182: dialogs stay busy while their request runs and ignore repeat submits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-10-09 06:03:09 -04:00
1 parent 3039835644
commit 3f8832702e
19 files changed
+115 -39

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
import { _electron as electron, expect, test } from "@playwright/test";
import { mkdirSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
import { randomUUID } from "node:crypto";
import { seedBuiltinSkillsFixture } from "./builtin-skills-fixture";
import { onboard } from "./onboard";
test("a dialog submitted twice in a row creates one record", async () => {
const profileDir = join(tmpdir(), `agentcompany-new-e2e-double-${randomUUID()}`);
mkdirSync(profileDir, { recursive: true });
const builtinDir = seedBuiltinSkillsFixture(join(tmpdir(), `agentcompany-new-e2e-double-builtin-${randomUUID()}`));
const app = await electron.launch({
args: [resolve("out/main/index.js")],
env: { ...process.env, AGENTCOMPANY_NEW_PROFILE_DIR: profileDir, AGENTCOMPANY_NEW_AUTORUN: "0", AGENTCOMPANY_NEW_BUILTIN_SKILLS_DIR: builtinDir },
});
try {
const page = await app.firstWindow();
await onboard(page, "Double Co");
await page.getByRole("button", { name: "Work" }).click();
await page.getByRole("button", { name: "Goal", exact: true }).click();
await page.locator(".modal").getByLabel("Title").fill("Only once");
await page.locator(".modal").getByLabel("Description").fill("d");
// Two submits in the same tick, as an impatient double click sends them.
await page.locator(".modal").evaluate((form) => {
(form as HTMLFormElement).requestSubmit();
(form as HTMLFormElement).requestSubmit();
});
await expect(page.locator(".modal")).toHaveCount(0);
const titles = await page.evaluate(async () => {
const api = (window as unknown as { agentCompany: { loadSnapshot: () => Promise<{ ok: true; data: { goals: Array<{ title: string }> } }> } }).agentCompany;
return (await api.loadSnapshot()).data.goals.map((goal) => goal.title).filter((title) => title === "Only once");
});
expect(titles).toEqual(["Only once"]);
} finally {
await app.close();
}
});