Skip to content

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Nov 6, 2025

Summary

Adds Playwright tests for cloud with Firebase auth.

Changes

  • Refactor ComfyPage to abstract base class (3 backend-specific methods)
  • Add LocalhostComfyPage (existing devtools) and CloudComfyPage (cloud settings API)
  • Add globalSetupCloud for Firebase login (runs once, saves auth state)
  • Add playwright.cloud.config.ts (5x timeout, @cloud grep)
  • Add basic cloud tests

Setup

Requires env vars:

  • CLOUD_TEST_EMAIL
  • CLOUD_TEST_PASSWORD

Run

pnpm exec playwright test --config=playwright.cloud.config.ts

Goal

Validate approach before expanding coverage or adding CI.

┆Issue is synchronized with this Notion page by Unito

Adds Playwright tests for cloud environment with Firebase auth.

Changes:
- Refactor ComfyPage to abstract base class
- Add LocalhostComfyPage (existing devtools implementation)
- Add CloudComfyPage (cloud settings API, Firebase auth)
- Add cloud fixture with auth state persistence
- Add globalSetupCloud for Firebase login
- Add playwright.cloud.config with 5x timeout
- Add basic cloud tests (load app, canvas interaction, settings)
- Update .gitignore for auth state files
- Update tsconfig to include playwright.cloud.config

Architecture:
- ComfyPage abstract with 3 backend-specific methods
- LocalhostComfyPage uses /api/devtools + multi-user
- CloudComfyPage uses /api/settings + Firebase localStorage
- No code duplication (95% shared)

Setup:
- Requires CLOUD_TEST_EMAIL and CLOUD_TEST_PASSWORD env vars
- globalSetup logs in once, saves auth to browser_tests/.auth/
- Tests reuse saved auth state (no login per test)
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Nov 6, 2025
@github-actions
Copy link

github-actions bot commented Nov 6, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 11/16/2025, 07:53:02 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Nov 6, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 11/16/2025, 08:02:59 AM UTC

📈 Summary

  • Total Tests: 501
  • Passed: 470 ✅
  • Failed: 0
  • Flaky: 1 ⚠️
  • Skipped: 30 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 461 / ❌ 0 / ⚠️ 1 / ⏭️ 30
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@github-actions
Copy link

github-actions bot commented Nov 6, 2025

Bundle Size Report

Summary

  • Raw size: 13.6 MB baseline 13.6 MB — ⚪ 0 B
  • Gzip: 2.73 MB baseline 2.73 MB — ⚪ 0 B
  • Brotli: 2.14 MB baseline 2.14 MB — ⚪ 0 B
  • Bundles: 88 current • 88 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (5.32 MB) · Other ⚪ 0 B (3.92 MB) · App Entry Points ⚪ 0 B (2.98 MB) · Graph Workspace ⚪ 0 B (803 kB) · Panels & Settings ⚪ 0 B (307 kB) · UI Components ⚪ 0 B (210 kB) · + 3 more

Per-category breakdown
App Entry Points — 2.98 MB (baseline 2.98 MB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CHZezxpI.js 365 kB 365 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/index-Dqn0cBV2.js 345 B 345 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/index-DT0B6wFd.js 2.62 MB 2.62 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Graph Workspace — 803 kB (baseline 803 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Bul3g-x8.js 803 kB 803 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Views & Navigation — 8.03 kB (baseline 8.03 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-I8iq7g6c.js 8.03 kB 8.03 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 307 kB (baseline 307 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-2D48qVa1.js 10.2 kB 10.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CreditsPanel-DoGq1MLw.js 23 kB 23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-BEURLYKq.js 12 kB 12 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-Cxb3MkDb.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-DPm8ZDfW.js 8.09 kB 8.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BXTtSH4O.js 33.3 kB 33.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C9Pzn-NG.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCy2fA_h.js 27.3 kB 27.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CQpqEFfl.js 26.6 kB 26.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DHcnxypw.js 21.7 kB 21.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DhFTK9fY.js 25.1 kB 25.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DlT4t_ui.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRgSrIdD.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-tjkeqiZq.js 21.1 kB 21.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-DD0q2SEz.js 7.8 kB 7.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 210 kB (baseline 210 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-_C638yUJ.js 11.2 kB 11.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage.vue_vue_type_script_setup_true_lang-CYFSl-yC.js 10.7 kB 10.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D.vue_vue_type_script_setup_true_lang-oKNVb_tJ.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-D2s8tnS2.js 1.26 kB 1.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-ByrPd5jr.js 1.62 kB 1.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-BLThwBfe.js 2.16 kB 2.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-B3Bv6lZQ.js 47.9 kB 47.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelectButton-Dvz0t0qM.js 6.59 kB 6.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 12.6 kB (baseline 12.6 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioService-5toMArZp.js 2.2 kB 2.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService-C2_9NX-c.js 7.6 kB 7.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-9qsgImgv.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 5.87 kB (baseline 5.87 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-CAFonvcJ.js 1.41 kB 1.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-CXKCRJ-m.js 460 B 460 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTransformCompatOverlayProps-YaCpDdzr.js 486 B 486 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWidgetValue-IC6pgigJ.js 2.45 kB 2.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 5.32 MB (baseline 5.32 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-Ce5vXro9.js 3.22 MB 3.22 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-aR6ntw5X.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CDRShllv.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-B0sbT51a.js 92.6 kB 92.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 3.92 MB (baseline 3.92 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AudioPreviewPlayer-BURsH97g.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-_6uSNVYB.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BaAvtVOT.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BRKOlMPq.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C1kmJUO0.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CHLkz7NH.js 17.4 kB 17.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-cLsDwHMQ.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ct50VUT9.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DOEnM922.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ds4Sq2CW.js 15.7 kB 15.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-DGyVuCYt.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BjHbZI-o.js 97.5 kB 97.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BsmSUEg9.js 75.9 kB 75.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C1dqVsBC.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CTcPPkuZ.js 87.4 kB 87.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CwX98cQA.js 89.7 kB 89.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DFyT7zKX.js 84.8 kB 84.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DHvyJYQT.js 74.9 kB 74.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ruI2u5eb.js 118 kB 118 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-UdMyOcTd.js 86.4 kB 86.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-_Px5dSNW.js 306 kB 306 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-7z21KPoS.js 285 kB 285 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWKZzBPK.js 346 kB 346 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CGbgH4Yl.js 320 kB 320 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CjjjdWkV.js 313 kB 313 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVrNtxvj.js 288 kB 288 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DLRSA0IK.js 309 kB 309 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DQV2gnwA.js 372 kB 372 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ofqLG5vz.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetAudioUI-CXLAmxvM.js 4.49 kB 4.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-4dlndULn.js 2.44 kB 2.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-ClHisan8.js 4.91 kB 4.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetFileUpload-Cx6dGznS.js 11.9 kB 11.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-CPzTmR5d.js 5.62 kB 5.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Ds3K3ULR.js 2.15 kB 2.15 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-BvPLkQvY.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DMU6AVQb.js 3.66 kB 3.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-DJkI-IPJ.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-uVrVyktp.js 4.88 kB 4.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMultiSelect-CJvFxmaR.js 4.3 kB 4.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-D4CEDpej.js 22.2 kB 22.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-Uv08YNad.js 2.33 kB 2.33 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DmS9w6hb.js 3.74 kB 3.74 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-BO_LlFr7.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTreeSelect-rqzCRGog.js 4.03 kB 4.03 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

@christian-byrne christian-byrne marked this pull request as draft November 6, 2025 23:35
Fixes circular dependency between ComfyPage and LocalhostComfyPage.

Changes:
- Create browser_tests/fixtures/comfyPageFixture.ts with fixture
- Remove fixture from ComfyPage.ts (keep abstract class only)
- Re-export fixture from ComfyPage.ts for backward compatibility

Now properly follows dependency hierarchy:
- ComfyPage.ts (abstract) - no implementation imports
- LocalhostComfyPage.ts → imports ComfyPage
- comfyPageFixture.ts → imports both
- Tests import from ComfyPage.ts (re-exported)
Circular dependency was caused by:
- comfyPageFixture.ts importing testComfySnapToGridGridSize from ComfyPage.ts
- ComfyPage.ts re-exporting comfyPageFixture

Solution:
- Extract testComfySnapToGridGridSize to constants.ts
- Both files import from constants.ts
- Only type-import ComfyPage in comfyPageFixture.ts

Now clean dependency graph with no cycles.
- Remove comfyPageFixture re-export from ComfyPage.ts
- Update all test imports to use comfyPageFixture from its own file
- Update README.md example to show correct import path
- Fixes: comfyPageFixture → LocalhostComfyPage → ComfyPage circular import
- Create ci-tests-e2e-cloud.yaml workflow
- Manual trigger via workflow_dispatch
- Uses CLOUD_TEST_EMAIL and CLOUD_TEST_PASSWORD secrets
- Add CLOUD_TESTS.md documentation
@socket-security
Copy link

socket-security bot commented Nov 15, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedhappy-dom@​15.11.0100258896100
Addedextendable-media-recorder-wav-encoder@​7.0.12999100669080
Addedfuse.js@​7.0.01001009181100
Addedglob@​11.0.310010010082100
Addedfs-extra@​11.2.010010010085100
Addedglobals@​15.15.01001008592100
Addedfirebase@​11.6.0991001009980
Addedextendable-media-recorder@​9.2.27991009190100

View full report

@socket-security
Copy link

socket-security bot commented Nov 15, 2025

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn Critical
Critical CVE: Happy DOM: VM Context Escape can lead to Remote Code Execution in npm happy-dom

CVE: GHSA-37j7-fg3j-429f Happy DOM: VM Context Escape can lead to Remote Code Execution (CRITICAL)

Affected versions: < 20.0.0

Patched version: 20.0.0

From: package.jsonnpm/[email protected]

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at [email protected].

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/[email protected]. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: npm happy-dom's `--disallow-code-generation-from-strings` is not sufficient for isolating untrusted JavaScript

CVE: GHSA-qpm2-6cq5-7pq5 happy-dom's --disallow-code-generation-from-strings is not sufficient for isolating untrusted JavaScript (CRITICAL)

Affected versions: < 20.0.2

Patched version: 20.0.2

From: package.jsonnpm/[email protected]

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at [email protected].

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/[email protected]. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants