Files
kandev/apps/web/e2e/tests/layout/compact-desktop-responsive.spec.ts
T
José Almeida b4ce4d6eef refactor(web): improve compact desktop layouts (#937)
* refactor(web): improve compact desktop layouts

* fix(web): address compact desktop review feedback

* fix(web): address responsive review followups

* fix(web): preserve compact sidebar restore sizing

* fix(web): harden compact preset sidebar test

* refactor(web): extract dockview layout hooks
2026-05-18 23:08:14 +01:00

81 lines
3.0 KiB
TypeScript

import { test, expect } from "../../fixtures/test-base";
import { KanbanPage } from "../../pages/kanban-page";
import { SessionPage } from "../../pages/session-page";
const COMPACT_DESKTOP_VIEWPORT = { width: 900, height: 800 };
test.describe("compact desktop responsive layout", () => {
test("task page keeps the Dockview workbench at half-screen width", async ({
testPage,
apiClient,
seedData,
}) => {
await testPage.setViewportSize(COMPACT_DESKTOP_VIEWPORT);
const task = await apiClient.createTaskWithAgent(
seedData.workspaceId,
"Compact Desktop Task",
seedData.agentProfileId,
{
description: "/e2e:simple-message",
workflow_id: seedData.workflowId,
workflow_step_id: seedData.startStepId,
repository_ids: [seedData.repositoryId],
},
);
await testPage.goto(`/t/${task.id}`);
const session = new SessionPage(testPage);
await session.waitForLoad();
await expect(testPage.getByTestId("dockview-task-layout")).toBeVisible();
await expect(testPage.getByTestId("tablet-task-layout")).toHaveCount(0);
await expect(session.sidebar).toBeVisible();
await expect(session.activeChat()).toBeVisible();
await expect(testPage.getByTestId("dockview-add-panel-btn")).toBeVisible();
const tabs = testPage.locator(".dv-tab");
await expect(
tabs.filter({ has: testPage.locator('[data-testid^="session-tab-"]') }),
).toBeVisible();
await expect(tabs.filter({ hasText: "Files" })).toBeVisible();
await expect(tabs.filter({ hasText: "Changes" })).toBeVisible();
await expect(tabs.filter({ hasText: "Terminal" })).toBeVisible();
});
test("kanban keeps desktop controls and usable columns at half-screen width", async ({
testPage,
apiClient,
seedData,
}) => {
await testPage.setViewportSize(COMPACT_DESKTOP_VIEWPORT);
for (const step of seedData.steps) {
await apiClient.createTask(seedData.workspaceId, `Compact ${step.title}`, {
workflow_id: seedData.workflowId,
workflow_step_id: step.id,
});
}
const kanban = new KanbanPage(testPage);
await kanban.goto();
const desktopLayout = testPage.getByTestId("desktop-kanban-layout");
await expect(desktopLayout).toHaveCount(1);
await expect(desktopLayout).toBeVisible();
await expect(desktopLayout).toHaveAttribute("style", /minmax\(260px, 1fr\)/);
await expect(testPage.getByTestId("tablet-kanban-layout")).toHaveCount(0);
await expect(testPage.getByTestId("mobile-kanban-layout")).toHaveCount(0);
await expect(testPage.getByRole("button", { name: "Open menu" })).toHaveCount(0);
await expect(testPage.getByPlaceholder("Search tasks...")).toBeVisible();
await expect(kanban.createTaskButton).toBeVisible();
await expect(testPage.getByRole("button", { name: "Quick Chat" })).toBeVisible();
await expect(kanban.viewTogglePipeline).toBeVisible();
for (const step of seedData.steps) {
await expect(kanban.columnByStepId(step.id)).toBeAttached();
}
});
});