feat: Add nested search in folders (#14372)

Co-authored-by: Milorad FIlipović <milorad@n8n.io>
This commit is contained in:
Ricardo Espinoza
2025-04-11 19:17:28 -04:00
committed by GitHub
parent f38bd84fd1
commit cade309d3b
13 changed files with 354 additions and 46 deletions

View File

@@ -1056,8 +1056,7 @@ describe('GET /workflows', () => {
parentFolder: {
id: folder.id,
name: folder.name,
createdAt: expect.any(String),
updatedAt: expect.any(String),
parentFolderId: null,
},
},
{
@@ -1615,6 +1614,66 @@ describe('GET /workflows?includeFolders=true', () => {
expect(response2.body.data).toHaveLength(0);
});
test('should filter workflows by parentFolderId and its descendants when filtering by name', async () => {
const pp = await Container.get(ProjectRepository).getPersonalProjectForUserOrFail(owner.id);
await createFolder(pp, {
name: 'Root Folder 1',
});
const rootFolder2 = await createFolder(pp, {
name: 'Root Folder 2',
});
await createFolder(pp, {
name: 'Root Folder 3',
});
const subfolder1 = await createFolder(pp, {
name: 'Root folder 2 subfolder 1 key',
parentFolder: rootFolder2,
});
await createWorkflow(
{
name: 'Workflow 1 key',
parentFolder: rootFolder2,
},
pp,
);
await createWorkflow(
{
name: 'workflow 2 key',
parentFolder: rootFolder2,
},
pp,
);
await createWorkflow(
{
name: 'workflow 3 key',
parentFolder: subfolder1,
},
pp,
);
const filter2Response = await authOwnerAgent
.get('/workflows')
.query(
`filter={ "projectId": "${pp.id}", "parentFolderId": "${rootFolder2.id}", "name": "key" }&includeFolders=true`,
);
expect(filter2Response.body.count).toBe(4);
expect(filter2Response.body.data).toHaveLength(4);
expect(
filter2Response.body.data.filter((w: WorkflowFolderUnionFull) => w.resource === 'workflow'),
).toHaveLength(3);
expect(
filter2Response.body.data.filter((w: WorkflowFolderUnionFull) => w.resource === 'folder'),
).toHaveLength(1);
});
test('should return homeProject when filtering workflows and folders by projectId', async () => {
const workflow = await createWorkflow({ name: 'First' }, owner);
await shareWorkflowWithUsers(workflow, [member]);