fix(core): Fix role management controller no-changelog (#19107)

This commit is contained in:
Andreas Fitzek
2025-09-02 19:08:04 +02:00
committed by GitHub
parent 69e25606d8
commit 5be3181f2b
8 changed files with 219 additions and 34 deletions

View File

@@ -78,8 +78,8 @@ export {
USERS_LIST_SORT_OPTIONS,
} from './user/users-list-filter.dto';
export type { UpdateRoleDto } from './roles/update-role.dto';
export type { CreateRoleDto } from './roles/create-role.dto';
export { UpdateRoleDto } from './roles/update-role.dto';
export { CreateRoleDto } from './roles/create-role.dto';
export { OidcConfigDto } from './oidc/config.dto';

View File

@@ -1,6 +1,6 @@
import { ALL_SCOPES } from '@n8n/permissions';
import { createRoleDtoSchema } from '../create-role.dto';
import { CreateRoleDto } from '../create-role.dto';
describe('createRoleDtoSchema', () => {
describe('Valid requests', () => {
@@ -120,7 +120,7 @@ describe('createRoleDtoSchema', () => {
},
},
])('should validate $name', ({ request }) => {
const result = createRoleDtoSchema.safeParse(request);
const result = CreateRoleDto.safeParse(request);
expect(result.success).toBe(true);
});
});
@@ -307,7 +307,7 @@ describe('createRoleDtoSchema', () => {
expectedErrorPath: ['scopes', 1],
},
])('should fail validation for $name', ({ request, expectedErrorPath }) => {
const result = createRoleDtoSchema.safeParse(request);
const result = CreateRoleDto.safeParse(request);
expect(result.success).toBe(false);
@@ -328,7 +328,7 @@ describe('createRoleDtoSchema', () => {
scopes: [scope],
};
const result = createRoleDtoSchema.safeParse(request);
const result = CreateRoleDto.safeParse(request);
expect(result.success).toBe(true);
}
});
@@ -354,7 +354,7 @@ describe('createRoleDtoSchema', () => {
scopes: [scope],
};
const result = createRoleDtoSchema.safeParse(request);
const result = CreateRoleDto.safeParse(request);
expect(result.success).toBe(false);
}
});

View File

@@ -1,6 +1,6 @@
import { ALL_SCOPES } from '@n8n/permissions';
import { updateRoleDtoSchema } from '../update-role.dto';
import { UpdateRoleDto } from '../update-role.dto';
describe('updateRoleDtoSchema', () => {
describe('Valid requests', () => {
@@ -144,7 +144,7 @@ describe('updateRoleDtoSchema', () => {
},
},
])('should validate $name', ({ request }) => {
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(true);
});
});
@@ -327,7 +327,7 @@ describe('updateRoleDtoSchema', () => {
expectedErrorPath: ['scopes', 1],
},
])('should fail validation for $name', ({ request, expectedErrorPath }) => {
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(false);
@@ -346,7 +346,7 @@ describe('updateRoleDtoSchema', () => {
scopes: [scope],
};
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(true);
}
});
@@ -370,7 +370,7 @@ describe('updateRoleDtoSchema', () => {
scopes: [scope],
};
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(false);
}
});
@@ -380,7 +380,7 @@ describe('updateRoleDtoSchema', () => {
scopes: ['project:read', 'invalid-scope', 'workflow:execute'],
};
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(false);
expect(result.error?.issues[0].path).toEqual(['scopes', 1]);
});
@@ -403,7 +403,7 @@ describe('updateRoleDtoSchema', () => {
];
for (const request of validCombinations) {
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(true);
}
});
@@ -415,7 +415,7 @@ describe('updateRoleDtoSchema', () => {
scopes: ['*'], // global wildcard
};
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
expect(result.success).toBe(true);
});
});
@@ -450,7 +450,7 @@ describe('updateRoleDtoSchema', () => {
request: { scopes: undefined },
},
])('should handle $name correctly', ({ request, expectedErrorPath }) => {
const result = updateRoleDtoSchema.safeParse(request);
const result = UpdateRoleDto.safeParse(request);
if (expectedErrorPath) {
expect(result.success).toBe(false);

View File

@@ -1,11 +1,10 @@
import { scopeSchema } from '@n8n/permissions';
import { z } from 'zod';
import { Z } from 'zod-class';
export const createRoleDtoSchema = z.object({
export class CreateRoleDto extends Z.class({
displayName: z.string().min(2).max(100),
description: z.string().max(500).optional(),
roleType: z.enum(['project']),
scopes: z.array(scopeSchema),
});
export type CreateRoleDto = z.infer<typeof createRoleDtoSchema>;
}) {}

View File

@@ -1,10 +1,9 @@
import { scopeSchema } from '@n8n/permissions';
import { z } from 'zod';
import { Z } from 'zod-class';
export const updateRoleDtoSchema = z.object({
export class UpdateRoleDto extends Z.class({
displayName: z.string().min(2).max(100).optional(),
description: z.string().max(500).optional(),
scopes: z.array(scopeSchema).optional(),
});
export type UpdateRoleDto = z.infer<typeof updateRoleDtoSchema>;
}) {}