36 lines
2.5 KiB
TypeScript
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"]' },
|
|
})
|
|
})
|