mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
Add comprehensive E2E test coverage across 18 spec files and 2 test helpers: Infrastructure: - FeatureFlagHelper: manage localStorage feature flags and mock /api/features - QueueHelper: mock queue API routes and wait for completion Wave 1 (28 tests): toast notifications, error overlay, selection toolbox actions, linear mode, selection rectangle for vue nodes Wave 2 (30 tests): V2 node search, bottom panel logs, focus mode, job history actions, right side panel tabs Wave 3 (24 tests): errors tab interactions, vue node header actions, queue notification banners, settings sidebar button Wave 4 (24 tests): minimap status, widget copy button, floating menus, node library essentials tab
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import type { Page } from '@playwright/test'
|
|
|
|
export class FeatureFlagHelper {
|
|
constructor(private readonly page: Page) {}
|
|
|
|
/**
|
|
* Set feature flags via localStorage. Uses the `ff:` prefix
|
|
* that devFeatureFlagOverride.ts reads in dev mode.
|
|
* Call BEFORE comfyPage.setup() for flags needed at init time,
|
|
* or use page.evaluate() for runtime changes.
|
|
*/
|
|
async setFlags(flags: Record<string, unknown>): Promise<void> {
|
|
await this.page.evaluate((flagMap: Record<string, unknown>) => {
|
|
for (const [key, value] of Object.entries(flagMap)) {
|
|
localStorage.setItem(`ff:${key}`, JSON.stringify(value))
|
|
}
|
|
}, flags)
|
|
}
|
|
|
|
async setFlag(name: string, value: unknown): Promise<void> {
|
|
await this.setFlags({ [name]: value })
|
|
}
|
|
|
|
async clearFlags(): Promise<void> {
|
|
await this.page.evaluate(() => {
|
|
const keysToRemove: string[] = []
|
|
for (let i = 0; i < localStorage.length; i++) {
|
|
const key = localStorage.key(i)
|
|
if (key?.startsWith('ff:')) keysToRemove.push(key)
|
|
}
|
|
keysToRemove.forEach((k) => localStorage.removeItem(k))
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Mock server feature flags via route interception on /api/features.
|
|
*/
|
|
async mockServerFeatures(features: Record<string, unknown>): Promise<void> {
|
|
await this.page.route('**/api/features', (route) =>
|
|
route.fulfill({
|
|
status: 200,
|
|
contentType: 'application/json',
|
|
body: JSON.stringify(features)
|
|
})
|
|
)
|
|
}
|
|
}
|