mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-30 12:59:55 +00:00
140 lines
3.8 KiB
TypeScript
140 lines
3.8 KiB
TypeScript
import { Page, expect } from '@playwright/test'
|
|
|
|
import { comfyPageFixture as test } from '../fixtures/ComfyPage'
|
|
|
|
interface ChatHistoryEntry {
|
|
prompt: string
|
|
response: string
|
|
response_id: string
|
|
}
|
|
|
|
async function renderChatHistory(page: Page, history: ChatHistoryEntry[]) {
|
|
const nodeId = await page.evaluate(() => window['app'].graph.nodes[0]?.id)
|
|
// Simulate API sending display_component message
|
|
await page.evaluate(
|
|
({ nodeId, history }) => {
|
|
const event = new CustomEvent('display_component', {
|
|
detail: {
|
|
node_id: nodeId,
|
|
component: 'ChatHistoryWidget',
|
|
props: {
|
|
history: JSON.stringify(history)
|
|
}
|
|
}
|
|
})
|
|
window['app'].api.dispatchEvent(event)
|
|
return true
|
|
},
|
|
{ nodeId, history }
|
|
)
|
|
|
|
return nodeId
|
|
}
|
|
|
|
test.describe('Chat History Widget', () => {
|
|
let nodeId: string
|
|
|
|
test.beforeEach(async ({ comfyPage }) => {
|
|
nodeId = await renderChatHistory(comfyPage.page, [
|
|
{ prompt: 'Hello', response: 'World', response_id: '123' }
|
|
])
|
|
// Wait for chat history to be rendered
|
|
await comfyPage.page.waitForSelector('.pi-pencil')
|
|
})
|
|
|
|
test('displays chat history when receiving display_component message', async ({
|
|
comfyPage
|
|
}) => {
|
|
// Verify the chat history is displayed correctly
|
|
await expect(comfyPage.page.getByText('Hello')).toBeVisible()
|
|
await expect(comfyPage.page.getByText('World')).toBeVisible()
|
|
})
|
|
|
|
test('handles message editing interaction', async ({ comfyPage }) => {
|
|
// Get first node's ID
|
|
nodeId = await comfyPage.page.evaluate(() => {
|
|
const node = window['app'].graph.nodes[0]
|
|
|
|
// Make sure the node has a prompt widget (for editing functionality)
|
|
if (!node.widgets) {
|
|
node.widgets = []
|
|
}
|
|
|
|
// Add a prompt widget if it doesn't exist
|
|
if (!node.widgets.find((w) => w.name === 'prompt')) {
|
|
node.widgets.push({
|
|
name: 'prompt',
|
|
type: 'text',
|
|
value: 'Original prompt'
|
|
})
|
|
}
|
|
|
|
return node.id
|
|
})
|
|
|
|
await renderChatHistory(comfyPage.page, [
|
|
{
|
|
prompt: 'Message 1',
|
|
response: 'Response 1',
|
|
response_id: '123'
|
|
},
|
|
{
|
|
prompt: 'Message 2',
|
|
response: 'Response 2',
|
|
response_id: '456'
|
|
}
|
|
])
|
|
await comfyPage.page.waitForSelector('.pi-pencil')
|
|
|
|
const originalTextAreaInput = await comfyPage.page
|
|
.getByPlaceholder('text')
|
|
.nth(1)
|
|
.inputValue()
|
|
|
|
// Click edit button on first message
|
|
await comfyPage.page.getByLabel('Edit').first().click()
|
|
await comfyPage.nextFrame()
|
|
|
|
// Verify cancel button appears
|
|
await expect(comfyPage.page.getByLabel('Cancel')).toBeVisible()
|
|
|
|
// Click cancel edit
|
|
await comfyPage.page.getByLabel('Cancel').click()
|
|
|
|
// Verify prompt input is restored
|
|
await expect(comfyPage.page.getByPlaceholder('text').nth(1)).toHaveValue(
|
|
originalTextAreaInput
|
|
)
|
|
})
|
|
|
|
test('handles real-time updates to chat history', async ({ comfyPage }) => {
|
|
// Send initial history
|
|
await renderChatHistory(comfyPage.page, [
|
|
{
|
|
prompt: 'Initial message',
|
|
response: 'Initial response',
|
|
response_id: '123'
|
|
}
|
|
])
|
|
await comfyPage.page.waitForSelector('.pi-pencil')
|
|
|
|
// Update history with additional messages
|
|
await renderChatHistory(comfyPage.page, [
|
|
{
|
|
prompt: 'Follow-up',
|
|
response: 'New response',
|
|
response_id: '456'
|
|
}
|
|
])
|
|
await comfyPage.page.waitForSelector('.pi-pencil')
|
|
|
|
// Move mouse over the canvas to force update
|
|
await comfyPage.page.mouse.move(100, 100)
|
|
await comfyPage.nextFrame()
|
|
|
|
// Verify new messages appear
|
|
await expect(comfyPage.page.getByText('Follow-up')).toBeVisible()
|
|
await expect(comfyPage.page.getByText('New response')).toBeVisible()
|
|
})
|
|
})
|