diff --git a/packages/testing/playwright/composables/NodeDetailsViewComposer.ts b/packages/testing/playwright/composables/NodeDetailsViewComposer.ts index a3fd9246744..60ac1cec8b0 100644 --- a/packages/testing/playwright/composables/NodeDetailsViewComposer.ts +++ b/packages/testing/playwright/composables/NodeDetailsViewComposer.ts @@ -18,7 +18,7 @@ export class NodeDetailsViewComposer { const items = this.n8n.page.getByTestId('rlc-item'); const targetItem = items.filter({ hasText: workflowName }); - await targetItem.click(); + await targetItem.first().click(); } /** diff --git a/packages/testing/playwright/tests/ui/44-routing.spec.ts b/packages/testing/playwright/tests/ui/44-routing.spec.ts index 65bcc62230c..60d22c535fd 100644 --- a/packages/testing/playwright/tests/ui/44-routing.spec.ts +++ b/packages/testing/playwright/tests/ui/44-routing.spec.ts @@ -1,14 +1,9 @@ import { EDIT_FIELDS_SET_NODE_NAME } from '../../config/constants'; import { test, expect } from '../../fixtures/base'; -test.describe('Routing @db:reset', () => { +test.describe('Routing', () => { test('should ask to save unsaved changes before leaving route', async ({ n8n }) => { - await n8n.goHome(); - await expect(n8n.workflows.getNewWorkflowCard()).toBeVisible(); - await n8n.workflows.clickNewWorkflowCard(); - - await n8n.canvas.importWorkflow('Test_workflow_1.json', 'Test Workflow'); - + await n8n.start.fromImportedWorkflow('Test_workflow_1.json'); await n8n.canvas.addNode(EDIT_FIELDS_SET_NODE_NAME, { closeNDV: true }); await n8n.sideBar.clickHomeButton(); @@ -40,10 +35,7 @@ test.describe('Routing @db:reset', () => { }); test('should correct route when opening and closing NDV', async ({ n8n }) => { - await n8n.start.fromBlankCanvas(); - await n8n.canvas.clickSaveWorkflowButton(); - - await n8n.canvas.importWorkflow('Test_workflow_1.json', 'Test Workflow'); + await n8n.start.fromImportedWorkflow('Test_workflow_1.json'); const baselineUrl = n8n.page.url(); @@ -57,10 +49,7 @@ test.describe('Routing @db:reset', () => { }); test('should open ndv via URL', async ({ n8n }) => { - await n8n.start.fromBlankCanvas(); - await n8n.canvas.clickSaveWorkflowButton(); - - await n8n.canvas.importWorkflow('Test_workflow_1.json', 'Test Workflow'); + await n8n.start.fromImportedWorkflow('Test_workflow_1.json'); await n8n.canvas.addNode(EDIT_FIELDS_SET_NODE_NAME, { closeNDV: false }); const ndvUrl = n8n.page.url(); @@ -78,10 +67,7 @@ test.describe('Routing @db:reset', () => { test('should open show warning and drop nodeId from URL if it contained an unknown nodeId', async ({ n8n, }) => { - await n8n.start.fromBlankCanvas(); - await n8n.canvas.clickSaveWorkflowButton(); - - await n8n.canvas.importWorkflow('Test_workflow_1.json', 'Test Workflow'); + await n8n.start.fromImportedWorkflow('Test_workflow_1.json'); await n8n.canvas.addNode(EDIT_FIELDS_SET_NODE_NAME, { closeNDV: false }); const ndvUrl = n8n.page.url(); diff --git a/packages/testing/playwright/tests/ui/45-workflow-selector-parameter.spec.ts b/packages/testing/playwright/tests/ui/45-workflow-selector-parameter.spec.ts index 4dfeca995fb..6b920bf2fa9 100644 --- a/packages/testing/playwright/tests/ui/45-workflow-selector-parameter.spec.ts +++ b/packages/testing/playwright/tests/ui/45-workflow-selector-parameter.spec.ts @@ -4,9 +4,9 @@ import { n8nPage } from '../../pages/n8nPage'; const EXECUTE_WORKFLOW_NODE_NAME = 'Execute Sub-workflow'; -test.describe('Workflow Selector Parameter @db:reset', () => { +test.describe('Workflow Selector Parameter', () => { test.beforeEach(async ({ n8n }) => { - await n8n.start.fromNewProjectBlankCanvas(); + const projectId = await n8n.start.fromNewProjectBlankCanvas(); const subWorkflows = [ { file: 'Test_Subworkflow_Get_Weather.json', name: 'Get_Weather' }, @@ -14,20 +14,13 @@ test.describe('Workflow Selector Parameter @db:reset', () => { ]; for (const { file } of subWorkflows) { - await n8n.api.workflows.importWorkflowFromFile(file); + await n8n.api.workflows.createInProject(projectId, { name: file }); } await n8n.canvas.addNode(MANUAL_TRIGGER_NODE_NAME); await n8n.canvas.addNode(EXECUTE_WORKFLOW_NODE_NAME, { action: 'Execute A Sub Workflow' }); }); - test('should render sub-workflows list', async ({ n8n }) => { - await n8n.ndv.openResourceLocator('workflowId'); - - await expect(n8n.ndv.getResourceLocatorItems()).toHaveCount(2); - await expect(n8n.ndv.getAddResourceItem()).toHaveCount(1); - }); - test('should show required parameter warning', async ({ n8n }) => { await n8n.ndv.openResourceLocator('workflowId'); await expect(n8n.ndv.getParameterInputIssues()).toBeVisible(); @@ -35,15 +28,18 @@ test.describe('Workflow Selector Parameter @db:reset', () => { test('should filter sub-workflows list', async ({ n8n }) => { await n8n.ndvComposer.filterWorkflowList('workflowId', 'Weather'); - await expect(n8n.ndv.getResourceLocatorItems()).toHaveCount(1); + + const items = n8n.ndv.getResourceLocatorItems(); + + await expect(items.filter({ hasText: 'Search DB' })).toHaveCount(0); await n8n.ndvComposer.selectFirstFilteredWorkflow(); const inputField = n8n.ndv.getResourceLocatorInput('workflowId').locator('input'); - await expect(inputField).toHaveValue(/Get Weather.*Test/); + await expect(inputField).toHaveValue(/Get_Weather/); }); test('should render sub-workflow links correctly', async ({ n8n }) => { - await n8n.ndvComposer.selectWorkflowFromList('workflowId', 'Search DB'); + await n8n.ndvComposer.selectWorkflowFromList('workflowId', 'Search_DB'); const link = n8n.ndv.getResourceLocatorInput('workflowId').locator('a'); await expect(link).toBeVisible(); @@ -52,7 +48,7 @@ test.describe('Workflow Selector Parameter @db:reset', () => { }); test('should switch to ID mode on expression', async ({ n8n }) => { - await n8n.ndvComposer.selectWorkflowFromList('workflowId', 'Search DB'); + await n8n.ndvComposer.selectWorkflowFromList('workflowId', 'Search_DB'); const modeSelector = n8n.ndv.getResourceLocatorModeSelector('workflowId').locator('input'); await expect(modeSelector).toHaveValue('From list');