fix(editor): Place duplicated WFs always to correct parent folders (#14713)

This commit is contained in:
Jaakko Husso
2025-04-22 15:41:12 +03:00
committed by GitHub
parent eaf6783eb5
commit 6c91e7e1b7
5 changed files with 105 additions and 3 deletions

View File

@@ -1,4 +1,4 @@
import { successToast } from '../pages/notifications';
import { errorToast, successToast } from '../pages/notifications';
/**
* Getters
@@ -47,6 +47,14 @@ export function getWorkflowCardActionItem(workflowName: string, actionName: stri
});
}
export function getDuplicateWorkflowModal() {
return cy.getByTestId('duplicate-modal');
}
export function getWorkflowMenu() {
return cy.getByTestId('workflow-menu');
}
export function getAddFolderButton() {
return cy.getByTestId('add-folder-button');
}
@@ -304,6 +312,24 @@ export function renameFolderFromCardActions(folderName: string, newName: string)
renameFolder(newName);
}
export function duplicateWorkflowFromCardActions(workflowName: string, duplicateName: string) {
getWorkflowCardActions(workflowName).click();
getWorkflowCardActionItem(workflowName, 'duplicate').click();
getDuplicateWorkflowModal().find('input').first().type('{selectall}');
getDuplicateWorkflowModal().find('input').first().type(duplicateName);
getDuplicateWorkflowModal().find('button').contains('Duplicate').click();
errorToast().should('not.exist');
}
export function duplicateWorkflowFromWorkflowPage(duplicateName: string) {
getWorkflowMenu().click();
cy.getByTestId('workflow-menu-item-duplicate').click();
getDuplicateWorkflowModal().find('input').first().type('{selectall}');
getDuplicateWorkflowModal().find('input').first().type(duplicateName);
getDuplicateWorkflowModal().find('button').contains('Duplicate').click();
errorToast().should('not.exist');
}
export function deleteEmptyFolderFromCardDropdown(folderName: string) {
cy.intercept('DELETE', '/rest/projects/**').as('deleteFolder');
getFolderCard(folderName).click();

View File

@@ -16,6 +16,8 @@ import {
deleteFolderWithContentsFromListDropdown,
dragAndDropToFolder,
dragAndDropToProjectRoot,
duplicateWorkflowFromCardActions,
duplicateWorkflowFromWorkflowPage,
getAddResourceDropdown,
getCurrentBreadcrumb,
getFolderCard,
@@ -538,6 +540,72 @@ describe('Folders', () => {
});
});
describe('Duplicate workflows', () => {
beforeEach(() => {
// Prevent the duplicated workflow from opening in a new tab
cy.window().then((win) => {
cy.stub(win, 'open').as('open');
});
});
it('should duplicate workflow within root folder from personal projects', () => {
goToPersonalProject();
createWorkflowFromProjectHeader(undefined, 'Duplicate Me From Root');
goToPersonalProject();
duplicateWorkflowFromCardActions('Duplicate Me From Root', 'Duplicate Me From Root (Copy)');
getWorkflowCard('Duplicate Me From Root (Copy)').should('exist');
});
it('should duplicate workflow within a folder from personal projects', () => {
goToPersonalProject();
createFolderFromProjectHeader('Parent folder for duplication');
getFolderCard('Parent folder for duplication').click();
createWorkflowFromProjectHeader(
'Parent folder for duplication',
'Duplicate Me From Personal',
);
goToPersonalProject();
getFolderCard('Parent folder for duplication').click();
duplicateWorkflowFromCardActions(
'Duplicate Me From Personal',
'Duplicate Me From Personal (Copy)',
);
getWorkflowCard('Duplicate Me From Personal (Copy)').should('exist');
});
it('should duplicate workflow within a folder from overview', () => {
goToPersonalProject();
getFolderCard('Parent folder for duplication').click();
createWorkflowFromProjectHeader(
'Parent folder for duplication',
'Duplicate Me From Overview',
);
getOverviewMenuItem().click();
duplicateWorkflowFromCardActions(
'Duplicate Me From Overview',
'Duplicate Me From Overview (Copy)',
);
getWorkflowCard('Duplicate Me From Overview (Copy)').should('exist');
goToPersonalProject();
getFolderCard('Parent folder for duplication').click();
getWorkflowCard('Duplicate Me From Overview (Copy)').should('exist');
});
it('should duplicate workflow within a folder from workflow', () => {
goToPersonalProject();
createFolderFromProjectHeader('Parent folder for duplication');
getFolderCard('Parent folder for duplication').click();
createWorkflowFromProjectHeader(
'Parent folder for duplication',
'Duplicate Me From Workflow',
);
duplicateWorkflowFromWorkflowPage('Duplicate Me From Workflow (Copy)');
goToPersonalProject();
getFolderCard('Parent folder for duplication').click();
getWorkflowCard('Duplicate Me From Workflow (Copy)').should('exist');
});
});
describe('Drag and drop', () => {
it('should drag and drop folders into folders', () => {
const PROJECT_NAME = 'Drag and Drop Test';

View File

@@ -17,7 +17,13 @@ import { useTelemetry } from '@/composables/useTelemetry';
const props = defineProps<{
modalName: string;
isActive: boolean;
data: { tags: string[]; id: string; name: string; externalEventBus?: EventBus };
data: {
tags: string[];
id: string;
name: string;
externalEventBus?: EventBus;
parentFolderId?: string;
};
}>();
const router = useRouter();
@@ -72,7 +78,7 @@ const save = async (): Promise<void> => {
return;
}
const parentFolderId = router.currentRoute.value.params.folderId as string | undefined;
const parentFolderId = props.data.parentFolderId;
const currentWorkflowId = props.data.id;
isSaving.value = true;

View File

@@ -408,6 +408,7 @@ async function onWorkflowMenuSelect(action: WORKFLOW_MENU_ACTIONS): Promise<void
id: props.id,
name: props.name,
tags: props.tags,
parentFolderId: currentFolder?.value?.id,
},
});
break;

View File

@@ -220,6 +220,7 @@ async function onAction(action: string) {
typeof tag !== 'string' && 'id' in tag ? tag.id : tag,
),
externalEventBus: props.workflowListEventBus,
parentFolderId: props.data.parentFolder?.id,
},
});
break;