diff --git a/cypress/e2e/7-workflow-actions.cy.ts b/cypress/e2e/7-workflow-actions.cy.ts index 798829fb2a..b3b8d7ae28 100644 --- a/cypress/e2e/7-workflow-actions.cy.ts +++ b/cypress/e2e/7-workflow-actions.cy.ts @@ -3,6 +3,7 @@ import { WorkflowPage as WorkflowPageClass } from '../pages/workflow'; const NEW_WORKFLOW_NAME = 'Something else'; const TEST_WF_TAGS = ['Tag 1', 'Tag 2', 'Tag 3']; +const IMPORT_WORKFLOW_URL = 'https://www.jsonkeeper.com/b/FNB0#.json'; const WorkflowPage = new WorkflowPageClass(); @@ -110,4 +111,57 @@ describe('Workflow Actions', () => { }); }); + it('should import workflow from url', () => { + WorkflowPage.getters.workflowMenu().should('be.visible'); + WorkflowPage.getters.workflowMenu().click(); + WorkflowPage.getters.workflowMenuItemImportFromURLItem().should('be.visible'); + WorkflowPage.getters.workflowMenuItemImportFromURLItem().click(); + cy.get('.el-message-box').should('be.visible'); + cy.get('.el-message-box').find('input').type(IMPORT_WORKFLOW_URL); + cy.get('body').type('{enter}'); + cy.waitForLoad(); + WorkflowPage.actions.zoomToFit(); + WorkflowPage.getters.canvasNodes().should('have.length', 2); + WorkflowPage.getters.nodeConnections().should('have.length', 1); + }); + + it('should import workflow from file', () => { + WorkflowPage.getters.workflowImportInput().selectFile( + 'cypress/fixtures/Test_workflow-actions_paste-data.json', + { force: true } + ); + cy.waitForLoad(); + WorkflowPage.actions.zoomToFit(); + WorkflowPage.getters.canvasNodes().should('have.length', 2); + WorkflowPage.getters.nodeConnections().should('have.length', 1); + }); + + it('should update workflow settings', () => { + // Open settings dialog + WorkflowPage.actions.saveWorkflowOnButtonClick(); + WorkflowPage.getters.workflowMenu().should('be.visible'); + WorkflowPage.getters.workflowMenu().click(); + WorkflowPage.getters.workflowMenuItemSettings().should('be.visible'); + WorkflowPage.getters.workflowMenuItemSettings().click(); + // Change all settings + WorkflowPage.getters.workflowSettingsErrorWorkflowSelect().find('li').should('have.length', 2); + WorkflowPage.getters.workflowSettingsErrorWorkflowSelect().find('li').last().click({ force: true }); + WorkflowPage.getters.workflowSettingsTimezoneSelect().find('li').should('exist'); + WorkflowPage.getters.workflowSettingsTimezoneSelect().find('li').eq(1).click({ force: true }); + WorkflowPage.getters.workflowSettingsSaveFiledExecutionsSelect().find('li').should('have.length', 3); + WorkflowPage.getters.workflowSettingsSaveFiledExecutionsSelect().find('li').last().click({ force: true }); + WorkflowPage.getters.workflowSettingsSaveSuccessExecutionsSelect().find('li').should('have.length', 3); + WorkflowPage.getters.workflowSettingsSaveSuccessExecutionsSelect().find('li').last().click({ force: true }); + WorkflowPage.getters.workflowSettingsSaveManualExecutionsSelect().find('li').should('have.length', 3); + WorkflowPage.getters.workflowSettingsSaveManualExecutionsSelect().find('li').last().click({ force: true }); + WorkflowPage.getters.workflowSettingsSaveExecutionProgressSelect().find('li').should('have.length', 3); + WorkflowPage.getters.workflowSettingsSaveExecutionProgressSelect().find('li').last().click({ force: true }); + WorkflowPage.getters.workflowSettingsTimeoutWorkflowSwitch().click(); + WorkflowPage.getters.workflowSettingsTimeoutForm().find('input').first().type('1'); + // Save settings + WorkflowPage.getters.workflowSettingsSaveButton().click(); + WorkflowPage.getters.workflowSettingsModal().should('not.exist'); + WorkflowPage.getters.successToast().should('exist'); + }); + }); diff --git a/cypress/pages/workflow.ts b/cypress/pages/workflow.ts index 5d13bc64bc..e4653ebf7b 100644 --- a/cypress/pages/workflow.ts +++ b/cypress/pages/workflow.ts @@ -40,6 +40,24 @@ export class WorkflowPage extends BasePage { disabledNodes: () => cy.get('.node-box.disabled'), nodeNameContainerNDV: () => cy.getByTestId('node-title-container'), nodeRenameInput: () => cy.getByTestId('node-rename-input'), + // Workflow menu items + workflowMenuItemDuplicate: () => cy.getByTestId('workflow-menu-item-duplicate'), + workflowMenuItemDownload: () => cy.getByTestId('workflow-menu-item-download'), + workflowMenuItemImportFromURLItem: () => cy.getByTestId('workflow-menu-item-import-from-url'), + workflowMenuItemImportFromFile: () => cy.getByTestId('workflow-menu-item-import-from-file'), + workflowMenuItemSettings: () => cy.getByTestId('workflow-menu-item-settings'), + workflowMenuItemDelete: () => cy.getByTestId('workflow-menu-item-delete'), + // Workflow settings dialog elements + workflowSettingsModal: () => cy.getByTestId('workflow-settings-dialog'), + workflowSettingsErrorWorkflowSelect: () => cy.getByTestId('workflow-settings-error-workflow'), + workflowSettingsTimezoneSelect: () => cy.getByTestId('workflow-settings-timezone'), + workflowSettingsSaveFiledExecutionsSelect: () => cy.getByTestId('workflow-settings-save-failed-executions'), + workflowSettingsSaveSuccessExecutionsSelect: () => cy.getByTestId('workflow-settings-save-success-executions'), + workflowSettingsSaveManualExecutionsSelect: () => cy.getByTestId('workflow-settings-save-manual-executions'), + workflowSettingsSaveExecutionProgressSelect: () => cy.getByTestId('workflow-settings-save-execution-progress'), + workflowSettingsTimeoutWorkflowSwitch: () => cy.getByTestId('workflow-settings-timeout-workflow'), + workflowSettingsTimeoutForm: () => cy.getByTestId('workflow-settings-timeout-form'), + workflowSettingsSaveButton: () => cy.getByTestId('workflow-settings-save-button').find('button'), }; actions = { visit: () => { diff --git a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue index b87ea83b1c..8c31dbe3d4 100644 --- a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue +++ b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue @@ -24,6 +24,7 @@ [$style.hasCustomStyling]: item.customClass !== undefined, [item.customClass]: item.customClass !== undefined, }" + :data-test-id="`workflow-menu-item-${item.id}`" > diff --git a/packages/editor-ui/src/components/Node.vue b/packages/editor-ui/src/components/Node.vue index fb3ad085b6..8323857011 100644 --- a/packages/editor-ui/src/components/Node.vue +++ b/packages/editor-ui/src/components/Node.vue @@ -87,7 +87,7 @@
-
+