mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
## Summary Add integration contract tests (unit) and expanded Playwright coverage for subgraph promotion, hydration, navigation, and lifecycle edge behaviors. ## Changes - **What**: 22 unit/integration tests across 9 files covering promotion store sync, widget view lifecycle, input link resolution, pseudo-widget cache, navigation viewport restore, and subgraph operations. 13 Playwright E2E tests covering proxyWidgets hydration stability, promoted source removal cleanup, pseudo-preview unpack/remove, multi-link representative round-trip, nested promotion retarget, and navigation state on workflow switch. - **Helpers**: Added `isPseudoPreviewEntry`, `getPseudoPreviewWidgets`, `getNonPreviewPromotedWidgets` to promotedWidgets helper. Added `SubgraphHelper.getNodeCount()`. ## Review Focus - Test-only PR — no production code changes - Validates existing subgraph behaviors are covered by regression tests before further feature work - Phase 4 (unit/integration contracts) and Phase 5 (Playwright expansion) of the subgraph test coverage plan ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10123-test-subgraph-integration-contracts-and-expanded-Playwright-coverage-3256d73d365081258023e3a763859e00) by [Unito](https://www.unito.io) --------- Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: GitHub Action <action@github.com>
30 lines
986 B
TypeScript
30 lines
986 B
TypeScript
import { z } from 'zod'
|
|
import { fromZodError } from 'zod-validation-error'
|
|
|
|
import type { NodeProperty } from '@/lib/litegraph/src/LGraphNode'
|
|
|
|
const proxyWidgetTupleSchema = z.union([
|
|
z.tuple([z.string(), z.string(), z.string()]),
|
|
z.tuple([z.string(), z.string()])
|
|
])
|
|
const proxyWidgetsPropertySchema = z.array(proxyWidgetTupleSchema)
|
|
type ProxyWidgetsProperty = z.infer<typeof proxyWidgetsPropertySchema>
|
|
|
|
export function parseProxyWidgets(
|
|
property: NodeProperty | undefined
|
|
): ProxyWidgetsProperty {
|
|
try {
|
|
if (typeof property === 'string') property = JSON.parse(property)
|
|
const result = proxyWidgetsPropertySchema.safeParse(
|
|
typeof property === 'string' ? JSON.parse(property) : property
|
|
)
|
|
if (result.success) return result.data
|
|
|
|
const error = fromZodError(result.error)
|
|
console.warn(`Invalid assignment for properties.proxyWidgets:\n${error}`)
|
|
} catch (e) {
|
|
console.warn('Failed to parse properties.proxyWidgets:', e)
|
|
}
|
|
return []
|
|
}
|