85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import { test } from "./helpers/test_helper";
|
|
import { expect } from "@playwright/test";
|
|
import fs from "fs";
|
|
import path from "path";
|
|
|
|
test("edit code", async ({ po }) => {
|
|
const editedFilePath = path.join("src", "components", "made-with-dyad.tsx");
|
|
await po.sendPrompt("foo");
|
|
const appPath = await po.getCurrentAppPath();
|
|
|
|
await po.clickTogglePreviewPanel();
|
|
|
|
await po.selectPreviewMode("code");
|
|
await po.page.getByText("made-with-dyad.tsx").click();
|
|
await po.page
|
|
.getByRole("code")
|
|
.locator("div")
|
|
.filter({ hasText: "export const" })
|
|
.nth(4)
|
|
.click();
|
|
await po.page
|
|
.getByRole("textbox", { name: "Editor content" })
|
|
.fill("export const MadeWithDyad = ;");
|
|
|
|
// Save the file
|
|
await po.page.getByTestId("save-file-button").click();
|
|
|
|
// Expect toast to be visible
|
|
await expect(po.page.getByText("File saved")).toBeVisible();
|
|
|
|
// We are NOT snapshotting the app files because the Monaco UI edit
|
|
// is not deterministic.
|
|
const editedFile = fs.readFileSync(
|
|
path.join(appPath, editedFilePath),
|
|
"utf8",
|
|
);
|
|
expect(editedFile).toContain("export const MadeWithDyad = ;");
|
|
});
|
|
|
|
test("edit code edits the right file", async ({ po }) => {
|
|
const editedFilePath = path.join("src", "components", "made-with-dyad.tsx");
|
|
const robotsFilePath = path.join("public", "robots.txt");
|
|
await po.sendPrompt("foo");
|
|
const appPath = await po.getCurrentAppPath();
|
|
const originalRobotsFile = fs.readFileSync(
|
|
path.join(appPath, robotsFilePath),
|
|
"utf8",
|
|
);
|
|
|
|
await po.clickTogglePreviewPanel();
|
|
|
|
await po.selectPreviewMode("code");
|
|
await po.page.getByText("made-with-dyad.tsx").click();
|
|
await po.page
|
|
.getByRole("code")
|
|
.locator("div")
|
|
.filter({ hasText: "export const" })
|
|
.nth(4)
|
|
.click();
|
|
await po.page
|
|
.getByRole("textbox", { name: "Editor content" })
|
|
.fill("export const MadeWithDyad = ;");
|
|
|
|
// Save the file by switching files
|
|
await po.page.getByText("robots.txt").click();
|
|
|
|
// Expect toast to be visible
|
|
await expect(po.page.getByText("File saved")).toBeVisible();
|
|
|
|
// We are NOT snapshotting the app files because the Monaco UI edit
|
|
// is not deterministic.
|
|
const editedFile = fs.readFileSync(
|
|
path.join(appPath, editedFilePath),
|
|
"utf8",
|
|
);
|
|
expect(editedFile).toContain("export const MadeWithDyad = ;");
|
|
|
|
// Make sure the robots.txt file is not edited
|
|
const editedRobotsFile = fs.readFileSync(
|
|
path.join(appPath, robotsFilePath),
|
|
"utf8",
|
|
);
|
|
expect(editedRobotsFile).toEqual(originalRobotsFile);
|
|
});
|