-
Notifications
You must be signed in to change notification settings - Fork 490
[DO NOT MERGE] Cloud/1.37 - cloud release branch #8063
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
50 commits
Select commit
Hold shift + click to select a range
c77f0cb
[backport cloud/1.37] fix: version mismatch warning appearing in Play…
comfy-pr-bot 5ec29f6
[backport cloud/1.37] linear v2: Simple Mode (#8047)
AustinMroz 3c99e75
[backport cloud/1.37] [API Nodes] add price badges for Meshy 3D nodes…
comfy-pr-bot cd6047f
[backport cloud/1.37] Fix: Update for Image Widget test (#8051)
comfy-pr-bot d85c469
[backport cloud/1.37] feat(price-badges): add ByteDance SeeDance 1.5 …
comfy-pr-bot 9132f87
[backport cloud/1.37] Linear mode bug fixes (#8072)
comfy-pr-bot a3cd630
[backport cloud/1.37] fix: prevent Record Audio waveform from overflo…
comfy-pr-bot 40b0954
[backport cloud/1.37] Further linear fixes (#8084)
AustinMroz 5a276f2
[backport cloud/1.37] Make sure toggle visibility checks remote confi…
AustinMroz ac6adb0
[backport cloud/1.37] Fix copypasted primitives inside subgraphs (#8096)
comfy-pr-bot 3eb8c6a
[backport cloud/1.37] Improve linear compatibility with Safari, run b…
AustinMroz e036d76
[backport cloud/1.37] Fix asset selection in litegraph (#8119)
comfy-pr-bot a55cae5
[backport cloud/1.37] Update beta message in linear mode (#8109)
comfy-pr-bot 05cbcce
[backport cloud/1.37] feat: make subgraphs blueprints appear higher i…
comfy-pr-bot 995906a
[backport cloud/1.37] control widget fixes (#8163)
AustinMroz def9b55
Remove hamburger menu from tabs (#8067)
pythongosssss b7ddd50
[cloud/1.37] Regenerate expectations (#8198)
DrJKL f074243
[backport cloud/1.37] feat: When a list of strings is received, show …
comfy-pr-bot abb2b15
[backport cloud/1.37] feat: add per-tab workspace authentication infr…
comfy-pr-bot 751253f
[backport cloud/1.37] feat: add maxColumns prop to VirtualGrid for re…
comfy-pr-bot 14a2208
[backport cloud/1.37] feat(StatusBadge): add dot mode with CVA varian…
comfy-pr-bot 06bc103
[backport cloud/1.37] feat(ui): add shadcn-vue Select components (#8234)
comfy-pr-bot a6da367
[backport cloud/1.37] feat(ui): add TagsInput component with click-to…
comfy-pr-bot 32ce523
[backport cloud/1.37] feat: add isCloud guard to team workspaces feat…
simula-r b8a103b
[backport cloud/1.37] feat: add workspace session, auth, and store in…
simula-r 7faf8e0
[backport cloud/1.37] fix: Consistent keydown handling for EditableTe…
DrJKL 0c3d569
[backport cloud/1.37] feat: add badge support to NavItem component (#…
DrJKL 5d94c11
[backport cloud/1.37] feat: add session download tracking to assetDow…
comfy-pr-bot 2d0f3d6
[backport cloud/1.37] refactor: restructure BaseModalLayout from flex…
DrJKL eb7d0c7
[backport cloud/1.37] feat: implement progressive pagination for Asse…
DrJKL b98d53e
[backport cloud/1.37] feat(assets): add ModelInfoPanel for asset brow…
DrJKL 88f7886
[backport cloud/1.37] Updates: Model Management (#8255)
comfy-pr-bot 9db2fd8
[backport cloud/1.37] Workspaces 3 create a workspace (#8221) (#8252)
simula-r 9b7f20c
[backport cloud/1.37] Add telemetry for entering linear mode (#8265)
comfy-pr-bot 7a5fb57
[backport cloud/1.37] fix: use authenticated API for remote config po…
comfy-pr-bot 12761f8
[backport cloud/1.37] Linear: progressbar, tooltips, and output fixes…
comfy-pr-bot 4c3c61f
[backport cloud/1.37] [bugfix] Fix inconsistent menu icon sizes in Co…
comfy-pr-bot 113a6a7
[backport cloud/1.37] fix: fallback to asset metadata/name when filen…
comfy-pr-bot 745ea0a
[backport cloud/1.37] [refactor] Manager dialog simplification (#8306)
DrJKL ec91aa8
[backport cloud/1.37] Updates: More Modal Modification (#8308)
DrJKL 3eb15bb
[backport cloud/1.37] feat: add getAssetFilename util with fallback c…
comfy-pr-bot 3b7e102
[backport cloud/1.37] Add 3d control buttons to linear mode (#8289)
comfy-pr-bot 1963f28
[backport cloud/1.37] Workspaces 4 members invites (#8301)
simula-r e82c692
[backport cloud/1.37] fix: workspace icon flash and credits showing 0…
comfy-pr-bot e751cf4
[backport cloud/1.37] perf: remove autoplay from assets cards (#8327)
comfy-pr-bot a5f50ac
[backport cloud/1.37] feat: add Hugging Face model source support (#8…
comfy-pr-bot 4c2edae
[backport cloud/1.37] Fix dragging Vue nodes into canvas from library…
comfy-pr-bot 8e5a037
[backport cloud/1.37] Feat/workspaces 5 auth gate check (#8357)
simula-r 72add79
[backport cloud/1.37] fix: move WorkspaceAuthGate to LayoutDefault fo…
comfy-pr-bot 2f9ede1
[backport cloud/1.37] Templates: Search speed (#8397)
comfy-pr-bot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Binary file modified
BIN
-102 Bytes
(100%)
...obileBaseline.spec.ts-snapshots/mobile-default-workflow-mobile-chrome-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-75 Bytes
(100%)
...ts/mobileBaseline.spec.ts-snapshots/mobile-empty-canvas-mobile-chrome-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-5.99 KB
(91%)
...sts/primitiveNode.spec.ts-snapshots/primitive-node-connected-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-5.91 KB
(91%)
...s/primitiveNode.spec.ts-snapshots/static-primitive-connected-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file modified
BIN
+526 Bytes
(100%)
...iewport.spec.ts-snapshots/viewport-fits-when-saved-offscreen-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-83 Bytes
(100%)
...odes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-115 Bytes
(100%)
...s/groups/groups.spec.ts-snapshots/vue-groups-fit-to-contents-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-80 Bytes
(100%)
...canvas/pan.spec.ts-snapshots/vue-nodes-paned-with-touch-mobile-chrome-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-168 Bytes
(99%)
...eractions/canvas/zoom.spec.ts-snapshots/zoomed-in-ctrl-shift-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-176 Bytes
(100%)
...nks/linkInteraction.spec.ts-snapshots/vue-node-dragging-link-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-181 Bytes
(100%)
...nkInteraction.spec.ts-snapshots/vue-node-input-drag-ctrl-alt-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-180 Bytes
(100%)
...eraction.spec.ts-snapshots/vue-node-input-drag-reuses-origin-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-171 Bytes
(100%)
...inkInteraction.spec.ts-snapshots/vue-node-reroute-input-drag-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-144 Bytes
(100%)
...raction.spec.ts-snapshots/vue-node-reroute-output-shift-drag-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-149 Bytes
(100%)
...teraction.spec.ts-snapshots/vue-node-shift-output-multi-link-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-187 Bytes
(100%)
...inks/linkInteraction.spec.ts-snapshots/vue-node-snap-to-node-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-184 Bytes
(100%)
...inks/linkInteraction.spec.ts-snapshots/vue-node-snap-to-slot-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-100 Bytes
(100%)
...interactions/node/move.spec.ts-snapshots/vue-node-moved-node-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-76 Bytes
(100%)
...s/node/move.spec.ts-snapshots/vue-node-moved-node-touch-mobile-chrome-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-113 Bytes
(100%)
.../nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-96 Bytes
(100%)
...deStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-141 Bytes
(100%)
...ors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-160 Bytes
(100%)
...rs.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-93 Bytes
(100%)
...Nodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-150 Bytes
(100%)
...oad/uploadWidgets.spec.ts-snapshots/vue-nodes-upload-widgets-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file modified
BIN
-4.99 KB
(90%)
...idget.spec.ts-snapshots/image-preview-changed-by-combo-value-chromium-linux.png
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,206 @@ | ||
| import { flushPromises, mount } from '@vue/test-utils' | ||
| import { beforeEach, describe, expect, it, vi } from 'vitest' | ||
| import { ref } from 'vue' | ||
|
|
||
| import WorkspaceAuthGate from './WorkspaceAuthGate.vue' | ||
|
|
||
| const mockIsInitialized = ref(false) | ||
| const mockCurrentUser = ref<object | null>(null) | ||
|
|
||
| vi.mock('@/stores/firebaseAuthStore', () => ({ | ||
| useFirebaseAuthStore: () => ({ | ||
| isInitialized: mockIsInitialized, | ||
| currentUser: mockCurrentUser | ||
| }) | ||
| })) | ||
|
|
||
| const mockRefreshRemoteConfig = vi.fn() | ||
| vi.mock('@/platform/remoteConfig/refreshRemoteConfig', () => ({ | ||
| refreshRemoteConfig: (options: unknown) => mockRefreshRemoteConfig(options) | ||
| })) | ||
|
|
||
| const mockTeamWorkspacesEnabled = vi.hoisted(() => ({ value: false })) | ||
| vi.mock('@/composables/useFeatureFlags', () => ({ | ||
| useFeatureFlags: () => ({ | ||
| flags: { | ||
| get teamWorkspacesEnabled() { | ||
| return mockTeamWorkspacesEnabled.value | ||
| } | ||
| } | ||
| }) | ||
| })) | ||
|
|
||
| const mockWorkspaceStoreInitialize = vi.fn() | ||
| const mockWorkspaceStoreInitState = vi.hoisted(() => ({ | ||
| value: 'uninitialized' as string | ||
| })) | ||
| vi.mock('@/platform/workspace/stores/teamWorkspaceStore', () => ({ | ||
| useTeamWorkspaceStore: () => ({ | ||
| get initState() { | ||
| return mockWorkspaceStoreInitState.value | ||
| }, | ||
| initialize: mockWorkspaceStoreInitialize | ||
| }) | ||
| })) | ||
|
|
||
| const mockIsCloud = vi.hoisted(() => ({ value: true })) | ||
| vi.mock('@/platform/distribution/types', () => ({ | ||
| get isCloud() { | ||
| return mockIsCloud.value | ||
| } | ||
| })) | ||
|
|
||
| vi.mock('primevue/progressspinner', () => ({ | ||
| default: { template: '<div class="progress-spinner" />' } | ||
| })) | ||
|
|
||
| describe('WorkspaceAuthGate', () => { | ||
| beforeEach(() => { | ||
| vi.clearAllMocks() | ||
| mockIsCloud.value = true | ||
| mockIsInitialized.value = false | ||
| mockCurrentUser.value = null | ||
| mockTeamWorkspacesEnabled.value = false | ||
| mockWorkspaceStoreInitState.value = 'uninitialized' | ||
| mockRefreshRemoteConfig.mockResolvedValue(undefined) | ||
| mockWorkspaceStoreInitialize.mockResolvedValue(undefined) | ||
| }) | ||
|
|
||
| const mountComponent = () => | ||
| mount(WorkspaceAuthGate, { | ||
| slots: { | ||
| default: '<div data-testid="slot-content">App Content</div>' | ||
| } | ||
| }) | ||
|
|
||
| describe('non-cloud builds', () => { | ||
| it('renders slot immediately when isCloud is false', async () => { | ||
| mockIsCloud.value = false | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| expect(wrapper.find('.progress-spinner').exists()).toBe(false) | ||
| expect(mockRefreshRemoteConfig).not.toHaveBeenCalled() | ||
| }) | ||
| }) | ||
|
|
||
| describe('cloud builds - unauthenticated user', () => { | ||
| it('shows spinner while waiting for Firebase auth', () => { | ||
| mockIsInitialized.value = false | ||
|
|
||
| const wrapper = mountComponent() | ||
|
|
||
| expect(wrapper.find('.progress-spinner').exists()).toBe(true) | ||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(false) | ||
| }) | ||
|
|
||
| it('renders slot when Firebase initializes with no user', async () => { | ||
| mockIsInitialized.value = false | ||
|
|
||
| const wrapper = mountComponent() | ||
| expect(wrapper.find('.progress-spinner').exists()).toBe(true) | ||
|
|
||
| mockIsInitialized.value = true | ||
| mockCurrentUser.value = null | ||
| await flushPromises() | ||
|
|
||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| expect(mockRefreshRemoteConfig).not.toHaveBeenCalled() | ||
| }) | ||
| }) | ||
|
|
||
| describe('cloud builds - authenticated user', () => { | ||
| beforeEach(() => { | ||
| mockIsInitialized.value = true | ||
| mockCurrentUser.value = { uid: 'user-123' } | ||
| }) | ||
|
|
||
| it('refreshes remote config with auth after Firebase init', async () => { | ||
| mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(mockRefreshRemoteConfig).toHaveBeenCalledWith({ useAuth: true }) | ||
| }) | ||
|
|
||
| it('renders slot when teamWorkspacesEnabled is false', async () => { | ||
| mockTeamWorkspacesEnabled.value = false | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| expect(mockWorkspaceStoreInitialize).not.toHaveBeenCalled() | ||
| }) | ||
|
|
||
| it('initializes workspace store when teamWorkspacesEnabled is true', async () => { | ||
| mockTeamWorkspacesEnabled.value = true | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(mockWorkspaceStoreInitialize).toHaveBeenCalled() | ||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| }) | ||
|
|
||
| it('skips workspace init when store is already initialized', async () => { | ||
| mockTeamWorkspacesEnabled.value = true | ||
| mockWorkspaceStoreInitState.value = 'ready' | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(mockWorkspaceStoreInitialize).not.toHaveBeenCalled() | ||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| }) | ||
| }) | ||
|
|
||
| describe('error handling - graceful degradation', () => { | ||
| beforeEach(() => { | ||
| mockIsInitialized.value = true | ||
| mockCurrentUser.value = { uid: 'user-123' } | ||
| }) | ||
|
|
||
| it('renders slot when remote config refresh fails', async () => { | ||
| mockRefreshRemoteConfig.mockRejectedValue(new Error('Network error')) | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| }) | ||
|
|
||
| it('renders slot when remote config refresh times out', async () => { | ||
| vi.useFakeTimers() | ||
| // Never-resolving promise simulates a hanging request | ||
| mockRefreshRemoteConfig.mockReturnValue(new Promise(() => {})) | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| // Still showing spinner before timeout | ||
| expect(wrapper.find('.progress-spinner').exists()).toBe(true) | ||
|
|
||
| // Advance past the 10 second timeout | ||
| await vi.advanceTimersByTimeAsync(10_001) | ||
| await flushPromises() | ||
|
|
||
| // Should render slot after timeout (graceful degradation) | ||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| vi.useRealTimers() | ||
| }) | ||
|
|
||
| it('renders slot when workspace store initialization fails', async () => { | ||
| mockTeamWorkspacesEnabled.value = true | ||
| mockWorkspaceStoreInitialize.mockRejectedValue( | ||
| new Error('Workspace init failed') | ||
| ) | ||
|
|
||
| const wrapper = mountComponent() | ||
| await flushPromises() | ||
|
|
||
| expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(true) | ||
| }) | ||
| }) | ||
| }) | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Consider using function declaration for test helper.
Per codebase conventions, prefer function declarations over function expressions for pure functions. This is a minor style nit.
♻️ Suggested change
📝 Committable suggestion
🤖 Prompt for AI Agents