fix(agents): make editor settings peer tabs
This commit is contained in:
@@ -308,6 +308,51 @@ it('keeps unsent preview text when configuration changes and waits before switch
|
||||
});
|
||||
|
||||
|
||||
it('switches peer editor tabs while retaining the advanced category and unfinished form inputs', async () => {
|
||||
api.list.mockResolvedValue({ agents: [{ ...draft, configuration: { ...EMPTY_CLOUD_CONFIGURATION, model: 'test-model' } }], next_cursor: null });
|
||||
open();
|
||||
fireEvent.click(await screen.findByRole('button', { name: /写作搭档/ }));
|
||||
await waitFor(() => expect(screen.getByLabelText('消息')).toBeEnabled());
|
||||
const requirements = screen.getByRole('tab', { name: '我的要求', exact: true });
|
||||
const advanced = screen.getByRole('tab', { name: '高级设置', exact: true });
|
||||
expect(requirements).toHaveAttribute('aria-selected', 'true');
|
||||
expect(advanced).toHaveAttribute('aria-selected', 'false');
|
||||
expect(screen.getByRole('tabpanel', { name: '我的要求' })).toBeVisible();
|
||||
expect(screen.queryByRole('navigation', { name: '配置分类' })).not.toBeInTheDocument();
|
||||
const instructions = screen.getByLabelText('特别要求');
|
||||
const preview = screen.getByLabelText('消息');
|
||||
fireEvent.change(instructions, { target: { value: '没有保存的要求' } });
|
||||
fireEvent.change(preview, { target: { value: '没有发送的问题' } });
|
||||
|
||||
fireEvent.mouseDown(advanced, { button: 0, ctrlKey: false });
|
||||
expect(advanced).toHaveAttribute('aria-selected', 'true');
|
||||
expect(requirements).toHaveAttribute('aria-selected', 'false');
|
||||
expect(screen.getByRole('tabpanel', { name: '高级设置' })).toBeVisible();
|
||||
expect(instructions).not.toBeVisible();
|
||||
expect(screen.getByRole('button', { name: '能力', exact: true })).toHaveAttribute('aria-current', 'page');
|
||||
fireEvent.click(screen.getByRole('button', { name: '限制', exact: true }));
|
||||
const budgetInput = screen.getByLabelText('每日上限(词元点数)');
|
||||
await waitFor(() => expect(budgetInput).toBeEnabled());
|
||||
fireEvent.change(budgetInput, { target: { value: '12.50' } });
|
||||
fireEvent.mouseDown(advanced, { button: 0, ctrlKey: false });
|
||||
expect(screen.getByRole('button', { name: '限制', exact: true })).toHaveAttribute('aria-current', 'page');
|
||||
expect(budgetInput).toBeVisible();
|
||||
|
||||
fireEvent.mouseDown(requirements, { button: 0, ctrlKey: false });
|
||||
expect(screen.queryByRole('navigation', { name: '配置分类' })).not.toBeInTheDocument();
|
||||
expect(budgetInput).not.toBeVisible();
|
||||
expect(screen.getByLabelText('特别要求')).toBe(instructions);
|
||||
expect(instructions).toHaveValue('没有保存的要求');
|
||||
fireEvent.mouseDown(advanced, { button: 0, ctrlKey: false });
|
||||
expect(screen.getByRole('button', { name: '限制', exact: true })).toHaveAttribute('aria-current', 'page');
|
||||
expect(screen.getByLabelText('每日上限(词元点数)')).toBe(budgetInput);
|
||||
expect(budgetInput).toHaveValue(12.5);
|
||||
expect(screen.getByLabelText('消息')).toBe(preview);
|
||||
expect(preview).toHaveValue('没有发送的问题');
|
||||
expect(api.save).not.toHaveBeenCalled();
|
||||
expect(api.call.mock.calls.some(([operation]) => ['saveBudget', 'preview', 'submit'].includes(operation))).toBe(false);
|
||||
});
|
||||
|
||||
it('keeps preview text across mode switches and saves a budget independently of the draft', async () => {
|
||||
const configured = { ...draft, configuration: { ...EMPTY_CLOUD_CONFIGURATION, model: 'test-model' } };
|
||||
api.list.mockResolvedValue({ agents: [configured], next_cursor: null });
|
||||
@@ -322,13 +367,13 @@ it('keeps preview text across mode switches and saves a budget independently of
|
||||
fireEvent.click(screen.getByRole('button', { name: '编辑', exact: true }));
|
||||
expect(screen.getByLabelText('消息')).toHaveValue('待发送的问题');
|
||||
expect(screen.getByLabelText('特别要求')).toHaveValue('未保存的指令');
|
||||
fireEvent.click(screen.getByRole('button', { name: '高级设置' }));
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '高级设置' }), { button: 0, ctrlKey: false });
|
||||
fireEvent.click(screen.getByRole('button', { name: '限制', exact: true }));
|
||||
fireEvent.change(screen.getByLabelText('每日上限(词元点数)'), { target: { value: '12' } });
|
||||
fireEvent.click(screen.getByRole('button', { name: '保存费用上限' }));
|
||||
await waitFor(() => expect(api.call).toHaveBeenCalledWith('saveBudget', expect.objectContaining({ daily_limit_points: '12' })));
|
||||
expect(api.save).not.toHaveBeenCalled();
|
||||
fireEvent.click(screen.getByRole('button', { name: '我的要求', exact: true }));
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '我的要求', exact: true }), { button: 0, ctrlKey: false });
|
||||
expect(screen.getByLabelText('特别要求')).toHaveValue('未保存的指令');
|
||||
expect(screen.getByLabelText('消息')).toHaveValue('待发送的问题');
|
||||
});
|
||||
@@ -343,7 +388,7 @@ it('keeps an existing preview when the saved draft clears its model selection',
|
||||
await waitFor(() => expect(screen.getByLabelText('消息')).toBeEnabled());
|
||||
const prompt = screen.getByLabelText('消息');
|
||||
fireEvent.change(prompt, { target: { value: '还没有发送' } });
|
||||
fireEvent.click(screen.getByRole('button', { name: '高级设置' }));
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '高级设置' }), { button: 0, ctrlKey: false });
|
||||
fireEvent.click(screen.getByRole('button', { name: '能力', exact: true }));
|
||||
fireEvent.change(screen.getByLabelText('模型'), { target: { value: '' } });
|
||||
fireEvent.click(screen.getByRole('button', { name: '保存草稿' }));
|
||||
@@ -364,11 +409,14 @@ it('searches capabilities while retaining existing selections outside the result
|
||||
api.save.mockImplementation(async (_slug, input) => ({ ...configured, ...input, draft_revision: 2 }));
|
||||
open();
|
||||
fireEvent.click(await screen.findByRole('button', { name: /写作搭档/ }));
|
||||
fireEvent.click(screen.getByRole('button', { name: '高级设置' }));
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '高级设置' }), { button: 0, ctrlKey: false });
|
||||
fireEvent.click(screen.getByRole('button', { name: '能力', exact: true }));
|
||||
expect(await screen.findByRole('checkbox', { name: /missing-tool/ })).toBeChecked();
|
||||
fireEvent.click(screen.getByRole('button', { name: '选择工具', exact: true }));
|
||||
fireEvent.change(screen.getByLabelText('搜索工具'), { target: { value: '资料' } });
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '我的要求' }), { button: 0, ctrlKey: false });
|
||||
fireEvent.mouseDown(screen.getByRole('tab', { name: '高级设置' }), { button: 0, ctrlKey: false });
|
||||
expect(screen.getByLabelText('搜索工具')).toHaveValue('资料');
|
||||
expect(screen.queryByRole('checkbox', { name: '当前时间' })).not.toBeInTheDocument();
|
||||
fireEvent.click(screen.getByRole('checkbox', { name: /资料搜索/ }));
|
||||
fireEvent.click(screen.getByRole('button', { name: '完成选择' }));
|
||||
|
||||
Reference in New Issue
Block a user