import { test, expect } from '@playwright/test'; import { ChatPage } from './pages/chat'; test.describe('chat activity', () => { let chatPage: ChatPage; test.beforeEach(async ({ page }) => { chatPage = new ChatPage(page); await chatPage.createNewChat(); }); test('send a user message and receive response', async () => { await chatPage.sendUserMessage('why is grass green?'); await chatPage.isGenerationComplete(); const assistantMessage = await chatPage.getRecentAssistantMessage(); expect(assistantMessage.content).toContain("it's just green duh!"); }); test('redirect to /chat/:id after submitting message', async () => { await chatPage.sendUserMessage('why is grass green?'); await chatPage.isGenerationComplete(); const assistantMessage = await chatPage.getRecentAssistantMessage(); expect(assistantMessage.content).toContain("it's just green duh!"); await chatPage.hasChatIdInUrl(); }); test('send a user message from suggestion', async () => { await chatPage.sendUserMessageFromSuggestion(); await chatPage.isGenerationComplete(); const assistantMessage = await chatPage.getRecentAssistantMessage(); expect(assistantMessage.content).toContain( 'with next.js you can ship fast!', ); }); test('toggle between send/stop button based on activity', async () => { await expect(chatPage.sendButton).toBeVisible(); await expect(chatPage.sendButton).toBeDisabled(); await chatPage.sendUserMessage('why is grass green?'); await expect(chatPage.sendButton).not.toBeVisible(); await expect(chatPage.stopButton).toBeVisible(); await chatPage.isGenerationComplete(); await expect(chatPage.stopButton).not.toBeVisible(); await expect(chatPage.sendButton).toBeVisible(); }); test('stop generation during submission', async () => { await chatPage.sendUserMessage('why is grass green?'); await expect(chatPage.stopButton).toBeVisible(); await chatPage.stopButton.click(); await expect(chatPage.sendButton).toBeVisible(); }); test('edit user message and resubmit', async () => { await chatPage.sendUserMessage('why is grass green?'); await chatPage.isGenerationComplete(); const assistantMessage = await chatPage.getRecentAssistantMessage(); expect(assistantMessage.content).toContain("it's just green duh!"); const userMessage = await chatPage.getRecentUserMessage(); await userMessage.edit('why is the sky blue?'); await chatPage.isGenerationComplete(); const updatedAssistantMessage = await chatPage.getRecentAssistantMessage(); expect(updatedAssistantMessage.content).toContain("it's just blue duh!"); }); test('hide suggested actions after sending message', async () => { await chatPage.isElementVisible('suggested-actions'); await chatPage.sendUserMessageFromSuggestion(); await chatPage.isElementNotVisible('suggested-actions'); }); test('upload file and send image attachment with message', async () => { await chatPage.addImageAttachment(); await chatPage.isElementVisible('attachments-preview'); await chatPage.isElementVisible('input-attachment-loader'); await chatPage.isElementNotVisible('input-attachment-loader'); await chatPage.sendUserMessage('who painted this?'); const userMessage = await chatPage.getRecentUserMessage(); expect(userMessage.attachments).toHaveLength(1); await chatPage.isGenerationComplete(); const assistantMessage = await chatPage.getRecentAssistantMessage(); expect(assistantMessage.content).toBe('this painting is by monet!'); }); });