收口 Makelore 客户端变更
This commit is contained in:
@@ -329,4 +329,95 @@ test.describe('OpenCode slash commands', () => {
|
||||
model: 'niancode-user-models/qwen3.7-plus',
|
||||
});
|
||||
});
|
||||
|
||||
test('keeps the project and conversation rails at the minimum width without covering the chat canvas', async ({
|
||||
electronApp,
|
||||
page,
|
||||
}) => {
|
||||
await completeSetup(page);
|
||||
await installSlashCommandHost(electronApp);
|
||||
await page.reload();
|
||||
await page.setViewportSize({ width: 1280, height: 800 });
|
||||
await page.getByTestId('sidebar-module-switcher-trigger').click();
|
||||
await page.getByTestId('sidebar-module-programming').click();
|
||||
await expect(page).toHaveURL(/\/opencode-chat$/);
|
||||
await expect(page.getByTestId('opencode-message-composer')).toBeVisible();
|
||||
|
||||
const createPartnerButton = page.getByRole('button', { name: '创建伙伴' });
|
||||
await expect(createPartnerButton).toHaveClass(/text-brand/);
|
||||
await expect(createPartnerButton).toHaveAttribute('aria-expanded', 'false');
|
||||
await createPartnerButton.click();
|
||||
await expect(createPartnerButton).toHaveClass(/text-primary-foreground/);
|
||||
await expect(createPartnerButton).toHaveAttribute('aria-expanded', 'true');
|
||||
const createPartnerDialog = page.getByRole('dialog', { name: '创建项目伙伴' });
|
||||
await expect(createPartnerDialog).toHaveCSS('z-index', '110');
|
||||
await createPartnerDialog.getByLabel(/伙伴名称/).fill('E2E层级检查');
|
||||
await page.getByRole('button', { name: '取消' }).click();
|
||||
await expect(createPartnerButton).toHaveClass(/text-brand/);
|
||||
|
||||
await expect(page.getByRole('heading', { name: '我的项目空间' })).toHaveCount(0);
|
||||
await page.getByTestId('agent-browser-panel-open').click();
|
||||
await expect(page.getByTestId('agent-browser-panel')).toBeVisible();
|
||||
const diagnostics = page.getByTestId('agent-browser-diagnostics');
|
||||
await expect(diagnostics).toHaveAttribute('data-state', 'closed');
|
||||
await page.getByRole('tab', { name: /Console/ }).click();
|
||||
await expect(diagnostics).toHaveAttribute('data-state', 'open');
|
||||
await expect(diagnostics).toHaveCSS('height', '260px');
|
||||
await page.getByRole('button', { name: '收起调试面板' }).click();
|
||||
await expect(diagnostics).toHaveAttribute('data-state', 'closed');
|
||||
|
||||
const rect = async (testId: string) => page.getByTestId(testId).evaluate((element) => {
|
||||
const box = element.getBoundingClientRect();
|
||||
return { top: box.top, left: box.left, right: box.right, width: box.width };
|
||||
});
|
||||
const [layout, project, conversations, conversationHeader, conversationContext, chat, browser] = await Promise.all([
|
||||
rect('opencode-chat-layout'),
|
||||
rect('sidebar'),
|
||||
rect('agent-conversation-sidebar'),
|
||||
rect('agent-conversation-sidebar-header'),
|
||||
rect('agent-conversation-dialog-context'),
|
||||
rect('opencode-chat-canvas'),
|
||||
rect('agent-browser-panel'),
|
||||
]);
|
||||
const isHeaderInsideConversationSidebar = async () => page.getByTestId('agent-conversation-sidebar').evaluate((sidebar) => sidebar.contains(document.querySelector('[data-testid="agent-conversation-sidebar-header"]')));
|
||||
|
||||
expect(project.width).toBeGreaterThanOrEqual(255);
|
||||
expect(project.width).toBeLessThan(257);
|
||||
expect(conversations.width).toBeGreaterThanOrEqual(255);
|
||||
expect(conversations.width).toBeLessThan(257);
|
||||
expect(Math.abs(conversations.top)).toBeLessThan(2);
|
||||
expect(Math.abs(conversationHeader.top)).toBeLessThan(2);
|
||||
expect(Math.abs(conversationHeader.left - conversations.left)).toBeLessThan(2);
|
||||
expect(Math.abs(conversationHeader.width - conversations.width)).toBeLessThan(2);
|
||||
expect(Math.abs(conversationContext.top)).toBeLessThan(2);
|
||||
expect(Math.abs(conversationContext.left - chat.left)).toBeLessThan(2);
|
||||
expect(await isHeaderInsideConversationSidebar()).toBe(false);
|
||||
expect(Math.abs(conversations.left - project.right)).toBeLessThan(2);
|
||||
expect(Math.abs(chat.left - conversations.right)).toBeLessThan(2);
|
||||
expect(Math.abs(browser.right - layout.right)).toBeLessThan(2);
|
||||
expect(browser.left).toBeGreaterThanOrEqual(chat.right - 1);
|
||||
|
||||
const readRailAlignment = async () => {
|
||||
const [collapsedProject, collapsedConversations] = await Promise.all([
|
||||
rect('sidebar'),
|
||||
rect('agent-conversation-sidebar'),
|
||||
]);
|
||||
return {
|
||||
projectWidth: collapsedProject.width,
|
||||
conversationLeft: collapsedConversations.left,
|
||||
projectRight: collapsedProject.right,
|
||||
alignmentDelta: Math.abs(collapsedConversations.left - collapsedProject.right),
|
||||
};
|
||||
};
|
||||
|
||||
await page.getByRole('button', { name: '折叠侧栏' }).click();
|
||||
await expect.poll(async () => (await readRailAlignment()).projectWidth).toBeLessThan(1);
|
||||
await expect.poll(async () => (await readRailAlignment()).conversationLeft).toBeLessThan(2);
|
||||
await expect.poll(isHeaderInsideConversationSidebar).toBe(false);
|
||||
|
||||
await page.getByRole('button', { name: '展开侧栏' }).click();
|
||||
await expect.poll(async () => (await readRailAlignment()).alignmentDelta).toBeLessThan(2);
|
||||
await expect.poll(async () => (await readRailAlignment()).projectWidth).toBeGreaterThan(255);
|
||||
await expect.poll(isHeaderInsideConversationSidebar).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user