From fff98b16bb7c86e08ec2b1a475eeb7b93bedf2de Mon Sep 17 00:00:00 2001 From: Tomi Turtiainen <10324676+tomi@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:39:18 +0200 Subject: [PATCH] fix(editor): Fix issues with push connect reconnection (#13085) --- packages/editor-ui/src/Interface.ts | 1 - .../components/CanvasChat/CanvasChat.test.ts | 7 + .../MainHeader/WorkflowDetails.test.ts | 6 + .../components/PushConnectionTracker.test.ts | 58 ++++++ .../src/components/PushConnectionTracker.vue | 17 +- .../PushConnectionTracker.test.ts.snap | 55 ++++++ .../src/composables/useRunWorkflow.test.ts | 29 +-- .../src/composables/useRunWorkflow.ts | 4 +- .../__tests__/mockEventSource.ts | 20 +++ .../__tests__/mockWebSocketClient.ts | 32 ++++ .../__tests__/useEventSourceClient.test.ts | 153 ++++++++++++++++ .../__tests__/useHeartbeat.test.ts | 88 ++++++++++ .../__tests__/useWebSocketClient.test.ts | 140 +++++++++++++++ .../push-connection/useEventSourceClient.ts | 69 ++++++++ .../src/push-connection/useHeartbeat.ts | 32 ++++ .../src/push-connection/useReconnectTimer.ts | 48 +++++ .../src/push-connection/useWebSocketClient.ts | 106 +++++++++++ .../src/stores/pushConnection.store.ts | 165 +++++++----------- packages/editor-ui/src/stores/root.store.ts | 14 -- 19 files changed, 907 insertions(+), 137 deletions(-) create mode 100644 packages/editor-ui/src/components/PushConnectionTracker.test.ts create mode 100644 packages/editor-ui/src/components/__snapshots__/PushConnectionTracker.test.ts.snap create mode 100644 packages/editor-ui/src/push-connection/__tests__/mockEventSource.ts create mode 100644 packages/editor-ui/src/push-connection/__tests__/mockWebSocketClient.ts create mode 100644 packages/editor-ui/src/push-connection/__tests__/useEventSourceClient.test.ts create mode 100644 packages/editor-ui/src/push-connection/__tests__/useHeartbeat.test.ts create mode 100644 packages/editor-ui/src/push-connection/__tests__/useWebSocketClient.test.ts create mode 100644 packages/editor-ui/src/push-connection/useEventSourceClient.ts create mode 100644 packages/editor-ui/src/push-connection/useHeartbeat.ts create mode 100644 packages/editor-ui/src/push-connection/useReconnectTimer.ts create mode 100644 packages/editor-ui/src/push-connection/useWebSocketClient.ts diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index af71d5349c..fc4ebbce15 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -889,7 +889,6 @@ export interface RootState { endpointWebhook: string; endpointWebhookTest: string; endpointWebhookWaiting: string; - pushConnectionActive: boolean; timezone: string; executionTimeout: number; maxExecutionTimeout: number; diff --git a/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts b/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts index 41f27c39c0..153b7eabb9 100644 --- a/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts +++ b/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts @@ -38,6 +38,13 @@ vi.mock('@/composables/useToast', () => { }, }; }); + +vi.mock('@/stores/pushConnection.store', () => ({ + usePushConnectionStore: vi.fn().mockReturnValue({ + isConnected: true, + }), +})); + // Test data const mockNodes: INodeUi[] = [ { diff --git a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.test.ts b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.test.ts index d7392a149f..06d5555286 100644 --- a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.test.ts +++ b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.test.ts @@ -11,6 +11,12 @@ vi.mock('vue-router', () => ({ RouterLink: vi.fn(), })); +vi.mock('@/stores/pushConnection.store', () => ({ + usePushConnectionStore: vi.fn().mockReturnValue({ + isConnected: true, + }), +})); + const initialState = { [STORES.SETTINGS]: { settings: { diff --git a/packages/editor-ui/src/components/PushConnectionTracker.test.ts b/packages/editor-ui/src/components/PushConnectionTracker.test.ts new file mode 100644 index 0000000000..5e6c37157c --- /dev/null +++ b/packages/editor-ui/src/components/PushConnectionTracker.test.ts @@ -0,0 +1,58 @@ +import { createComponentRenderer } from '@/__tests__/render'; +import PushConnectionTracker from '@/components/PushConnectionTracker.vue'; +import { STORES } from '@/constants'; +import { createTestingPinia } from '@pinia/testing'; +import { setActivePinia } from 'pinia'; + +let isConnected = true; +let isConnectionRequested = true; + +vi.mock('@/stores/pushConnection.store', () => { + return { + usePushConnectionStore: vi.fn(() => ({ + isConnected, + isConnectionRequested, + })), + }; +}); + +describe('PushConnectionTracker', () => { + const render = () => { + const pinia = createTestingPinia({ + stubActions: false, + initialState: { + [STORES.PUSH]: { + isConnected, + isConnectionRequested, + }, + }, + }); + setActivePinia(pinia); + + return createComponentRenderer(PushConnectionTracker)(); + }; + + it('should not render error when connected and connection requested', () => { + isConnected = true; + isConnectionRequested = true; + const { container } = render(); + + expect(container).toMatchSnapshot(); + }); + + it('should render error when disconnected and connection requested', () => { + isConnected = false; + isConnectionRequested = true; + const { container } = render(); + + expect(container).toMatchSnapshot(); + }); + + it('should not render error when connected and connection not requested', () => { + isConnected = true; + isConnectionRequested = false; + const { container } = render(); + + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/editor-ui/src/components/PushConnectionTracker.vue b/packages/editor-ui/src/components/PushConnectionTracker.vue index 66175c2af4..0ce23634b0 100644 --- a/packages/editor-ui/src/components/PushConnectionTracker.vue +++ b/packages/editor-ui/src/components/PushConnectionTracker.vue @@ -1,16 +1,23 @@