49 lines
2.6 KiB
TypeScript
49 lines
2.6 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
test("Mail synthetic parent labels select without opening nonexistent folders or changing expansion", async ({ page }) => {
|
|
const errors: string[] = [];
|
|
const providerFolders: string[] = [];
|
|
const writes: string[] = [];
|
|
page.on("pageerror", (error) => errors.push(error.message));
|
|
await page.route(url => url.pathname.startsWith("/api/"), async route => {
|
|
const request = route.request();
|
|
const url = new URL(request.url());
|
|
if (request.method() !== "GET") writes.push(url.pathname);
|
|
let body: unknown = {};
|
|
if (url.pathname === "/api/v1/mail/profiles") body = { profiles: [{
|
|
id: "tree-profile", name: "Fixture mailbox", is_active: true, scope_type: "tenant",
|
|
imap: { enabled: true, host: "imap.example.test", port: 993, security: "ssl", folder_mappings: { inbox: "INBOX" } }
|
|
}] };
|
|
else if (url.pathname.endsWith("/mailbox/bootstrap")) body = {
|
|
folder: "INBOX", folders: { ok: true, folders: [{ name: "INBOX", flags: [] }, { name: "Archive/2026", flags: [] }] },
|
|
messages: { ok: true, folder: "INBOX", messages: [], total_count: 0 }
|
|
};
|
|
else if (url.pathname.endsWith("/mailbox/messages")) {
|
|
providerFolders.push(url.searchParams.get("folder") ?? "");
|
|
body = { ok: true, folder: url.searchParams.get("folder"), messages: [], total_count: 0 };
|
|
}
|
|
return route.fulfill({ json: body });
|
|
});
|
|
await page.goto("/?mail-folder-explorer&language=en&theme=light");
|
|
const archive = page.locator('.explorer-tree-node').filter({ hasText: /^Archive$/ });
|
|
const archiveRow = page.locator('.explorer-tree-node-wrap').filter({ has: archive });
|
|
const toggle = archiveRow.locator(':scope > .explorer-tree-toggle');
|
|
await expect(archive).toBeEnabled();
|
|
await expect(toggle).toHaveAttribute("aria-expanded", "false");
|
|
const initialReads = providerFolders.length;
|
|
await archive.click();
|
|
await expect(archive).toHaveAttribute("aria-current", "true");
|
|
await expect(toggle).toHaveAttribute("aria-expanded", "false");
|
|
await expect(page.getByText("This grouping contains mailbox folders.", { exact: false })).toBeVisible();
|
|
expect(providerFolders).toHaveLength(initialReads);
|
|
await toggle.click();
|
|
await expect(toggle).toHaveAttribute("aria-expanded", "true");
|
|
await archive.click();
|
|
await expect(toggle).toHaveAttribute("aria-expanded", "true");
|
|
await page.locator('.explorer-tree-node').filter({ hasText: /^2026$/ }).click();
|
|
await expect.poll(() => providerFolders.includes("Archive/2026")).toBe(true);
|
|
expect(providerFolders).not.toContain("Archive");
|
|
expect(errors).toEqual([]);
|
|
expect(writes).toEqual([]);
|
|
});
|