diff --git a/browser_tests/changeTracker.spec.ts b/browser_tests/changeTracker.spec.ts index c2bf290bb..087016d3b 100644 --- a/browser_tests/changeTracker.spec.ts +++ b/browser_tests/changeTracker.spec.ts @@ -21,9 +21,7 @@ test.describe('Change Tracker', () => { await comfyPage.setSetting('Comfy.UseNewMenu', 'Top') }) - // Flaky https://github.com/Comfy-Org/ComfyUI_frontend/pull/1481 - // The collapse can be recognized as several changes. - test.skip('Can undo multiple operations', async ({ comfyPage }) => { + test('Can undo multiple operations', async ({ comfyPage }) => { function isModified() { return comfyPage.page.evaluate(async () => { return window['app'].extensionManager.workflow.activeWorkflow @@ -31,25 +29,59 @@ test.describe('Change Tracker', () => { }) } + function getUndoQueueSize() { + return comfyPage.page.evaluate(() => { + const workflow = + window['app'].extensionManager.workflow.activeWorkflow + return workflow.changeTracker.undoQueue.length + }) + } + + function getRedoQueueSize() { + return comfyPage.page.evaluate(() => { + const workflow = + window['app'].extensionManager.workflow.activeWorkflow + return workflow.changeTracker.redoQueue.length + }) + } + expect(await getUndoQueueSize()).toBe(0) + expect(await getRedoQueueSize()).toBe(0) + await comfyPage.menu.topbar.saveWorkflow('undo-redo-test') - expect(await isModified()).toBe(false) + await comfyPage.page.waitForFunction( + () => !window['app'].extensionManager.workflow.activeWorkflow.isModified + ) + // TODO(huchenlei): Investigate why saving the workflow is causing the + // undo queue to be triggered. + expect(await getUndoQueueSize()).toBe(1) + expect(await getRedoQueueSize()).toBe(0) const node = (await comfyPage.getFirstNodeRef())! await node.click('collapse') await expect(node).toBeCollapsed() expect(await isModified()).toBe(true) + expect(await getUndoQueueSize()).toBe(2) + expect(await getRedoQueueSize()).toBe(0) await comfyPage.ctrlB() await expect(node).toBeBypassed() expect(await isModified()).toBe(true) + expect(await getUndoQueueSize()).toBe(3) + expect(await getRedoQueueSize()).toBe(0) await comfyPage.ctrlZ() await expect(node).not.toBeBypassed() expect(await isModified()).toBe(true) + expect(await getUndoQueueSize()).toBe(2) + expect(await getRedoQueueSize()).toBe(1) - await comfyPage.ctrlZ() - await expect(node).not.toBeCollapsed() - expect(await isModified()).toBe(false) + // TODO(huchenlei): Following assertion is flaky. + // Seems like ctrlZ() is not triggered correctly. + // await comfyPage.ctrlZ() + // await expect(node).not.toBeCollapsed() + // expect(await isModified()).toBe(false) + // expect(await getUndoQueueSize()).toBe(1) + // expect(await getRedoQueueSize()).toBe(2) }) })