mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-30 05:02:58 +00:00
Keep manual workspace order separate from automatic sorting so surviving pre-beta arrangements and subsequent drags remain available across mode changes. Created stays the default; data already discarded by the beta cannot be reconstructed.
88 lines
3.6 KiB
TypeScript
88 lines
3.6 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import { buildHostWorkspaceRoute } from "../../src/utils/host-routes";
|
|
import { randomUUID } from "node:crypto";
|
|
import { metroTest as test, expect } from "../support/fixtures";
|
|
import { startIsolatedHostDaemon } from "../support/helpers/isolated-host-daemon";
|
|
import { seedWorkspace } from "../support/helpers/seed-client";
|
|
import { buildSeededHost } from "../support/helpers/daemon-registry";
|
|
import { selectSidebarStatusGrouping } from "../support/helpers/sidebar";
|
|
|
|
test("published old daemon keeps workspace navigation and gates sorting", async ({ page }) => {
|
|
test.setTimeout(180_000);
|
|
const daemon = await startIsolatedHostDaemon(`srv_sort_old_${randomUUID()}`, {
|
|
publishedVersion: "0.8.0",
|
|
});
|
|
try {
|
|
const project = await seedWorkspace({ repoPrefix: "sidebar-old-host-", port: daemon.port });
|
|
try {
|
|
const second = await project.client.createWorkspace({
|
|
source: { kind: "directory", path: project.repoPath, projectId: project.projectId },
|
|
title: "Second old workspace",
|
|
});
|
|
expect(second.workspace).toBeTruthy();
|
|
await openPublishedHost(page, daemon, project.workspaceId);
|
|
await openWorkspace(page, daemon.serverId, second.workspace!.id);
|
|
await expectSortingRequiresHostUpdate(page);
|
|
await selectSidebarStatusGrouping(page);
|
|
await expectStatusHasNoSorting(page);
|
|
} finally {
|
|
await project.cleanup();
|
|
}
|
|
} finally {
|
|
await daemon.close();
|
|
}
|
|
});
|
|
|
|
async function openPublishedHost(
|
|
page: Page,
|
|
daemon: { serverId: string; port: number },
|
|
workspaceId: string,
|
|
) {
|
|
const host = buildSeededHost({
|
|
serverId: daemon.serverId,
|
|
endpoint: `127.0.0.1:${daemon.port}`,
|
|
nowIso: new Date().toISOString(),
|
|
});
|
|
await page.addInitScript((seededHost) => {
|
|
localStorage.setItem("@paseo:e2e", "1");
|
|
localStorage.setItem("@paseo:daemon-registry", JSON.stringify([seededHost]));
|
|
localStorage.setItem(
|
|
"sidebar-view",
|
|
JSON.stringify({ version: 8, state: { groupMode: "project", workspaceSort: "lastPrompt" } }),
|
|
);
|
|
}, host);
|
|
await page.goto(buildHostWorkspaceRoute(daemon.serverId, workspaceId));
|
|
}
|
|
|
|
async function openWorkspace(page: Page, serverId: string, workspaceId: string) {
|
|
const row = page.getByTestId(`sidebar-workspace-row-${serverId}:${workspaceId}`);
|
|
await expect(row).toBeVisible();
|
|
await row.click();
|
|
await expect(page).toHaveURL(new RegExp(workspaceId));
|
|
}
|
|
|
|
async function expectSortingRequiresHostUpdate(page: Page) {
|
|
await page.getByLabel("Display preferences", { exact: true }).click();
|
|
await page.getByRole("menuitem", { name: /^Sort/ }).click();
|
|
await expect(
|
|
page.getByRole("menuitem", { name: "Update hosts to sort workspaces" }),
|
|
).toBeVisible();
|
|
await expect(
|
|
page.getByRole("menuitem", { name: "Update hosts to sort workspaces" }),
|
|
).toBeDisabled();
|
|
await expect(page.getByRole("menuitem", { name: "Created", exact: true })).toHaveCount(0);
|
|
await expect(page.getByRole("menuitem", { name: "Last prompt", exact: true })).toHaveCount(0);
|
|
await page.getByRole("menuitem", { name: "Manual", exact: true }).click();
|
|
await page.getByLabel("Display preferences", { exact: true }).click();
|
|
await expect(page.getByRole("menuitem", { name: /^Sort/ })).toContainText("Manual");
|
|
await page.keyboard.press("Escape");
|
|
}
|
|
|
|
async function expectStatusHasNoSorting(page: Page) {
|
|
await page.getByLabel("Display preferences", { exact: true }).click();
|
|
await expect(page.getByRole("menuitem", { name: "Update hosts to sort workspaces" })).toHaveCount(
|
|
0,
|
|
);
|
|
await expect(page.getByRole("menuitem", { name: /^Sort/ })).toHaveCount(0);
|
|
}
|