close #1870 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds a “Copy” button to error banners and chat error output so users can quickly copy error messages with clear feedback. Addresses Linear #1870. - **New Features** - Introduced CopyErrorMessage component that writes to clipboard and shows “Copied” for 2s. - Added the copy button to the Preview error banner and DyadOutput; actions grouped at the bottom beside “Fix with AI”. - Added Playwright e2e test and helpers to verify copy behavior and clipboard content. <sup>Written for commit 12e9bf1437ded36dc022e1d795025580d2ffd111. Summary will update automatically on new commits.</sup> <!-- End of auto-generated description by cubic. -->
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { testSkipIfWindows, test } from "./helpers/test_helper";
|
|
import { expect } from "@playwright/test";
|
|
|
|
testSkipIfWindows("fix error with AI", async ({ po }) => {
|
|
await po.setUp({ autoApprove: true });
|
|
await po.sendPrompt("tc=create-error");
|
|
|
|
await po.snapshotPreviewErrorBanner();
|
|
|
|
await po.page.getByText("Error Line 6 error", { exact: true }).click();
|
|
await po.snapshotPreviewErrorBanner();
|
|
|
|
await po.clickFixErrorWithAI();
|
|
await po.waitForChatCompletion();
|
|
await po.snapshotMessages();
|
|
|
|
// TODO: this is an actual bug where the error banner should not
|
|
// be shown, however there's some kind of race condition and
|
|
// we don't reliably detect when the HMR update has completed.
|
|
// await po.locatePreviewErrorBanner().waitFor({ state: "hidden" });
|
|
await po.snapshotPreview();
|
|
});
|
|
|
|
testSkipIfWindows("copy error message from banner", async ({ po }) => {
|
|
await po.setUp({ autoApprove: true });
|
|
await po.sendPrompt("tc=create-error");
|
|
|
|
await po.page.getByText("Error Line 6 error", { exact: true }).waitFor({
|
|
state: "visible",
|
|
});
|
|
|
|
await po.clickCopyErrorMessage();
|
|
|
|
const clipboardText = await po.getClipboardText();
|
|
expect(clipboardText).toContain("Error Line 6 error");
|
|
expect(clipboardText.length).toBeGreaterThan(0);
|
|
|
|
await expect(po.page.getByRole("button", { name: "Copied" })).toBeVisible();
|
|
|
|
await expect(po.page.getByRole("button", { name: "Copied" })).toBeHidden({
|
|
timeout: 3000,
|
|
});
|
|
});
|
|
test("fix all errors button", async ({ po }) => {
|
|
await po.setUp({ autoApprove: true });
|
|
await po.sendPrompt("tc=create-multiple-errors");
|
|
|
|
await po.clickFixAllErrors();
|
|
await po.waitForChatCompletion();
|
|
|
|
await po.snapshotMessages();
|
|
});
|