chore(core): Use roles from database in global roles (#18768)

This commit is contained in:
Andreas Fitzek
2025-08-26 17:53:46 +02:00
committed by GitHub
parent cff3f4a67e
commit ecad12b77a
117 changed files with 956 additions and 424 deletions

View File

@@ -1,6 +1,6 @@
import { LicenseState } from '@n8n/backend-common';
import { createWorkflow, shareWorkflowWithUsers, testDb } from '@n8n/backend-test-utils';
import type { User } from '@n8n/db';
import { GLOBAL_MEMBER_ROLE, GLOBAL_OWNER_ROLE, type User } from '@n8n/db';
import { Container } from '@n8n/di';
import { mock } from 'jest-mock-extended';
@@ -17,9 +17,9 @@ let projectService: ProjectService;
beforeAll(async () => {
await testDb.init();
owner = await createUser({ role: 'global:owner' });
member = await createUser({ role: 'global:member' });
anotherMember = await createUser({ role: 'global:member' });
owner = await createUser({ role: GLOBAL_OWNER_ROLE });
member = await createUser({ role: GLOBAL_MEMBER_ROLE });
anotherMember = await createUser({ role: GLOBAL_MEMBER_ROLE });
const licenseMock = mock<LicenseState>();
licenseMock.isSharingLicensed.mockReturnValue(true);
licenseMock.getMaxTeamProjects.mockReturnValue(-1);
@@ -39,7 +39,6 @@ afterAll(async () => {
describe('WorkflowSharingService', () => {
describe('getSharedWorkflowIds', () => {
it('should show all workflows to owners', async () => {
owner.role = 'global:owner';
const workflow1 = await createWorkflow({}, member);
const workflow2 = await createWorkflow({}, anotherMember);
const sharedWorkflowIds = await workflowSharingService.getSharedWorkflowIds(owner, {
@@ -51,7 +50,6 @@ describe('WorkflowSharingService', () => {
});
it('should show shared workflows to users', async () => {
member.role = 'global:member';
const workflow1 = await createWorkflow({}, anotherMember);
const workflow2 = await createWorkflow({}, anotherMember);
const workflow3 = await createWorkflow({}, anotherMember);

View File

@@ -21,7 +21,7 @@ const testServer = utils.setupTestServer({
});
beforeAll(async () => {
member = await createUser({ role: 'global:member' });
member = await createUser({ role: { slug: 'global:member' } });
await utils.initNodeTypes();
});

View File

@@ -16,6 +16,7 @@ import {
WorkflowHistoryRepository,
SharedWorkflowRepository,
WorkflowRepository,
GLOBAL_MEMBER_ROLE,
} from '@n8n/db';
import { Container } from '@n8n/di';
import type { ProjectRole } from '@n8n/permissions';
@@ -70,9 +71,9 @@ beforeAll(async () => {
owner = await createOwner();
admin = await createAdmin();
ownerPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(owner.id);
member = await createUser({ role: 'global:member' });
member = await createUser({ role: { slug: 'global:member' } });
memberPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(member.id);
anotherMember = await createUser({ role: 'global:member' });
anotherMember = await createUser({ role: { slug: 'global:member' } });
anotherMemberPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(
anotherMember.id,
);
@@ -159,7 +160,7 @@ describe('PUT /workflows/:workflowId/share', () => {
test('should allow sharing with pending users', async () => {
const workflow = await createWorkflow({}, owner);
const memberShell = await createUserShell('global:member');
const memberShell = await createUserShell(GLOBAL_MEMBER_ROLE);
const memberShellPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(
memberShell.id,
);
@@ -272,7 +273,7 @@ describe('PUT /workflows/:workflowId/share', () => {
test('should not allow sharing by another non-shared member', async () => {
const workflow = await createWorkflow({}, member);
const tempUser = await createUser({ role: 'global:member' });
const tempUser = await createUser({ role: { slug: 'global:member' } });
const tempUserPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(
tempUser.id,
);

View File

@@ -657,7 +657,7 @@ describe('GET /workflows', () => {
test('should return workflows with scopes when ?includeScopes=true', async () => {
const [member1, member2] = await createManyUsers(2, {
role: 'global:member',
role: { slug: 'global:member' },
});
const teamProject = await createTeamProject(undefined, member1);
@@ -1474,7 +1474,7 @@ describe('GET /workflows?includeFolders=true', () => {
test('should return workflows with scopes and folders when ?includeScopes=true', async () => {
const [member1, member2] = await createManyUsers(2, {
role: 'global:member',
role: { slug: 'global:member' },
});
const teamProject = await createTeamProject(undefined, member1);
@@ -2165,6 +2165,8 @@ describe('PATCH /workflows/:workflowId', () => {
const response = await authOwnerAgent.patch(`/workflows/${workflow.id}`).send(payload);
console.log(response.body);
const {
data: { id },
} = response.body;