diff --git a/e2e-tests/helpers/test_helper.ts b/e2e-tests/helpers/test_helper.ts index b5aa2de..c15d050 100644 --- a/e2e-tests/helpers/test_helper.ts +++ b/e2e-tests/helpers/test_helper.ts @@ -522,8 +522,15 @@ export class PageObject { .click({ timeout: Timeout.EXTRA_LONG }); } - async clickDeselectComponent() { - await this.page.getByRole("button", { name: "Deselect component" }).click(); + async clickDeselectComponent(options?: { index?: number }) { + const buttons = this.page.getByRole("button", { + name: "Deselect component", + }); + if (options?.index !== undefined) { + await buttons.nth(options.index).click(); + } else { + await buttons.first().click(); + } } async clickPreviewMoreOptions() { @@ -582,12 +589,12 @@ export class PageObject { await expect(this.getChatInputContainer()).toMatchAriaSnapshot(); } - getSelectedComponentDisplay() { + getSelectedComponentsDisplay() { return this.page.getByTestId("selected-component-display"); } - async snapshotSelectedComponentDisplay() { - await expect(this.getSelectedComponentDisplay()).toMatchAriaSnapshot(); + async snapshotSelectedComponentsDisplay() { + await expect(this.getSelectedComponentsDisplay()).toMatchAriaSnapshot(); } async snapshotPreview({ name }: { name?: string } = {}) { diff --git a/e2e-tests/select_component.spec.ts b/e2e-tests/select_component.spec.ts index 3e43ac8..111f249 100644 --- a/e2e-tests/select_component.spec.ts +++ b/e2e-tests/select_component.spec.ts @@ -14,11 +14,11 @@ testSkipIfWindows("select component", async ({ po }) => { .click(); await po.snapshotPreview(); - await po.snapshotSelectedComponentDisplay(); + await po.snapshotSelectedComponentsDisplay(); await po.sendPrompt("[dump] make it smaller"); await po.snapshotPreview(); - await expect(po.getSelectedComponentDisplay()).not.toBeVisible(); + await expect(po.getSelectedComponentsDisplay()).not.toBeVisible(); await po.snapshotServerDump("all-messages"); @@ -27,6 +27,34 @@ testSkipIfWindows("select component", async ({ po }) => { await po.snapshotServerDump("last-message"); }); +testSkipIfWindows("select multiple components", async ({ po }) => { + await po.setUp(); + await po.sendPrompt("tc=basic"); + await po.clickTogglePreviewPanel(); + await po.clickPreviewPickElement(); + + await po + .getPreviewIframeElement() + .contentFrame() + .getByRole("heading", { name: "Welcome to Your Blank App" }) + .click(); + + await po + .getPreviewIframeElement() + .contentFrame() + .getByText("Made with Dyad") + .click(); + + await po.snapshotPreview(); + await po.snapshotSelectedComponentsDisplay(); + + await po.sendPrompt("[dump] make both smaller"); + await po.snapshotPreview(); + await expect(po.getSelectedComponentsDisplay()).not.toBeVisible(); + + await po.snapshotServerDump("last-message"); +}); + testSkipIfWindows("deselect component", async ({ po }) => { await po.setUp(); await po.sendPrompt("tc=basic"); @@ -40,19 +68,50 @@ testSkipIfWindows("deselect component", async ({ po }) => { .click(); await po.snapshotPreview(); - await po.snapshotSelectedComponentDisplay(); + await po.snapshotSelectedComponentsDisplay(); // Deselect the component and make sure the state has reverted await po.clickDeselectComponent(); await po.snapshotPreview(); - await expect(po.getSelectedComponentDisplay()).not.toBeVisible(); + await expect(po.getSelectedComponentsDisplay()).not.toBeVisible(); // Send one more prompt to make sure it's a normal message. await po.sendPrompt("[dump] tc=basic"); await po.snapshotServerDump("last-message"); }); +testSkipIfWindows( + "deselect individual component from multiple", + async ({ po }) => { + await po.setUp(); + await po.sendPrompt("tc=basic"); + await po.clickTogglePreviewPanel(); + await po.clickPreviewPickElement(); + + await po + .getPreviewIframeElement() + .contentFrame() + .getByRole("heading", { name: "Welcome to Your Blank App" }) + .click(); + + await po + .getPreviewIframeElement() + .contentFrame() + .getByText("Made with Dyad") + .click(); + + await po.snapshotSelectedComponentsDisplay(); + + await po.clickDeselectComponent({ index: 0 }); + + await po.snapshotPreview(); + await po.snapshotSelectedComponentsDisplay(); + + await expect(po.getSelectedComponentsDisplay()).toBeVisible(); + }, +); + testSkipIfWindows("upgrade app to select component", async ({ po }) => { await po.setUp(); await po.importApp("select-component"); @@ -94,7 +153,7 @@ testSkipIfWindows("select component next.js", async ({ po }) => { .click(); await po.snapshotPreview(); - await po.snapshotSelectedComponentDisplay(); + await po.snapshotSelectedComponentsDisplay(); await po.sendPrompt("[dump] make it smaller"); await po.snapshotPreview(); diff --git a/e2e-tests/snapshots/select_component.spec.ts_deselect-component-1.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_deselect-component-1.aria.yml index 556cb43..eb03981 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_deselect-component-1.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_deselect-component-1.aria.yml @@ -5,5 +5,4 @@ - paragraph: Start building your amazing project here! - link "Made with Dyad": - /url: https://www.dyad.sh/ -- img -- text: Edit with AI h1 src/pages/Index.tsx \ No newline at end of file +- text: h1 src/pages/Index.tsx \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_deselect-component-2.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_deselect-component-2.aria.yml index 724e29c..bdb7727 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_deselect-component-2.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_deselect-component-2.aria.yml @@ -1,3 +1,5 @@ +- text: Selected Components (1) +- button "Clear all" - img - text: h1 src/pages/Index.tsx:9 - button "Deselect component": diff --git a/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-1.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-1.aria.yml new file mode 100644 index 0000000..8b730f2 --- /dev/null +++ b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-1.aria.yml @@ -0,0 +1,10 @@ +- text: Selected Components (2) +- button "Clear all" +- img +- text: h1 src/pages/Index.tsx:9 +- button "Deselect component": + - img +- img +- text: a src/components/made-with-dyad.tsx:4 +- button "Deselect component": + - img \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-2.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-2.aria.yml new file mode 100644 index 0000000..62a62f4 --- /dev/null +++ b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-2.aria.yml @@ -0,0 +1,8 @@ +- region "Notifications (F8)": + - list +- region "Notifications alt+T" +- heading "Welcome to Your Blank App" [level=1] +- paragraph: Start building your amazing project here! +- link "Made with Dyad": + - /url: https://www.dyad.sh/ +- text: a src/components/made-with-dyad.tsx \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-3.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-3.aria.yml new file mode 100644 index 0000000..5d9dd38 --- /dev/null +++ b/e2e-tests/snapshots/select_component.spec.ts_deselect-individual-component-from-multiple-3.aria.yml @@ -0,0 +1,6 @@ +- text: Selected Components (1) +- button "Clear all" +- img +- text: a src/components/made-with-dyad.tsx:4 +- button "Deselect component": + - img \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-1.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-component-1.aria.yml index 556cb43..eb03981 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-1.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-1.aria.yml @@ -5,5 +5,4 @@ - paragraph: Start building your amazing project here! - link "Made with Dyad": - /url: https://www.dyad.sh/ -- img -- text: Edit with AI h1 src/pages/Index.tsx \ No newline at end of file +- text: h1 src/pages/Index.tsx \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-1.txt b/e2e-tests/snapshots/select_component.spec.ts_select-component-1.txt index 2c3c7f0..be24fc2 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-1.txt +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-1.txt @@ -104,7 +104,9 @@ message: This is a simple basic response role: user message: [dump] make it smaller -Selected component: h1 (file: src/pages/Index.tsx) +Selected components: + +Component: h1 (file: src/pages/Index.tsx) Snippet: ``` diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-2.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-component-2.aria.yml index 724e29c..bdb7727 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-2.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-2.aria.yml @@ -1,3 +1,5 @@ +- text: Selected Components (1) +- button "Clear all" - img - text: h1 src/pages/Index.tsx:9 - button "Deselect component": diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.aria.yml index 9f7113e..7fc7554 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.aria.yml @@ -1 +1,8 @@ -- text: Edit with AI h1 src/app/page.tsx \ No newline at end of file +- main: + - heading "Blank page" [level=1] +- link "Made with Dyad": + - /url: https://www.dyad.sh/ +- text: h1 src/app/page.tsx +- alert +- button "Open Next.js Dev Tools": + - img \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.txt b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.txt index 8f16d31..9e6300f 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.txt +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-1.txt @@ -151,7 +151,9 @@ message: This is a simple basic response role: user message: [dump] make it smaller -Selected component: h1 (file: src/app/page.tsx) +Selected components: + +Component: h1 (file: src/app/page.tsx) Snippet: ``` diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-2.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-2.aria.yml index aaa0b3a..4f2e4e7 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-2.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-2.aria.yml @@ -1,3 +1,5 @@ +- text: Selected Components (1) +- button "Clear all" - img - text: h1 src/app/page.tsx:7 - button "Deselect component": diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-3.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-3.aria.yml index 176906a..20aee84 100644 --- a/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-3.aria.yml +++ b/e2e-tests/snapshots/select_component.spec.ts_select-component-next-js-3.aria.yml @@ -2,3 +2,6 @@ - heading "Blank page" [level=1] - link "Made with Dyad": - /url: https://www.dyad.sh/ +- alert +- button "Open Next.js Dev Tools": + - img \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.aria.yml b/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.aria.yml new file mode 100644 index 0000000..62a62f4 --- /dev/null +++ b/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.aria.yml @@ -0,0 +1,8 @@ +- region "Notifications (F8)": + - list +- region "Notifications alt+T" +- heading "Welcome to Your Blank App" [level=1] +- paragraph: Start building your amazing project here! +- link "Made with Dyad": + - /url: https://www.dyad.sh/ +- text: a src/components/made-with-dyad.tsx \ No newline at end of file diff --git a/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.txt b/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.txt new file mode 100644 index 0000000..d78a9e1 --- /dev/null +++ b/e2e-tests/snapshots/select_component.spec.ts_select-multiple-components-1.txt @@ -0,0 +1,27 @@ +=== +role: user +message: [dump] make both smaller + +Selected components: + +1. Component: h1 (file: src/pages/Index.tsx) + +Snippet: +``` +