diff --git a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts index 4c554002c..3015680f7 100644 --- a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts +++ b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts @@ -17,7 +17,7 @@ export class WorkflowVisualizerPage { readonly deactivateWorkflowButton: Locator; readonly addTriggerButton: Locator; readonly commandMenu: Locator; - readonly workflowNameButton: Locator; + readonly workflowNameLabel: Locator; readonly triggerNode: Locator; readonly background: Locator; readonly useAsDraftButton: Locator; @@ -68,9 +68,9 @@ export class WorkflowVisualizerPage { }); this.addTriggerButton = page.getByText('Add a Trigger'); this.commandMenu = page.getByTestId('command-menu'); - this.workflowNameButton = page.getByRole('button', { - name: this.workflowName, - }); + this.workflowNameLabel = page + .getByTestId('top-bar-title') + .getByText(this.workflowName); this.triggerNode = this.#page.getByTestId('rf__node-trigger'); this.background = page.locator('.react-flow__pane'); this.useAsDraftButton = page.getByRole('button', { name: 'Use as draft' }); @@ -100,7 +100,7 @@ export class WorkflowVisualizerPage { } async waitForWorkflowVisualizerLoad() { - await expect(this.workflowNameButton).toBeVisible(); + await expect(this.workflowNameLabel).toBeVisible(); } async goToWorkflowVisualizerPage() { @@ -132,8 +132,10 @@ export class WorkflowVisualizerPage { const actionToCreateOption = this.commandMenu.getByText(actionName); - const [createWorkflowStepResponse] = await Promise.all([ - this.#page.waitForResponse((response) => { + await actionToCreateOption.click(); + + const createWorkflowStepResponse = await this.#page.waitForResponse( + (response) => { if (!response.url().endsWith('/graphql')) { return false; } @@ -141,19 +143,14 @@ export class WorkflowVisualizerPage { const requestBody = response.request().postDataJSON(); return requestBody.operationName === 'CreateWorkflowVersionStep'; - }), + }, + ); - actionToCreateOption.click(), - ]); const createWorkflowStepResponseBody = await createWorkflowStepResponse.json(); const createdStepId = createWorkflowStepResponseBody.data.createWorkflowVersionStep.id; - await expect( - this.#page.getByTestId('command-menu').getByRole('textbox').first(), - ).toHaveValue(createdActionName); - const createdActionNode = this.#page .locator('.react-flow__node.selected') .getByText(createdActionName); @@ -231,6 +228,14 @@ export class WorkflowVisualizerPage { this.getDeleteNodeButton(this.triggerNode).click(), ]); } + + async closeSidePanel() { + const closeButton = this.#page.getByTestId( + 'page-header-close-command-menu-button', + ); + + await closeButton.click(); + } } export const test = base.extend<{ workflowVisualizer: WorkflowVisualizerPage }>( diff --git a/packages/twenty-e2e-testing/tests/demo/demo_basic.spec.ts b/packages/twenty-e2e-testing/tests/demo/demo_basic.spec.ts deleted file mode 100644 index fe5f62513..000000000 --- a/packages/twenty-e2e-testing/tests/demo/demo_basic.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { expect, test } from '@playwright/test'; - -test.fixme( - 'Check if demo account is working properly @demo-only', - async ({ page }) => { - await page.goto('https://app.twenty-next.com/'); - await page.getByRole('button', { name: 'Continue with Email' }).click(); - await page.getByRole('button', { name: 'Continue', exact: true }).click(); - await page.getByRole('button', { name: 'Sign in' }).click(); - await expect(page.getByText('Welcome to Twenty')).not.toBeVisible(); - await page.waitForTimeout(5000); - await expect(page.getByText('Server’s on a coffee break')).not.toBeVisible({ - timeout: 5000, - }); - }, -); diff --git a/packages/twenty-e2e-testing/tests/workflow-creation.spec.ts b/packages/twenty-e2e-testing/tests/workflow-creation.spec.ts index 047ca15d8..86f016337 100644 --- a/packages/twenty-e2e-testing/tests/workflow-creation.spec.ts +++ b/packages/twenty-e2e-testing/tests/workflow-creation.spec.ts @@ -23,10 +23,13 @@ test('Create workflow', async ({ page }) => { return requestBody.operationName === 'CreateOneWorkflow'; }), - await createWorkflowButton.click(), + createWorkflowButton.click(), ]); - const nameInput = page.getByRole('textbox'); + const recordName = page.getByTestId('top-bar-title').getByTestId('tooltip'); + await recordName.click(); + + const nameInput = page.getByTestId('top-bar-title').getByRole('textbox'); await nameInput.fill(NEW_WORKFLOW_NAME); const workflowDiagramContainer = page.locator('.react-flow__renderer'); @@ -36,7 +39,9 @@ test('Create workflow', async ({ page }) => { const newWorkflowId = body.data.createWorkflow.id; try { - const workflowName = page.getByRole('button', { name: NEW_WORKFLOW_NAME }); + const workflowName = page + .getByTestId('top-bar-title') + .getByText(NEW_WORKFLOW_NAME); await expect(workflowName).toBeVisible(); 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 57c4d033b..307e76c01 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 @@ -86,90 +86,92 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => { await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); }); -test.fixme( - 'Use an old version as draft while having a pending draft version', - async ({ workflowVisualizer, page }) => { - await workflowVisualizer.createInitialTrigger('record-created'); +test('Use an old version as draft while having a pending draft version', async ({ + workflowVisualizer, + page, +}) => { + await workflowVisualizer.createInitialTrigger('record-created'); - await workflowVisualizer.createStep('create-record'); + await workflowVisualizer.createStep('create-record'); - await workflowVisualizer.background.click(); + await workflowVisualizer.background.click(); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Active'), + await Promise.all([ + expect(workflowVisualizer.workflowStatus).toHaveText('Active'), - workflowVisualizer.activateWorkflowButton.click(), - ]); + workflowVisualizer.activateWorkflowButton.click(), + ]); - await Promise.all([ - expect(workflowVisualizer.workflowStatus).toHaveText('Draft'), + await Promise.all([ + expect(workflowVisualizer.workflowStatus).toHaveText('Draft'), - workflowVisualizer.createStep('delete-record'), - ]); + workflowVisualizer.createStep('delete-record'), + ]); - await expect(workflowVisualizer.triggerNode).toContainText( - 'Record is Created', - ); - await expect(workflowVisualizer.getAllStepNodes()).toContainText([ - 'Create Record', - 'Delete Record', - ]); - await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(2); - await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible(); + await expect(workflowVisualizer.triggerNode).toContainText( + 'Record is Created', + ); + await expect(workflowVisualizer.getAllStepNodes()).toContainText([ + 'Create Record', + 'Delete Record', + ]); + await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(2); + await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible(); - const workflowsLink = page.getByRole('link', { name: 'Workflows' }); - await workflowsLink.click(); + await workflowVisualizer.closeSidePanel(); - const recordTableRowForWorkflow = page.getByRole('row', { - name: workflowVisualizer.workflowName, - }); + const workflowsLink = page.getByRole('link', { name: 'Workflows' }); + await workflowsLink.click(); - const linkToWorkflow = recordTableRowForWorkflow.getByRole('link', { - name: workflowVisualizer.workflowName, - }); - expect(linkToWorkflow).toBeVisible(); + const recordTableRowForWorkflow = page.getByRole('row', { + name: workflowVisualizer.workflowName, + }); - const linkToFirstWorkflowVersion = recordTableRowForWorkflow.getByRole( - 'link', - { - name: 'v1', - }, - ); + const linkToWorkflow = recordTableRowForWorkflow.getByRole('link', { + name: workflowVisualizer.workflowName, + }); + expect(linkToWorkflow).toBeVisible(); - await linkToFirstWorkflowVersion.click(); + const linkToFirstWorkflowVersion = recordTableRowForWorkflow.getByRole( + 'link', + { + name: 'v1', + }, + ); - await expect(workflowVisualizer.workflowStatus).toHaveText('Active'); - await expect(workflowVisualizer.useAsDraftButton).toBeVisible(); - await expect(workflowVisualizer.triggerNode).toContainText( - 'Record is Created', - ); - await expect(workflowVisualizer.getAllStepNodes()).toContainText([ - 'Create Record', - ]); - await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); + await linkToFirstWorkflowVersion.click(); - await Promise.all([ - expect(workflowVisualizer.overrideDraftButton).toBeVisible(), + await expect(workflowVisualizer.workflowStatus).toHaveText('Active'); + await expect(workflowVisualizer.useAsDraftButton).toBeVisible(); + await expect(workflowVisualizer.triggerNode).toContainText( + 'Record is Created', + ); + await expect(workflowVisualizer.getAllStepNodes()).toContainText([ + 'Create Record', + ]); + await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); - workflowVisualizer.useAsDraftButton.click(), - ]); + await Promise.all([ + expect(workflowVisualizer.overrideDraftButton).toBeVisible(), - await Promise.all([ - page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`), + workflowVisualizer.useAsDraftButton.click(), + ]); - workflowVisualizer.overrideDraftButton.click(), - ]); + await Promise.all([ + page.waitForURL(`/object/workflow/${workflowVisualizer.workflowId}`), - await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); - await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible(); - await expect(workflowVisualizer.triggerNode).toContainText( - 'Record is Created', - ); - await expect(workflowVisualizer.getAllStepNodes()).toContainText([ - 'Create Record', - ]); - await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); - await expect(workflowVisualizer.activateWorkflowButton).toBeVisible(); - await expect(workflowVisualizer.discardDraftButton).toBeVisible(); - }, -); + workflowVisualizer.overrideDraftButton.click(), + ]); + + await expect(workflowVisualizer.workflowStatus).toHaveText('Draft'); + await expect(workflowVisualizer.useAsDraftButton).not.toBeVisible(); + await expect(workflowVisualizer.triggerNode).toContainText( + 'Record is Created', + ); + await expect(workflowVisualizer.getAllStepNodes()).toContainText([ + 'Create Record', + ]); + await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1); + await expect(workflowVisualizer.activateWorkflowButton).toBeVisible(); + await expect(workflowVisualizer.discardDraftButton).toBeVisible(); +});