Skip to content

Commit

Permalink
create names for personal project in one place and reuse
Browse files Browse the repository at this point in the history
  • Loading branch information
despairblue committed Mar 28, 2024
1 parent 9fe88fc commit e882552
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 34 deletions.
5 changes: 4 additions & 1 deletion packages/cli/src/databases/entities/Project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Container from 'typedi';
import { ProjectRepository } from '../repositories/project.repository';
import { ApplicationError, ErrorReporterProxy } from 'n8n-workflow';
import { Logger } from '@/Logger';
import { UserRepository } from '../repositories/user.repository';

export type ProjectType = 'personal' | 'team' | 'public';

Expand Down Expand Up @@ -49,7 +50,9 @@ export class UserSubscriber implements EntitySubscriberInterface<User> {
fields.includes('email')
) {
const oldUser = event.databaseEntity;
const name = `${newUserData.firstName} ${newUserData.lastName} <${newUserData.email}>`;
const name = Container.get(UserRepository)
.create(newUserData)
.createPersonalProjectName();

const project = await Container.get(ProjectRepository).getPersonalProjectForUser(
oldUser.id,
Expand Down
10 changes: 10 additions & 0 deletions packages/cli/src/databases/entities/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,14 @@ export class User extends WithTimestamps implements IUser {
const { password, apiKey, mfaSecret, mfaRecoveryCodes, ...rest } = this;
return rest;
}

createPersonalProjectName() {
if (this.firstName && this.lastName && this.email) {
return `${this.firstName} ${this.lastName} <${this.email}>`;
} else if (this.email) {
return `<${this.email}>`;
} else {
return 'Unnamed Project';
}
}
}
1 change: 1 addition & 0 deletions packages/cli/src/databases/repositories/user.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ export class UserRepository extends Repository<User> {
const savedProject = await entityManager.save<Project>(
entityManager.create(Project, {
type: 'personal',
name: savedUser.createPersonalProjectName(),
}),
);
await entityManager.save<ProjectRelation>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ describe('InvitationController', () => {
});

expect(projectRelation).not.toBeUndefined();
expect(projectRelation.project.name).toBeNull();
expect(projectRelation.project.name).toBe(storedUser.createPersonalProjectName());
expect(projectRelation.project.type).toBe('personal');
});

Expand Down
21 changes: 10 additions & 11 deletions packages/cli/test/integration/credentials.ee.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ describe('GET /credentials', () => {
expect(ownerCredential.homeProject).toMatchObject({
id: ownerPersonalProject.id,
type: 'personal',
name: 'My n8n',
name: owner.createPersonalProjectName(),
});

expect(Array.isArray(ownerCredential.sharedWithProjects)).toBe(true);
Expand All @@ -132,14 +132,13 @@ describe('GET /credentials', () => {
expect(sharee).toMatchObject({
id: orderedSharedWith[idx].id,
type: orderedSharedWith[idx].type,
name: 'My n8n',
});
});

expect(memberCredential.homeProject).toMatchObject({
id: member1PersonalProject.id,
type: member1PersonalProject.type,
name: 'My n8n',
name: member1.createPersonalProjectName(),
});

expect(Array.isArray(memberCredential.sharedWithProjects)).toBe(true);
Expand Down Expand Up @@ -177,14 +176,14 @@ describe('GET /credentials', () => {

expect(member1Credential.homeProject).toMatchObject({
id: member1PersonalProject.id,
name: 'My n8n',
name: member1.createPersonalProjectName(),
type: member1PersonalProject.type,
});

expect(member1Credential.sharedWithProjects).toHaveLength(1);
expect(member1Credential.sharedWithProjects[0]).toMatchObject({
id: member2PersonalProject.id,
name: 'My n8n',
name: member2.createPersonalProjectName(),
type: member2PersonalProject.type,
});
});
Expand Down Expand Up @@ -232,7 +231,7 @@ describe('GET /credentials/:id', () => {

expect(firstCredential.homeProject).toMatchObject({
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: ownerPersonalProject.type,
});
expect(firstCredential.sharedWithProjects).toHaveLength(0);
Expand Down Expand Up @@ -271,13 +270,13 @@ describe('GET /credentials/:id', () => {
expect(credential).toMatchObject({
homeProject: {
id: member1PersonalProject.id,
name: 'My n8n',
name: member1.createPersonalProjectName(),
type: member1PersonalProject.type,
},
sharedWithProjects: [
{
id: member2PersonalProject.id,
name: 'My n8n',
name: member2.createPersonalProjectName(),
type: member2PersonalProject.type,
},
],
Expand Down Expand Up @@ -322,18 +321,18 @@ describe('GET /credentials/:id', () => {
expect(firstCredential).toMatchObject({
homeProject: {
id: member1PersonalProject.id,
name: 'My n8n',
name: member1.createPersonalProjectName(),
type: 'personal',
},
sharedWithProjects: expect.arrayContaining([
{
id: member2PersonalProject.id,
name: 'My n8n',
name: member2.createPersonalProjectName(),
type: member2PersonalProject.type,
},
{
id: member3PersonalProject.id,
name: 'My n8n',
name: member3.createPersonalProjectName(),
type: member3PersonalProject.type,
},
]),
Expand Down
16 changes: 5 additions & 11 deletions packages/cli/test/integration/me.api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,7 @@ describe('Owner shell', () => {
ProjectRepository,
).getPersonalProjectForUserOrFail(storedOwnerShell.id);

expect(storedPersonalProject.name).toBe(
`${storedOwnerShell.firstName} ${storedOwnerShell.lastName} <${storedOwnerShell.email}>`,
);
expect(storedPersonalProject.name).toBe(storedOwnerShell.createPersonalProjectName());
}
});

Expand All @@ -91,7 +89,7 @@ describe('Owner shell', () => {
ProjectRepository,
).getPersonalProjectForUserOrFail(storedOwnerShell.id);

expect(storedPersonalProject.name).toBeNull();
expect(storedPersonalProject.name).toBe(storedOwnerShell.createPersonalProjectName());
}
});

Expand Down Expand Up @@ -224,9 +222,7 @@ describe('Member', () => {
const storedPersonalProject =
await Container.get(ProjectRepository).getPersonalProjectForUserOrFail(id);

expect(storedPersonalProject.name).toBe(
`${storedMember.firstName} ${storedMember.lastName} <${storedMember.email}>`,
);
expect(storedPersonalProject.name).toBe(storedMember.createPersonalProjectName());
}
});

Expand All @@ -244,7 +240,7 @@ describe('Member', () => {
ProjectRepository,
).getPersonalProjectForUserOrFail(storedMember.id);

expect(storedPersonalProject.name).toBeNull();
expect(storedPersonalProject.name).toBe(storedMember.createPersonalProjectName());
}
});

Expand Down Expand Up @@ -367,9 +363,7 @@ describe('Owner', () => {
ProjectRepository,
).getPersonalProjectForUserOrFail(storedOwner.id);

expect(storedPersonalProject.name).toBe(
`${storedOwner.firstName} ${storedOwner.lastName} <${storedOwner.email}>`,
);
expect(storedPersonalProject.name).toBe(storedOwner.createPersonalProjectName());
}
});
});
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/test/integration/project.api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ describe('GET /projects/', () => {
return false;
}
const u = [testUser1, testUser2, testUser3][i];
return p.name === `${u.firstName} ${u.lastName}`;
return p.name === u.createPersonalProjectName();
}),
).toBe(true);
expect(respProjects.find((p) => p.id === teamProject1.id)).not.toBeUndefined();
Expand Down Expand Up @@ -117,7 +117,7 @@ describe('GET /projects/', () => {
return false;
}
const u = [ownerUser, testUser1, testUser2, testUser3][i];
return p.name === `${u.firstName} ${u.lastName}`;
return p.name === u.createPersonalProjectName();
}),
).toBe(true);
expect(respProjects.find((p) => p.id === teamProject1.id)).not.toBeUndefined();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ describe('GET /workflows/:id', () => {

expect(responseWorkflow.homeProject).toMatchObject({
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: 'personal',
});

Expand All @@ -313,14 +313,14 @@ describe('GET /workflows/:id', () => {

expect(responseWorkflow.homeProject).toMatchObject({
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: 'personal',
});

expect(responseWorkflow.sharedWithProjects).toHaveLength(1);
expect(responseWorkflow.sharedWithProjects[0]).toMatchObject({
id: memberPersonalProject.id,
name: 'My n8n',
name: member.createPersonalProjectName(),
type: 'personal',
});
});
Expand All @@ -334,7 +334,7 @@ describe('GET /workflows/:id', () => {

expect(responseWorkflow.homeProject).toMatchObject({
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: 'personal',
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ describe('GET /workflows', () => {
versionId: any(String),
homeProject: {
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: ownerPersonalProject.type,
},
sharedWithProjects: [],
Expand All @@ -358,7 +358,7 @@ describe('GET /workflows', () => {
versionId: any(String),
homeProject: {
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: ownerPersonalProject.type,
},
sharedWithProjects: [],
Expand Down Expand Up @@ -704,7 +704,7 @@ describe('GET /workflows', () => {
id: any(String),
homeProject: {
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: ownerPersonalProject.type,
},
sharedWithProjects: [],
Expand All @@ -713,7 +713,7 @@ describe('GET /workflows', () => {
id: any(String),
homeProject: {
id: ownerPersonalProject.id,
name: 'My n8n',
name: owner.createPersonalProjectName(),
type: ownerPersonalProject.type,
},
sharedWithProjects: [],
Expand Down

0 comments on commit e882552

Please sign in to comment.