Skip to content

Commit

Permalink
fix: Get workflow not returning home project and shared projects (no-…
Browse files Browse the repository at this point in the history
…changelog) (n8n-io#9815)
  • Loading branch information
valya authored Jun 20, 2024
1 parent e1e8a75 commit aeeced4
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 10 deletions.
12 changes: 5 additions & 7 deletions packages/cli/src/workflows/workflow.service.ee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { NotFoundError } from '@/errors/response-errors/not-found.error';
import { Logger } from '@/Logger';
import type {
CredentialUsedByWorkflow,
WorkflowWithSharingsAndCredentials,
WorkflowWithSharingsMetaDataAndCredentials,
} from './workflows.types';
Expand Down Expand Up @@ -101,16 +100,15 @@ export class EnterpriseWorkflowService {
const userCredentialIds = userCredentials.map((credential) => credential.id);
workflowCredentials.forEach((credential) => {
const credentialId = credential.id;
const workflowCredential: CredentialUsedByWorkflow = {
const filledCred = this.ownershipService.addOwnedByAndSharedWith(credential);
workflow.usedCredentials?.push({
id: credentialId,
name: credential.name,
type: credential.type,
currentUserHasAccess: userCredentialIds.includes(credentialId),
sharedWith: [],
ownedBy: null,
};
credential = this.ownershipService.addOwnedByAndSharedWith(credential);
workflow.usedCredentials?.push(workflowCredential);
homeProject: filledCred.homeProject,
sharedWithProjects: filledCred.sharedWithProjects,
});
});
}

Expand Down
5 changes: 2 additions & 3 deletions packages/cli/src/workflows/workflows.types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { IUser } from 'n8n-workflow';
import type { SharedWorkflow } from '@db/entities/SharedWorkflow';
import type { WorkflowEntity } from '@db/entities/WorkflowEntity';
import type { SlimProject } from '@/requests';
Expand All @@ -21,6 +20,6 @@ export interface CredentialUsedByWorkflow {
name: string;
type?: string;
currentUserHasAccess: boolean;
ownedBy?: IUser | null;
sharedWith?: IUser[];
homeProject: SlimProject | null;
sharedWithProjects: SlimProject[];
}
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,35 @@ describe('GET /workflows/:workflowId', () => {
]);
expect(member2Workflow.sharedWithProjects).toHaveLength(1);
});

test('should return workflow credentials home project and shared with projects', async () => {
const savedCredential = await saveCredential(randomCredentialPayload(), { user: member });
// Both users have access to the credential (none is owner)
await shareCredentialWithUsers(savedCredential, [anotherMember]);

const workflowPayload = makeWorkflow({
withPinData: false,
withCredential: { id: savedCredential.id, name: savedCredential.name },
});
const workflow = await createWorkflow(workflowPayload, member);
await shareWorkflowWithUsers(workflow, [anotherMember]);

const responseMember1 = await authMemberAgent.get(`/workflows/${workflow.id}`).expect(200);
const member1Workflow: WorkflowWithSharingsMetaDataAndCredentials = responseMember1.body.data;

expect(member1Workflow.usedCredentials).toMatchObject([
{
id: savedCredential.id,
name: savedCredential.name,
currentUserHasAccess: true,
homeProject: {
id: memberPersonalProject.id,
},
sharedWithProjects: [{ id: anotherMemberPersonalProject.id }],
},
]);
expect(member1Workflow.sharedWithProjects).toHaveLength(1);
});
});

describe('POST /workflows', () => {
Expand Down

0 comments on commit aeeced4

Please sign in to comment.