mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-31 13:29:55 +00:00
* Merge temp userfile Basic migration Remove deprecated isFavourite Rename nit nit Rework open/load Refactor save Refactor delete Remove workflow dep on manager WIP Change map to record Fix directory nit isActive Move nit Add unload Add close workflow Remove workflowManager.closeWorkflow nit Remove workflowManager.storePrompt move from commandStore move more from commandStore nit Use workflowservice nit nit implement setWorkflow nit Remove workflows.ts Fix strict errors nit nit Resolves circular dep nit nit Fix workflow switching Add openworkflowPaths Fix store Fix key Serialize by default Fix proxy nit Update path Proper sync Fix tabs WIP nit Resolve merge conflict Fix userfile store tests Update jest test Update tabs patch tests Fix changeTracker init Move insert to service nit Fix insert nit Handle bookmark rename Refactor tests Add delete workflow Add test on deleting workflow Add closeWorkflow tests nit * Fix path * Move load next/previous * Move logic from store to service * nit * nit * nit * nit * nit * Add ChangeTracker.initialState * ChangeTracker load/unload * Remove app.changeWorkflow * Hook to app.ts * Changetracker restore * nit * nit * nit * Add debug logs * Remove unnecessary checkState on graphLoad * nit * Fix strict * Fix temp workflow name * Track ismodified * Fix reactivity * nit * Fix graph equal * nit * update test * nit * nit * Fix modified state * nit * Fix modified state * Sidebar force close * tabs force close * Fix save * Add load remote workflow test * Force save * Add save test * nit * Correctly handle delete last opened workflow * nit * Fix workflow rename * Fix save * Fix tests * Fix strict * Update playwright tests * Fix filename conflict handling * nit * Merge temporary and persisted ref * Update playwright expectations * nit * nit * Fix saveAs * Add playwright test * nit
126 lines
3.9 KiB
TypeScript
126 lines
3.9 KiB
TypeScript
import type { Response } from '@playwright/test'
|
|
import type { StatusWsMessage } from '../src/types/apiTypes.ts'
|
|
import { expect, mergeTests } from '@playwright/test'
|
|
import { comfyPageFixture } from './fixtures/ComfyPage'
|
|
import { webSocketFixture } from './fixtures/ws.ts'
|
|
|
|
const test = mergeTests(comfyPageFixture, webSocketFixture)
|
|
|
|
test.describe('Actionbar', () => {
|
|
test.beforeEach(async ({ comfyPage }) => {
|
|
await comfyPage.setSetting('Comfy.UseNewMenu', 'Top')
|
|
})
|
|
|
|
/**
|
|
* This test ensures that the autoqueue change mode can only queue one change at a time
|
|
*/
|
|
test('Does not auto-queue multiple changes at a time', async ({
|
|
comfyPage,
|
|
ws
|
|
}) => {
|
|
// Enable change auto-queue mode
|
|
const queueOpts = await comfyPage.actionbar.queueButton.toggleOptions()
|
|
expect(await queueOpts.getMode()).toBe('disabled')
|
|
await queueOpts.setMode('change')
|
|
await comfyPage.nextFrame()
|
|
expect(await queueOpts.getMode()).toBe('change')
|
|
await comfyPage.actionbar.queueButton.toggleOptions()
|
|
|
|
// Intercept the prompt queue endpoint
|
|
let promptNumber = 0
|
|
comfyPage.page.route('**/api/prompt', async (route, req) => {
|
|
await new Promise((r) => setTimeout(r, 100))
|
|
route.fulfill({
|
|
status: 200,
|
|
body: JSON.stringify({
|
|
prompt_id: promptNumber,
|
|
number: ++promptNumber,
|
|
node_errors: {},
|
|
// Include the request data to validate which prompt was queued so we can validate the width
|
|
__request: req.postDataJSON()
|
|
})
|
|
})
|
|
})
|
|
|
|
// Start watching for a message to prompt
|
|
const requestPromise = comfyPage.page.waitForResponse('**/api/prompt')
|
|
|
|
// Find and set the width on the latent node
|
|
const triggerChange = async (value: number) => {
|
|
return await comfyPage.page.evaluate((value) => {
|
|
const node = window['app'].graph._nodes.find(
|
|
(n) => n.type === 'EmptyLatentImage'
|
|
)
|
|
node.widgets[0].value = value
|
|
window[
|
|
'app'
|
|
].extensionManager.workflow.activeWorkflow.changeTracker.checkState()
|
|
}, value)
|
|
}
|
|
|
|
// Trigger a status websocket message
|
|
const triggerStatus = async (queueSize: number) => {
|
|
await ws.trigger({
|
|
type: 'status',
|
|
data: {
|
|
status: {
|
|
exec_info: {
|
|
queue_remaining: queueSize
|
|
}
|
|
}
|
|
}
|
|
} as StatusWsMessage)
|
|
}
|
|
|
|
// Extract the width from the queue response
|
|
const getQueuedWidth = async (resp: Promise<Response>) => {
|
|
const obj = await (await resp).json()
|
|
return obj['__request']['prompt']['5']['inputs']['width']
|
|
}
|
|
|
|
// Trigger a bunch of changes
|
|
const START = 32
|
|
const END = 64
|
|
for (let i = START; i <= END; i += 8) {
|
|
await triggerChange(i)
|
|
}
|
|
|
|
// Ensure the queued width is the first value
|
|
expect(
|
|
await getQueuedWidth(requestPromise),
|
|
'the first queued prompt should be the first change width'
|
|
).toBe(START)
|
|
|
|
// Ensure that no other changes are queued
|
|
await expect(
|
|
comfyPage.page.waitForResponse('**/api/prompt', { timeout: 250 })
|
|
).rejects.toThrow()
|
|
expect(
|
|
promptNumber,
|
|
'only 1 prompt should have been queued even though there were multiple changes'
|
|
).toBe(1)
|
|
|
|
// Trigger a status update so auto-queue re-runs
|
|
await triggerStatus(1)
|
|
await triggerStatus(0)
|
|
|
|
// Ensure the queued width is the last queued value
|
|
expect(
|
|
await getQueuedWidth(comfyPage.page.waitForResponse('**/api/prompt')),
|
|
'last queued prompt width should be the last change'
|
|
).toBe(END)
|
|
expect(promptNumber, 'queued prompt count should be 2').toBe(2)
|
|
})
|
|
|
|
test('Can dock actionbar into top menu', async ({ comfyPage }) => {
|
|
await comfyPage.page.dragAndDrop(
|
|
'.actionbar .drag-handle',
|
|
'.comfyui-menu',
|
|
{
|
|
targetPosition: { x: 0, y: 0 }
|
|
}
|
|
)
|
|
expect(await comfyPage.actionbar.isDocked()).toBe(true)
|
|
})
|
|
})
|