Skip to content

Commit

Permalink
fix(editor): Prevent error from showing-up when duplicating unsaved w…
Browse files Browse the repository at this point in the history
…orkflow (n8n-io#5833)

* fix(editor): Prevent error from showing-up when duplicating unsaved workflow

* Add unsaved workflow duplicate test
  • Loading branch information
OlegIvaniv authored and believe-Mahesh committed Apr 4, 2023
1 parent e3b17d5 commit 7ed6ac7
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 34 deletions.
71 changes: 41 additions & 30 deletions cypress/e2e/7-workflow-actions.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,37 +190,48 @@ describe('Workflow Actions', () => {
cy.url().should('include', '/workflow/new');
});

it('should duplicate workflow', () => {
// Stub window.open so new tab is not getting opened
cy.window().then((win) => {
cy.stub(win, 'open').as('open');
describe('duplicate workflow', () => {
function duplicateWorkflow() {
WorkflowPage.getters.workflowMenu().should('be.visible');
WorkflowPage.getters.workflowMenu().click();
WorkflowPage.getters.workflowMenuItemDuplicate().click();
WorkflowPage.getters.duplicateWorkflowModal().should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('input').first().should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('input').first().type('{selectall}');
WorkflowPage.getters
.duplicateWorkflowModal()
.find('input')
.first()
.type(DUPLICATE_WORKFLOW_NAME);
WorkflowPage.getters
.duplicateWorkflowModal()
.find('.el-select__tags input')
.type(DUPLICATE_WORKFLOW_TAG);
WorkflowPage.getters.duplicateWorkflowModal().find('.el-select__tags input').type('{enter}');
WorkflowPage.getters.duplicateWorkflowModal().find('.el-select__tags input').type('{enter}');
WorkflowPage.getters
.duplicateWorkflowModal()
.find('button')
.contains('Duplicate')
.should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('button').contains('Duplicate').click();
WorkflowPage.getters.errorToast().should('not.exist');
}

beforeEach(() => {
// Stub window.open so new tab is not getting opened
cy.window().then((win) => {
cy.stub(win, 'open').as('open');
});
WorkflowPage.actions.addNodeToCanvas(MANUAL_TRIGGER_NODE_NAME);
});

WorkflowPage.actions.addNodeToCanvas(MANUAL_TRIGGER_NODE_NAME);
WorkflowPage.actions.saveWorkflowOnButtonClick();
WorkflowPage.getters.workflowMenu().should('be.visible');
WorkflowPage.getters.workflowMenu().click();
WorkflowPage.getters.workflowMenuItemDuplicate().click();
WorkflowPage.getters.duplicateWorkflowModal().should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('input').first().should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('input').first().type('{selectall}');
WorkflowPage.getters
.duplicateWorkflowModal()
.find('input')
.first()
.type(DUPLICATE_WORKFLOW_NAME);
WorkflowPage.getters
.duplicateWorkflowModal()
.find('.el-select__tags input')
.type(DUPLICATE_WORKFLOW_TAG);
WorkflowPage.getters.duplicateWorkflowModal().find('.el-select__tags input').type('{enter}');
WorkflowPage.getters.duplicateWorkflowModal().find('.el-select__tags input').type('{enter}');
WorkflowPage.getters
.duplicateWorkflowModal()
.find('button')
.contains('Duplicate')
.should('be.visible');
WorkflowPage.getters.duplicateWorkflowModal().find('button').contains('Duplicate').click();
WorkflowPage.getters.errorToast().should('not.exist');
it('should duplicate unsaved workflow', () => {
duplicateWorkflow();
});
it('should duplicate saved workflow', () => {
WorkflowPage.actions.saveWorkflowOnButtonClick();
duplicateWorkflow();
});
});
});
16 changes: 12 additions & 4 deletions packages/editor-ui/src/components/DuplicateWorkflowDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,18 @@ export default mixins(showMessage, workflowHelpers, restApi).extend({
computed: {
...mapStores(useUsersStore, useSettingsStore, useWorkflowsStore),
workflowPermissions(): IPermissions {
return getWorkflowPermissions(
this.usersStore.currentUser,
this.workflowsStore.getWorkflowById(this.data.id),
);
const isEmptyWorkflow = this.data.id === PLACEHOLDER_EMPTY_WORKFLOW_ID;
const isCurrentWorkflowEmpty =
this.workflowsStore.workflow.id === PLACEHOLDER_EMPTY_WORKFLOW_ID;
// If the workflow to be duplicated is empty and the current workflow is also empty
// we need to use the current workflow to get the permissions
const currentWorkflow =
isEmptyWorkflow && isCurrentWorkflowEmpty
? this.workflowsStore.workflow
: this.workflowsStore.getWorkflowById(this.data.id);
return getWorkflowPermissions(this.usersStore.currentUser, currentWorkflow);
},
},
watch: {
Expand Down

0 comments on commit 7ed6ac7

Please sign in to comment.