multica/e2e/settings.spec.ts
Jiayuan Zhang 1ba0fb071a fix(web): fix stale state bugs, add real-time updates, and build verification pipeline
- Fix kanban board columns not adapting to available width (w-64 → flex-1)
- Fix workspace name not updating in sidebar after save in settings
- Fix comments leaking across issues when navigating between issue details
- Fix duplicate issue appearing on create (race between callback and WebSocket)
- Add real-time WebSocket listeners for agents and inbox pages
- Add `make check` one-click verification pipeline (typecheck + tests + E2E)
- Add E2E test fixtures for self-contained test data setup/teardown
- Add settings E2E test and updateWorkspace unit test
- Make `make start/setup` reuse existing PostgreSQL if already running
- Update CLAUDE.md with AI agent verification loop and E2E test patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 12:44:49 +08:00

42 lines
1.4 KiB
TypeScript

import { test, expect } from "@playwright/test";
import { loginAsDefault, openWorkspaceMenu } from "./helpers";
test.describe("Settings", () => {
test("updating workspace name reflects in sidebar immediately", async ({
page,
}) => {
await loginAsDefault(page);
// Read the current workspace name from the sidebar
const sidebarName = page.locator("aside button").first();
const originalName = await sidebarName.innerText();
// Navigate to settings
await openWorkspaceMenu(page);
await page.locator("text=Settings").click();
await page.waitForURL("**/settings");
// Change workspace name
const nameInput = page
.locator('input[type="text"]')
.first();
await nameInput.clear();
const newName = "Renamed WS " + Date.now();
await nameInput.fill(newName);
// Save
await page.locator("button", { hasText: "Save" }).click();
// Wait for "Saved!" confirmation
await expect(page.locator("text=Saved!")).toBeVisible({ timeout: 5000 });
// Sidebar should reflect the new name WITHOUT page refresh
await expect(sidebarName).toContainText(newName);
// Restore original name so other tests aren't affected
await nameInput.clear();
await nameInput.fill(originalName.trim());
await page.locator("button", { hasText: "Save" }).click();
await expect(page.locator("text=Saved!")).toBeVisible({ timeout: 5000 });
});
});