open-design/e2e/ui/entry-chrome-flows.test.ts
shangxinyu1 7107623ee2
test: expand entry and settings automation coverage (#811)
* test: harden new project panel metadata coverage

* test: add settings and connector sync coverage

* test: expand entry e2e coverage

* test: satisfy exact optional property types in entry connector flow

* test: keep entry Playwright coverage under e2e/ui

* test: tighten coverage docs and settings test cleanup

* test: drop e2e docs from the guarded package

* docs: move automation coverage docs out of e2e

* test: restore clipboard cleanup without delete

* test: match composio save dialog behavior

* test: avoid placeholder assertion after composio save

* test: expect closeModal on settings saves

* test: align settings save assertions with closeModal flags

* test: fix settings save mocks

* test: align composio replacement hint
2026-05-08 09:30:16 +08:00

81 lines
2.7 KiB
TypeScript

import { expect, test } from '@playwright/test';
const STORAGE_KEY = 'open-design:config';
test.beforeEach(async ({ page }) => {
await page.addInitScript((key) => {
window.localStorage.setItem(
key,
JSON.stringify({
mode: 'daemon',
apiKey: '',
baseUrl: 'https://api.anthropic.com',
model: 'claude-sonnet-4-5',
agentId: 'mock',
skillId: null,
designSystemId: null,
onboardingCompleted: true,
agentModels: {},
}),
);
}, STORAGE_KEY);
await page.route('**/api/agents', async (route) => {
await route.fulfill({
json: {
agents: [
{
id: 'mock',
name: 'Mock Agent',
bin: 'mock-agent',
available: true,
version: 'test',
models: [{ id: 'default', label: 'Default' }],
},
],
},
});
});
});
test('entry chrome settings menu toggles pet rail visibility', async ({ page }) => {
await page.goto('/');
await expect(page.getByTestId('new-project-panel')).toBeVisible();
await expect(page.locator('.app-chrome-header')).toBeVisible();
await expect(page.locator('.app-chrome-brand[aria-label="Open Design"]')).toBeVisible();
await expect(page.locator('.entry-brand')).toHaveCount(0);
const openSettings = page.getByRole('button', { name: /open settings/i });
await openSettings.click();
const settingsMenu = page.locator('.avatar-popover[role="menu"]');
await expect(settingsMenu).toBeVisible();
await settingsMenu.getByRole('button', { name: /hide pet picker/i }).click();
await expect(settingsMenu).toHaveCount(0);
await expect(page.locator('.pet-rail')).toHaveCount(0);
await openSettings.click();
await expect(page.getByRole('button', { name: /show pet picker/i })).toBeVisible();
await page.getByRole('button', { name: /show pet picker/i }).click();
await expect(page.locator('.pet-rail')).toBeVisible();
});
test('entry chrome avoids horizontal overflow on compact desktop width', async ({ page }) => {
await page.setViewportSize({ width: 820, height: 900 });
await page.goto('/');
await expect(page.getByTestId('new-project-panel')).toBeVisible();
await expect(page.locator('.app-chrome-header')).toBeVisible();
const overflow = await page.evaluate(() => {
const header = document.querySelector('.app-chrome-header');
if (!(header instanceof HTMLElement)) return null;
return Math.max(0, header.scrollWidth - header.clientWidth);
});
expect(overflow).not.toBeNull();
expect(overflow!).toBeLessThanOrEqual(2);
const pageOverflow = await page.evaluate(() =>
Math.max(0, document.documentElement.scrollWidth - document.documentElement.clientWidth),
);
expect(pageOverflow).toBeLessThanOrEqual(2);
});