| import { ChatPage } from '../pages/chat'; | |
| import { test, expect } from '../fixtures'; | |
| 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!'); | |
| }); | |
| test('Call weather tool', async () => { | |
| await chatPage.sendUserMessage("What's the weather in sf?"); | |
| await chatPage.isGenerationComplete(); | |
| const assistantMessage = await chatPage.getRecentAssistantMessage(); | |
| expect(assistantMessage.content).toBe( | |
| 'The current temperature in San Francisco is 17°C.', | |
| ); | |
| }); | |
| test('Upvote message', async () => { | |
| await chatPage.sendUserMessage('Why is the sky blue?'); | |
| await chatPage.isGenerationComplete(); | |
| const assistantMessage = await chatPage.getRecentAssistantMessage(); | |
| await assistantMessage.upvote(); | |
| await chatPage.isVoteComplete(); | |
| }); | |
| test('Downvote message', async () => { | |
| await chatPage.sendUserMessage('Why is the sky blue?'); | |
| await chatPage.isGenerationComplete(); | |
| const assistantMessage = await chatPage.getRecentAssistantMessage(); | |
| await assistantMessage.downvote(); | |
| await chatPage.isVoteComplete(); | |
| }); | |
| test('Update vote', async () => { | |
| await chatPage.sendUserMessage('Why is the sky blue?'); | |
| await chatPage.isGenerationComplete(); | |
| const assistantMessage = await chatPage.getRecentAssistantMessage(); | |
| await assistantMessage.upvote(); | |
| await chatPage.isVoteComplete(); | |
| await assistantMessage.downvote(); | |
| await chatPage.isVoteComplete(); | |
| }); | |
| test('Create message from url query', async ({ page }) => { | |
| await page.goto('/?query=Why is the sky blue?'); | |
| await chatPage.isGenerationComplete(); | |
| const userMessage = await chatPage.getRecentUserMessage(); | |
| expect(userMessage.content).toBe('Why is the sky blue?'); | |
| const assistantMessage = await chatPage.getRecentAssistantMessage(); | |
| expect(assistantMessage.content).toContain("It's just blue duh!"); | |
| }); | |
| test('auto-scrolls to bottom after submitting new messages', async () => { | |
| test.fixme(); | |
| await chatPage.sendMultipleMessages(5, (i) => `filling message #${i}`); | |
| await chatPage.waitForScrollToBottom(); | |
| }); | |
| test('scroll button appears when user scrolls up, hides on click', async () => { | |
| test.fixme(); | |
| await chatPage.sendMultipleMessages(5, (i) => `filling message #${i}`); | |
| await expect(chatPage.scrollToBottomButton).not.toBeVisible(); | |
| await chatPage.scrollToTop(); | |
| await expect(chatPage.scrollToBottomButton).toBeVisible(); | |
| await chatPage.scrollToBottomButton.click(); | |
| await chatPage.waitForScrollToBottom(); | |
| await expect(chatPage.scrollToBottomButton).not.toBeVisible(); | |
| }); | |
| }); | |