mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
feat: RBAC (#8922)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Val <68596159+valya@users.noreply.github.com> Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in> Co-authored-by: Valya Bullions <valya@n8n.io> Co-authored-by: Danny Martini <danny@n8n.io> Co-authored-by: Danny Martini <despair.blue@gmail.com> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: oleg <me@olegivaniv.com> Co-authored-by: Michael Kret <michael.k@radency.com> Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com> Co-authored-by: Elias Meire <elias@meire.dev> Co-authored-by: Giulio Andreini <andreini@netseven.it> Co-authored-by: Giulio Andreini <g.andreini@gmail.com> Co-authored-by: Ayato Hayashi <go12limchangyong@gmail.com>
This commit is contained in:
@@ -26,6 +26,8 @@ import {
|
||||
|
||||
import type { User } from '@/databases/entities/User';
|
||||
import type { UserInvitationResult } from '../../shared/utils/users';
|
||||
import { ProjectRepository } from '@/databases/repositories/project.repository';
|
||||
import { ProjectRelationRepository } from '@/databases/repositories/projectRelation.repository';
|
||||
|
||||
describe('InvitationController', () => {
|
||||
const mailer = mockInstance(UserManagementMailer);
|
||||
@@ -36,9 +38,13 @@ describe('InvitationController', () => {
|
||||
|
||||
let instanceOwner: User;
|
||||
let userRepository: UserRepository;
|
||||
let projectRepository: ProjectRepository;
|
||||
let projectRelationRepository: ProjectRelationRepository;
|
||||
|
||||
beforeAll(async () => {
|
||||
userRepository = Container.get(UserRepository);
|
||||
projectRepository = Container.get(ProjectRepository);
|
||||
projectRelationRepository = Container.get(ProjectRelationRepository);
|
||||
instanceOwner = await createOwner();
|
||||
});
|
||||
|
||||
@@ -271,6 +277,39 @@ describe('InvitationController', () => {
|
||||
assertStoredUserProps(storedUser);
|
||||
});
|
||||
|
||||
test('should create personal project for shell account', async () => {
|
||||
mailer.invite.mockResolvedValue({ emailSent: false });
|
||||
|
||||
const response: InvitationResponse = await testServer
|
||||
.authAgentFor(instanceOwner)
|
||||
.post('/invitations')
|
||||
.send([{ email: randomEmail() }])
|
||||
.expect(200);
|
||||
|
||||
const [result] = response.body.data;
|
||||
|
||||
const storedUser = await userRepository.findOneByOrFail({
|
||||
id: result.user.id,
|
||||
});
|
||||
|
||||
assertStoredUserProps(storedUser);
|
||||
|
||||
const projectRelation = await projectRelationRepository.findOneOrFail({
|
||||
where: {
|
||||
userId: storedUser.id,
|
||||
role: 'project:personalOwner',
|
||||
project: {
|
||||
type: 'personal',
|
||||
},
|
||||
},
|
||||
relations: { project: true },
|
||||
});
|
||||
|
||||
expect(projectRelation).not.toBeUndefined();
|
||||
expect(projectRelation.project.name).toBe(storedUser.createPersonalProjectName());
|
||||
expect(projectRelation.project.type).toBe('personal');
|
||||
});
|
||||
|
||||
test('should create admin shell when advanced permissions is licensed', async () => {
|
||||
testServer.license.enable('feat:advancedPermissions');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user