Files
hermes-web/tests/e2e/chat-clarify.spec.ts
T
toor f935385356
Build / build (push) Canceled after 0s
Playwright / e2e (push) Canceled after 0s
fix(chat): support Hermes clarify batches
2026-11-09 09:14:42 +08:00

36 lines
2.5 KiB
TypeScript

import { expect, test } from '@playwright/test'
import { authenticate, mockChatSocket, mockHermesApi, TEST_ACCESS_KEY } from './fixtures'
test('answers sequential clarify questions with custom and multi-select responses', async ({ page }) => {
await authenticate(page, TEST_ACCESS_KEY, 'research')
await mockHermesApi(page)
await mockChatSocket(page)
await page.goto('/#/hermes/chat')
await page.locator('textarea.input-textarea').fill('Ask me questions')
await page.getByRole('button', { name: 'Send', exact: true }).click()
const sessionId = await page.waitForFunction(() => (window as any).__PW_CHAT_SOCKET__?.emitted.find((item: any) => item.event === 'run')?.payload.session_id).then(handle => handle.jsonValue())
await page.evaluate((sid) => {
const socket = (window as any).__PW_CHAT_SOCKET__.latest
socket.__trigger('clarify.requested', { event: 'clarify.requested', session_id: sid, clarify_id: 'q1', question: 'Which day?', choices: ['Today', 'Yesterday'], multi_select: false })
}, sessionId)
await expect(page.getByText('Which day?')).toBeVisible()
await page.getByPlaceholder('Type your answer...').fill('Another day')
await page.getByRole('button', { name: 'Reply', exact: true }).click()
await expect.poll(() => page.evaluate(() => (window as any).__PW_CHAT_SOCKET__.emitted.filter((e: any) => e.event === 'clarify.respond'))).toContainEqual({
event: 'clarify.respond', payload: { session_id: sessionId, clarify_id: 'q1', response: 'Another day' },
})
await page.evaluate((sid) => {
const socket = (window as any).__PW_CHAT_SOCKET__.latest
socket.__trigger('clarify.requested', { event: 'clarify.requested', session_id: sid, clarify_id: 'q2', question: 'Which topics?', choices: ['News', 'Science'], multi_select: true })
socket.__trigger('clarify.resolved', { event: 'clarify.resolved', session_id: sid, clarify_id: 'q1', resolved: true })
}, sessionId)
await expect(page.getByText('Which topics?')).toBeVisible()
await page.getByText('News', { exact: true }).click()
await page.getByText('Science', { exact: true }).click()
await page.getByPlaceholder('Type your answer...').fill('Other')
await page.getByRole('button', { name: 'Reply', exact: true }).click()
await expect.poll(() => page.evaluate(() => (window as any).__PW_CHAT_SOCKET__.emitted.filter((e: any) => e.event === 'clarify.respond'))).toContainEqual({
event: 'clarify.respond', payload: { session_id: sessionId, clarify_id: 'q2', response: '["News","Science","Other"]' },
})
})