fix(pi): validate user-entry conversation forks
This commit is contained in:
@@ -152,6 +152,22 @@ async function installCodingFirstChatHost(
|
||||
model: { model: configuredModel, modelResolution: 'resolved' },
|
||||
},
|
||||
nodes: featureComplete ? [
|
||||
{
|
||||
kind: 'message',
|
||||
id: 'message-user-e2e',
|
||||
sourceEntryId: 'entry-user-e2e',
|
||||
role: 'user',
|
||||
status: 'complete',
|
||||
blocks: [{ kind: 'text', id: 'message-user-e2e:content:0', text: 'Durable user fork source', status: 'complete' }],
|
||||
},
|
||||
{
|
||||
kind: 'message',
|
||||
id: 'message-assistant-e2e',
|
||||
sourceEntryId: 'entry-assistant-e2e',
|
||||
role: 'assistant',
|
||||
status: 'complete',
|
||||
blocks: [{ kind: 'text', id: 'message-assistant-e2e:content:0', text: 'Durable assistant response', status: 'complete' }],
|
||||
},
|
||||
{
|
||||
kind: 'subagent',
|
||||
id: 'subagent-e2e',
|
||||
@@ -567,6 +583,16 @@ test('PI feature UI isolates Conversations and exposes queue, interaction, model
|
||||
|
||||
const builderConversations = page.getByRole('group', { name: 'Builder 的对话' });
|
||||
await expect(builderConversations).toBeVisible();
|
||||
const forkActions = page.getByRole('button', { name: '从这里创建新对话分支' });
|
||||
await expect(forkActions).toHaveCount(1);
|
||||
await forkActions.click();
|
||||
await expect(page.getByTestId('coding-conversation-header')).toContainText('Feature UI branch');
|
||||
await expect(builderConversations.getByRole('button', { name: 'Feature UI branch' })).toBeVisible();
|
||||
await expect(page.getByText('本地编程运行时暂时不可用')).toHaveCount(0);
|
||||
await builderConversations.getByRole('button', { name: /^新对话/ }).click();
|
||||
await expect(page.getByText('Durable user fork source')).toBeVisible();
|
||||
await expect(page.getByText('Durable assistant response')).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: '从这里创建新对话分支' })).toHaveCount(1);
|
||||
await builderConversations.getByRole('button', { name: 'Second Conversation' }).click();
|
||||
await expect(page.getByTestId('coding-conversation-header')).toContainText('Second Conversation');
|
||||
await expect(page.getByRole('combobox', { name: '当前对话模型' })).toHaveValue(
|
||||
@@ -589,6 +615,11 @@ test('PI feature UI isolates Conversations and exposes queue, interaction, model
|
||||
expect(state.captured.some((request) => request.path.endsWith('/changes'))).toBe(true);
|
||||
expect(state.captured.some((request) => request.path.endsWith('/recover') && request.method === 'POST')).toBe(true);
|
||||
expect(state.captured.some((request) => request.path.endsWith('/compact') && request.method === 'POST')).toBe(true);
|
||||
expect(state.captured.some((request) => (
|
||||
request.path === '/api/coding/conversations/conversation-pi-first-chat/fork'
|
||||
&& request.method === 'POST'
|
||||
&& request.body?.sourceEntryId === 'entry-user-e2e'
|
||||
))).toBe(true);
|
||||
expect(state.captured.some((request) => request.path.includes('legacy-conversation-notice'))).toBe(true);
|
||||
expect(state.captured.every((request) => !request.path.includes('/api/opencode/share'))).toBe(true);
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user