mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 06:20:11 +00:00
## What
Adds a `cloud` Playwright project so E2E tests can run against
`DISTRIBUTION=cloud` builds, with `@cloud` / `@oss` test tagging.
## Why
100+ usages of `isCloud` / `DISTRIBUTION` across 9 categories (API
routing, UI visibility, settings, auth). Zero cloud test infrastructure
existed — cloud-specific UI components (LoginButton, SubscribeButton,
etc.) had no E2E coverage path.
## Investigation: Runtime Toggle
Investigated whether `isCloud` could be made runtime-toggleable in
dev/test mode (via `window.__FORCE_CLOUD__`). **Not feasible** —
`__DISTRIBUTION__` is a Vite `define` compile-time constant used for
dead-code elimination. Runtime override would break tree-shaking in
production.
Full investigation:
`research/architecture/cloud-runtime-toggle-investigation.md`
## What's included
### Playwright Config
- New `cloud` project alongside existing `chromium`
- Cloud project: `grep: /@cloud/` — only runs `@cloud` tagged tests
- Chromium project: `grepInvert: /@cloud/` — excludes cloud tests
### Build Script
- `npm run build:cloud` → `DISTRIBUTION=cloud vite build`
### Test Tagging Convention
```typescript
test('works in both', async () => { ... });
test('subscription button visible @cloud', async () => { ... });
test('install manager prompt @oss', async () => { ... });
```
### Example Tests
- 2 cloud-only tests validating cloud UI visibility
## NOT included (future work)
- CI workflow job for cloud tests (separate PR)
- Cloud project is opt-in — not run by default locally
## Unblocks
- Cloud-specific E2E tests for entire team
- TB-03 LoginButton, TB-04 SubscribeButton (@Kaili Yang)
- DLG-04 SignIn, DLG-06 CancelSubscription
Part of: Test Coverage Q2 Overhaul
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-10546-test-infra-cloud-Playwright-project-with-cloud-oss-tagging-32f6d73d3650810ebb59dea8ce4891e9)
by [Unito](https://www.unito.io)
---------
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
|
|
/**
|
|
* Cloud distribution E2E tests.
|
|
*
|
|
* These tests run against the cloud build (DISTRIBUTION=cloud) and verify
|
|
* that cloud-specific behavior is present. In CI, no Firebase auth is
|
|
* configured, so the auth guard redirects to /cloud/login. The tests
|
|
* verify the cloud build loaded correctly by checking for cloud-only
|
|
* routes and elements.
|
|
*/
|
|
test.describe('Cloud distribution UI', { tag: '@cloud' }, () => {
|
|
test('cloud build redirects unauthenticated users to login', async ({
|
|
page
|
|
}) => {
|
|
await page.goto('http://localhost:8188')
|
|
// Cloud build has an auth guard that redirects to /cloud/login.
|
|
// This route only exists in the cloud distribution — it's tree-shaken
|
|
// in the OSS build. Its presence confirms the cloud build is active.
|
|
await expect(page).toHaveURL(/\/cloud\/login/, { timeout: 10_000 })
|
|
})
|
|
|
|
test('cloud login page renders sign-in options', async ({ page }) => {
|
|
await page.goto('http://localhost:8188')
|
|
await expect(page).toHaveURL(/\/cloud\/login/, { timeout: 10_000 })
|
|
// Verify cloud-specific login UI is rendered
|
|
await expect(page.getByRole('button', { name: /google/i })).toBeVisible()
|
|
})
|
|
})
|