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"]' }, }) })