From 19f46a00915eb923cbeaf3c12d72c1727bacdde9 Mon Sep 17 00:00:00 2001 From: Baptiste Devessier Date: Tue, 29 Apr 2025 15:51:59 +0200 Subject: [PATCH] Fix e2e tests (#11792) --- .../lib/fixtures/blank-workflow.ts | 75 ++++++++++++++----- .../tests/workflow-run.spec.ts | 21 +----- .../tests/workflow-use-as-draft.spec.ts | 56 ++++++-------- 3 files changed, 79 insertions(+), 73 deletions(-) diff --git a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts index 9db1cc4b5..cc49feb24 100644 --- a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts +++ b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts @@ -258,29 +258,64 @@ export class WorkflowVisualizerPage { await expect(this.#page.getByTestId('command-menu')).not.toBeVisible(); } + + async goToWorkflowsIndexPage() { + await this.#page.goto('/objects/workflows'); + } + + async setWorkflowsOpenInMode(mode: 'side-panel' | 'record-page') { + const recordTableOptionsButton = this.#page.getByText('Options'); + await recordTableOptionsButton.click(); + + const layoutButton = this.#page.getByText('Layout'); + await layoutButton.click(); + + const openInButton = this.#page.getByText('Open in'); + await openInButton.click(); + + if (mode === 'side-panel') { + const openInSidePanelOption = this.#page.getByRole('option', { + name: 'Side Panel', + }); + + await openInSidePanelOption.click(); + } else { + const openInRecordPageOption = this.#page.getByRole('option', { + name: 'Record Page', + }); + + await openInRecordPageOption.click(); + } + + // Close the dropdown + await recordTableOptionsButton.click(); + } } -export const test = base.extend<{ workflowVisualizer: WorkflowVisualizerPage }>( - { - workflowVisualizer: async ({ page }, use) => { - const workflowVisualizer = new WorkflowVisualizerPage({ - page, - workflowName: 'Test Workflow', - }); +export const test = base.extend<{ + workflowVisualizer: WorkflowVisualizerPage; +}>({ + workflowVisualizer: async ({ page }, use) => { + const workflowVisualizer = new WorkflowVisualizerPage({ + page, + workflowName: 'Test Workflow', + }); - await workflowVisualizer.createOneWorkflow(); - await workflowVisualizer.goToWorkflowVisualizerPage(); + await workflowVisualizer.createOneWorkflow(); + await workflowVisualizer.goToWorkflowVisualizerPage(); - await use(workflowVisualizer); + await use(workflowVisualizer); - await deleteWorkflow({ - page, - workflowId: workflowVisualizer.workflowId, - }); - await destroyWorkflow({ - page, - workflowId: workflowVisualizer.workflowId, - }); - }, + await deleteWorkflow({ + page, + workflowId: workflowVisualizer.workflowId, + }); + await destroyWorkflow({ + page, + workflowId: workflowVisualizer.workflowId, + }); + + await workflowVisualizer.goToWorkflowsIndexPage(); + await workflowVisualizer.setWorkflowsOpenInMode('record-page'); }, -); +}); diff --git a/packages/twenty-e2e-testing/tests/workflow-run.spec.ts b/packages/twenty-e2e-testing/tests/workflow-run.spec.ts index 3473a8fc8..fd7a3a323 100644 --- a/packages/twenty-e2e-testing/tests/workflow-run.spec.ts +++ b/packages/twenty-e2e-testing/tests/workflow-run.spec.ts @@ -57,7 +57,8 @@ test('The workflow run visualizer shows the executed draft version without the l ); }); -test('Workflow Runs with a pending form step can be opened in the side panel and then in full screen', async ({ +// FIXME: Documented bug. See https://github.com/twentyhq/core-team-issues/issues/921 +test.fail('Workflow Runs with a pending form step can be opened in the side panel and then in full screen', async ({ workflowVisualizer, page, }) => { @@ -100,23 +101,7 @@ test('Workflow Runs with a pending form step can be opened in the side panel and await expect(workflowRunNameCell).toBeVisible(); - const recordTableOptionsButton = page.getByText('Options'); - - await recordTableOptionsButton.click(); - - const layoutButton = page.getByText('Layout'); - - await layoutButton.click(); - - const openInButton = page.getByText('Open in'); - - await openInButton.click(); - - const openInSidePanelOption = page.getByRole('option', { - name: 'Side panel', - }); - - await openInSidePanelOption.click(); + await workflowVisualizer.setWorkflowsOpenInMode('side-panel'); // 1. Exit the dropdown await workflowRunNameCell.click(); diff --git a/packages/twenty-e2e-testing/tests/workflow-use-as-draft.spec.ts b/packages/twenty-e2e-testing/tests/workflow-use-as-draft.spec.ts index 78b31f5dd..7915bdc25 100644 --- a/packages/twenty-e2e-testing/tests/workflow-use-as-draft.spec.ts +++ b/packages/twenty-e2e-testing/tests/workflow-use-as-draft.spec.ts @@ -8,25 +8,19 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => { await workflowVisualizer.background.click(); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Active'), + await workflowVisualizer.activateWorkflowButton.click(); - workflowVisualizer.activateWorkflowButton.click(), - ]); + await expect(workflowVisualizer.workflowStatus).toHaveText('Active'); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Draft'), + await workflowVisualizer.createStep('delete-record'); - workflowVisualizer.createStep('delete-record'), - ]); + await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); - await workflowVisualizer.background.click(); + await workflowVisualizer.closeSidePanel(); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Active'), + await workflowVisualizer.activateWorkflowButton.click(); - workflowVisualizer.activateWorkflowButton.click(), - ]); + await expect(workflowVisualizer.workflowStatus).toHaveText('Active'); await expect(workflowVisualizer.triggerNode).toContainText( 'Record is Created', @@ -41,6 +35,8 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => { const workflowsLink = page.getByRole('link', { name: 'Workflows' }); await workflowsLink.click(); + await workflowVisualizer.setWorkflowsOpenInMode('record-page'); + const recordTableRowForWorkflow = page.getByRole('row', { name: workflowVisualizer.workflowName, }); @@ -48,7 +44,7 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => { const linkToWorkflow = recordTableRowForWorkflow.getByRole('link', { name: workflowVisualizer.workflowName, }); - expect(linkToWorkflow).toBeVisible(); + await expect(linkToWorkflow).toBeVisible(); const linkToFirstWorkflowVersion = recordTableRowForWorkflow.getByRole( 'link', @@ -69,11 +65,9 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => { ]); await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); - await Promise.all([ - page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`), + await workflowVisualizer.useAsDraftButton.click(); - workflowVisualizer.useAsDraftButton.click(), - ]); + await page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`); await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible(); @@ -96,17 +90,13 @@ test('Use an old version as draft while having a pending draft version', async ( await workflowVisualizer.background.click(); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Active'), + await workflowVisualizer.activateWorkflowButton.click(); - workflowVisualizer.activateWorkflowButton.click(), - ]); + await expect(workflowVisualizer.workflowStatus).toHaveText('Active'); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Draft'), + await workflowVisualizer.createStep('delete-record'); - workflowVisualizer.createStep('delete-record'), - ]); + await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); await expect(workflowVisualizer.triggerNode).toContainText( 'Record is Created', @@ -130,7 +120,7 @@ test('Use an old version as draft while having a pending draft version', async ( const linkToWorkflow = recordTableRowForWorkflow.getByRole('link', { name: workflowVisualizer.workflowName, }); - expect(linkToWorkflow).toBeVisible(); + await expect(linkToWorkflow).toBeVisible(); const linkToFirstWorkflowVersion = recordTableRowForWorkflow.getByRole( 'link', @@ -151,17 +141,13 @@ test('Use an old version as draft while having a pending draft version', async ( ]); await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); - await Promise.all([ - expect(workflowVisualizer.overrideDraftButton).toBeVisible(), + await workflowVisualizer.useAsDraftButton.click(); - workflowVisualizer.useAsDraftButton.click(), - ]); + await expect(workflowVisualizer.overrideDraftButton).toBeVisible(); - await Promise.all([ - page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`), + await workflowVisualizer.overrideDraftButton.click(); - workflowVisualizer.overrideDraftButton.click(), - ]); + await page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`); await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible();