Add teacher microphone and per-question model selection
This commit is contained in:
1 parent
cd1ba41e21
commit
78cfde6734
20 files changed
+517
-37
No files matched your search
@@ -3,6 +3,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { TeacherChatPanel } from '@/pages/Chat/TeacherChatPanel';
|
||||
import type { TeacherDefinition, TeacherRequest, TeacherSend, TeacherTopic } from '../../shared/coding-teacher';
|
||||
const api = vi.hoisted(() => ({
|
||||
models: vi.fn(),
|
||||
catalog: vi.fn(),
|
||||
config: vi.fn(),
|
||||
preview: vi.fn(),
|
||||
@@ -70,6 +71,7 @@ beforeEach(() => {
|
||||
vi.resetAllMocks();
|
||||
localStorage.clear();
|
||||
streams = new Map();
|
||||
api.models.mockResolvedValue({ supported: true, models: [{ id: 'qwen' }, { id: 'other-model' }] });
|
||||
api.config.mockResolvedValue({ enabled: true, published_version: 1, revision: 1, definition });
|
||||
api.catalog.mockResolvedValue({ items: [{ teacher_id: 'one', version: 1, definition, is_default: true }] });
|
||||
api.conversation.mockResolvedValue({ topic: null, before: null });
|
||||
@@ -1008,3 +1010,19 @@ describe('merged cloud teacher classroom', () => {
|
||||
expect(screen.getByRole('button', { name: '智能体新话题' })).toBeEnabled();
|
||||
});
|
||||
});
|
||||
|
||||
it('selects a teacher model for the next send and retains it after remount', async () => {
|
||||
const view = render(<TeacherChatPanel projectId="p" sourceId="c" />);
|
||||
await ready();
|
||||
const trigger = screen.getByRole('button', { name: /老师模型/ });
|
||||
fireEvent.keyDown(trigger, { key: 'Enter' });
|
||||
fireEvent.click(await screen.findByRole('menuitemradio', { name: 'other-model' }));
|
||||
fireEvent.change(screen.getByRole('textbox', { name: '向智能体提问' }), { target: { value: '我的想法' } });
|
||||
api.send.mockResolvedValue(first);
|
||||
fireEvent.click(screen.getByRole('button', { name: '提问' }));
|
||||
await waitFor(() => expect(api.send).toHaveBeenCalledWith('p/agent-topics', 'first', expect.objectContaining({ modelId: 'other-model', text: '我的想法' })));
|
||||
view.unmount();
|
||||
render(<TeacherChatPanel projectId="p" sourceId="c" />);
|
||||
await screen.findByRole('button', { name: /老师模型:other-model/ });
|
||||
expect(screen.getByRole('button', { name: '语音输入' })).toBeInTheDocument();
|
||||
});
|
||||
Reference in new issue
Block a user