0eaaa54e25
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
67 lines
2.4 KiB
JavaScript
67 lines
2.4 KiB
JavaScript
/**
|
|
* Narrow viewport (<1024px, below use-files-panel's isDocked breakpoint): the Files panel
|
|
* uses a bottom Sheet: open → drill into a directory → Markdown renders by default → Esc
|
|
* closes and unmounts.
|
|
* Upload uses a nested path (notes/demo.md): also covers the server's sandbox auto-creating
|
|
* a missing parent directory.
|
|
*/
|
|
import { test, expect } from "@playwright/test";
|
|
import { provisionAndLogin } from "./auth.mjs";
|
|
|
|
const BASE = process.env.BASE_URL;
|
|
const MOCK = process.env.MOCK_URL;
|
|
|
|
test.use({ viewport: { width: 412, height: 915 } });
|
|
|
|
test("mobile Files sheet: open → nested dir → md rendered preview → esc close", async ({
|
|
page,
|
|
}) => {
|
|
await provisionAndLogin(page.request, "sheetuser", "password123");
|
|
const projects = await (await page.request.get(`${BASE}/api/projects`)).json();
|
|
const projectId = projects.projects[0].projectId;
|
|
|
|
const put = await page.request.put(`${BASE}/api/projects/${projectId}/models`, {
|
|
data: {
|
|
defaultModel: { provider: "custom", modelId: "claude-4-8" },
|
|
models: [
|
|
{
|
|
provider: "custom",
|
|
modelId: "claude-4-8",
|
|
apiKey: "sk-mock",
|
|
baseUrl: MOCK,
|
|
contextWindow: 200000,
|
|
},
|
|
],
|
|
},
|
|
});
|
|
expect(put.ok(), "put models").toBeTruthy();
|
|
|
|
const sess = await (
|
|
await page.request.post(`${BASE}/api/projects/${projectId}/agents/default_agent/sessions`, {
|
|
data: { provider: "custom", modelId: "claude-4-8" },
|
|
})
|
|
).json();
|
|
const sessionId = sess.session.sessionId;
|
|
|
|
const md = Buffer.from("# Sheet Heading\n\nBody paragraph.").toString("base64");
|
|
const up = await page.request.put(
|
|
`${BASE}/api/sessions/${sessionId}/files/content?path=notes/demo.md`,
|
|
{ data: { dataBase64: md } },
|
|
);
|
|
expect(up.ok(), "upload nested md").toBeTruthy();
|
|
|
|
await page.goto(`${BASE}/chat/${sessionId}`);
|
|
await page.getByRole("button", { name: "打开工作区" }).click();
|
|
const sheet = page.getByRole("dialog");
|
|
await expect(sheet).toBeVisible();
|
|
|
|
// Drill into the directory → open the md → default rendered view (h1 shown, not source).
|
|
await sheet.getByText("notes").first().click();
|
|
await sheet.getByText("demo.md").first().click();
|
|
await expect(sheet.getByRole("heading", { name: "Sheet Heading" })).toBeVisible();
|
|
|
|
// Esc closes: unmounts entirely once the exit animation finishes.
|
|
await page.keyboard.press("Escape");
|
|
await expect(sheet).toBeHidden();
|
|
});
|