mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
fix: address review feedback for Load3D E2E tests
This commit is contained in:
25
browser_tests/fixtures/helpers/Load3DFixtures.ts
Normal file
25
browser_tests/fixtures/helpers/Load3DFixtures.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { comfyPageFixture } from '@e2e/fixtures/ComfyPage'
|
||||
import { Load3DHelper } from '@e2e/tests/load3d/Load3DHelper'
|
||||
import { Load3DViewerHelper } from '@e2e/tests/load3d/Load3DViewerHelper'
|
||||
|
||||
export const load3dTest = comfyPageFixture.extend<{
|
||||
load3d: Load3DHelper
|
||||
}>({
|
||||
load3d: async ({ comfyPage }, use) => {
|
||||
await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true)
|
||||
await comfyPage.workflow.loadWorkflow('3d/load3d_node')
|
||||
await comfyPage.vueNodes.waitForNodes()
|
||||
|
||||
const node = comfyPage.vueNodes.getNodeLocator('1')
|
||||
await use(new Load3DHelper(node))
|
||||
}
|
||||
})
|
||||
|
||||
export const load3dViewerTest = load3dTest.extend<{
|
||||
viewer: Load3DViewerHelper
|
||||
}>({
|
||||
viewer: async ({ comfyPage }, use) => {
|
||||
await comfyPage.settings.setSetting('Comfy.Load3D.3DViewerEnable', true)
|
||||
await use(new Load3DViewerHelper(comfyPage.page))
|
||||
}
|
||||
})
|
||||
@@ -45,27 +45,6 @@ export class Load3DHelper {
|
||||
}, hex)
|
||||
}
|
||||
|
||||
async waitForWidgetValue(
|
||||
nodeId: number,
|
||||
widgetName: string,
|
||||
expected: string
|
||||
): Promise<void> {
|
||||
await expect
|
||||
.poll(
|
||||
() =>
|
||||
this.node.page().evaluate(
|
||||
({ nodeId, widgetName }) => {
|
||||
const n = window.app!.graph.getNodeById(nodeId)
|
||||
const w = n?.widgets?.find((w) => w.name === widgetName)
|
||||
return w?.value
|
||||
},
|
||||
{ nodeId, widgetName }
|
||||
),
|
||||
{ timeout: 15000 }
|
||||
)
|
||||
.toContain(expected)
|
||||
}
|
||||
|
||||
async waitForModelLoaded(): Promise<void> {
|
||||
await expect(this.node.getByTestId(TestIds.loading.overlay)).toBeHidden({
|
||||
timeout: 30000
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
import { expect } from '@playwright/test'
|
||||
|
||||
import { comfyPageFixture as test } from '@e2e/fixtures/ComfyPage'
|
||||
import { assetPath } from '@e2e/fixtures/utils/paths'
|
||||
import { Load3DHelper } from './Load3DHelper'
|
||||
import { load3dTest as test } from '@e2e/fixtures/helpers/Load3DFixtures'
|
||||
|
||||
test.describe('Load3D', () => {
|
||||
let load3d: Load3DHelper
|
||||
|
||||
test.beforeEach(async ({ comfyPage }) => {
|
||||
await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true)
|
||||
await comfyPage.workflow.loadWorkflow('3d/load3d_node')
|
||||
await comfyPage.vueNodes.waitForNodes()
|
||||
|
||||
const node = comfyPage.vueNodes.getNodeLocator('1')
|
||||
load3d = new Load3DHelper(node)
|
||||
})
|
||||
|
||||
test(
|
||||
'Renders canvas with upload buttons and controls menu',
|
||||
{ tag: ['@smoke', '@screenshot'] },
|
||||
async () => {
|
||||
async ({ load3d }) => {
|
||||
await expect(load3d.node).toBeVisible()
|
||||
|
||||
await expect(load3d.canvas).toBeVisible()
|
||||
@@ -45,7 +33,7 @@ test.describe('Load3D', () => {
|
||||
test(
|
||||
'Controls menu opens and shows all categories',
|
||||
{ tag: ['@smoke', '@screenshot'] },
|
||||
async () => {
|
||||
async ({ load3d }) => {
|
||||
await load3d.openMenu()
|
||||
|
||||
await expect(load3d.getMenuCategory('Scene')).toBeVisible()
|
||||
@@ -64,7 +52,7 @@ test.describe('Load3D', () => {
|
||||
test(
|
||||
'Changing background color updates the scene',
|
||||
{ tag: ['@smoke', '@screenshot'] },
|
||||
async ({ comfyPage }) => {
|
||||
async ({ comfyPage, load3d }) => {
|
||||
await load3d.setBackgroundColor('#cc3333')
|
||||
await comfyPage.nextFrame()
|
||||
|
||||
@@ -91,7 +79,7 @@ test.describe('Load3D', () => {
|
||||
test(
|
||||
'Recording controls are visible for Load3D',
|
||||
{ tag: '@smoke' },
|
||||
async () => {
|
||||
async ({ load3d }) => {
|
||||
await expect(load3d.recordingButton).toBeVisible()
|
||||
}
|
||||
)
|
||||
@@ -99,7 +87,7 @@ test.describe('Load3D', () => {
|
||||
test(
|
||||
'Uploads a 3D model via button and renders it',
|
||||
{ tag: ['@screenshot'] },
|
||||
async ({ comfyPage }) => {
|
||||
async ({ comfyPage, load3d }) => {
|
||||
const uploadResponsePromise = comfyPage.page.waitForResponse(
|
||||
(resp) => resp.url().includes('/upload/') && resp.status() === 200,
|
||||
{ timeout: 15000 }
|
||||
@@ -112,7 +100,11 @@ test.describe('Load3D', () => {
|
||||
|
||||
await uploadResponsePromise
|
||||
|
||||
await load3d.waitForWidgetValue(1, 'model_file', 'cube.obj')
|
||||
const node = await comfyPage.nodeOps.getNodeRefById(1)
|
||||
const modelFileWidget = await node.getWidget(0)
|
||||
await expect
|
||||
.poll(() => modelFileWidget.getValue(), { timeout: 5000 })
|
||||
.toContain('cube.obj')
|
||||
|
||||
await load3d.waitForModelLoaded()
|
||||
await comfyPage.nextFrame()
|
||||
@@ -127,7 +119,7 @@ test.describe('Load3D', () => {
|
||||
test(
|
||||
'Drag-and-drops a 3D model onto the canvas',
|
||||
{ tag: ['@screenshot'] },
|
||||
async ({ comfyPage }) => {
|
||||
async ({ comfyPage, load3d }) => {
|
||||
const canvasBox = await load3d.canvas.boundingBox()
|
||||
expect(canvasBox, 'Canvas bounding box should exist').not.toBeNull()
|
||||
const dropPosition = {
|
||||
@@ -140,7 +132,11 @@ test.describe('Load3D', () => {
|
||||
waitForUpload: true
|
||||
})
|
||||
|
||||
await load3d.waitForWidgetValue(1, 'model_file', 'cube.obj')
|
||||
const node = await comfyPage.nodeOps.getNodeRefById(1)
|
||||
const modelFileWidget = await node.getWidget(0)
|
||||
await expect
|
||||
.poll(() => modelFileWidget.getValue(), { timeout: 5000 })
|
||||
.toContain('cube.obj')
|
||||
|
||||
await load3d.waitForModelLoaded()
|
||||
await comfyPage.nextFrame()
|
||||
|
||||
@@ -1,24 +1,10 @@
|
||||
import { expect } from '@playwright/test'
|
||||
|
||||
import { comfyPageFixture as test } from '@e2e/fixtures/ComfyPage'
|
||||
import { assetPath } from '@e2e/fixtures/utils/paths'
|
||||
import { Load3DHelper } from './Load3DHelper'
|
||||
import { Load3DViewerHelper } from './Load3DViewerHelper'
|
||||
import { load3dViewerTest as test } from '@e2e/fixtures/helpers/Load3DFixtures'
|
||||
|
||||
test.describe('Load3D Viewer', () => {
|
||||
let load3d: Load3DHelper
|
||||
let viewer: Load3DViewerHelper
|
||||
|
||||
test.beforeEach(async ({ comfyPage }) => {
|
||||
await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true)
|
||||
await comfyPage.settings.setSetting('Comfy.Load3D.3DViewerEnable', true)
|
||||
await comfyPage.workflow.loadWorkflow('3d/load3d_node')
|
||||
await comfyPage.vueNodes.waitForNodes()
|
||||
|
||||
const node = comfyPage.vueNodes.getNodeLocator('1')
|
||||
load3d = new Load3DHelper(node)
|
||||
viewer = new Load3DViewerHelper(comfyPage.page)
|
||||
|
||||
test.beforeEach(async ({ comfyPage, load3d }) => {
|
||||
// Upload cube.obj so the node has a model loaded
|
||||
const uploadResponsePromise = comfyPage.page.waitForResponse(
|
||||
(resp) => resp.url().includes('/upload/') && resp.status() === 200,
|
||||
@@ -30,14 +16,19 @@ test.describe('Load3D Viewer', () => {
|
||||
await fileChooser.setFiles(assetPath('cube.obj'))
|
||||
await uploadResponsePromise
|
||||
|
||||
await load3d.waitForWidgetValue(1, 'model_file', 'cube.obj')
|
||||
const nodeRef = await comfyPage.nodeOps.getNodeRefById(1)
|
||||
const modelFileWidget = await nodeRef.getWidget(0)
|
||||
await expect
|
||||
.poll(() => modelFileWidget.getValue(), { timeout: 5000 })
|
||||
.toContain('cube.obj')
|
||||
|
||||
await load3d.waitForModelLoaded()
|
||||
})
|
||||
|
||||
test(
|
||||
'Opens viewer dialog with canvas and controls sidebar',
|
||||
{ tag: '@smoke' },
|
||||
async () => {
|
||||
async ({ load3d, viewer }) => {
|
||||
await load3d.openViewerButton.click()
|
||||
await viewer.waitForOpen()
|
||||
|
||||
@@ -54,7 +45,7 @@ test.describe('Load3D Viewer', () => {
|
||||
test(
|
||||
'Cancel button closes the viewer dialog',
|
||||
{ tag: '@smoke' },
|
||||
async () => {
|
||||
async ({ load3d, viewer }) => {
|
||||
await load3d.openViewerButton.click()
|
||||
await viewer.waitForOpen()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user