mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
chore(core): Add timestamp fields to Role, and support counting role usages (#19171)
This commit is contained in:
@@ -80,6 +80,8 @@ export {
|
||||
|
||||
export { UpdateRoleDto } from './roles/update-role.dto';
|
||||
export { CreateRoleDto } from './roles/create-role.dto';
|
||||
export { RoleListQueryDto } from './roles/role-list-query.dto';
|
||||
export { RoleGetQueryDto } from './roles/role-get-query.dto';
|
||||
|
||||
export { OidcConfigDto } from './oidc/config.dto';
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
import { RoleGetQueryDto } from '../role-get-query.dto';
|
||||
|
||||
describe('RoleGetQueryDto', () => {
|
||||
describe('Valid requests', () => {
|
||||
test.each([
|
||||
{
|
||||
name: 'with "true"',
|
||||
request: {
|
||||
withUsageCount: 'true',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'with "false"',
|
||||
request: {
|
||||
withUsageCount: 'false',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'without withUsageCount (uses default)',
|
||||
request: {},
|
||||
},
|
||||
])('should pass validation for withUsageCount $name', ({ request }) => {
|
||||
const result = RoleGetQueryDto.safeParse(request);
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Invalid requests', () => {
|
||||
test.each([
|
||||
{
|
||||
name: 'with number',
|
||||
request: {
|
||||
withUsageCount: 1,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with boolean (true)',
|
||||
request: {
|
||||
withUsageCount: true,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with boolean (false)',
|
||||
request: {
|
||||
withUsageCount: false,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with invalid string',
|
||||
request: {
|
||||
withUsageCount: 'invalid',
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
])('should fail validation for withUsageCount $name', ({ request, expectedErrorPath }) => {
|
||||
const result = RoleGetQueryDto.safeParse(request);
|
||||
|
||||
expect(result.success).toBe(false);
|
||||
|
||||
if (expectedErrorPath) {
|
||||
expect(result.error?.issues[0].path).toEqual(expectedErrorPath);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
import { RoleListQueryDto } from '../role-list-query.dto';
|
||||
|
||||
describe('RoleListQueryDto', () => {
|
||||
describe('Valid requests', () => {
|
||||
test.each([
|
||||
{
|
||||
name: 'with "true"',
|
||||
request: {
|
||||
withUsageCount: 'true',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'with "false"',
|
||||
request: {
|
||||
withUsageCount: 'false',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'without withUsageCount (uses default)',
|
||||
request: {},
|
||||
},
|
||||
])('should pass validation for withUsageCount $name', ({ request }) => {
|
||||
const result = RoleListQueryDto.safeParse(request);
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Invalid requests', () => {
|
||||
test.each([
|
||||
{
|
||||
name: 'with number',
|
||||
request: {
|
||||
withUsageCount: 1,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with boolean (true)',
|
||||
request: {
|
||||
withUsageCount: true,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with boolean (false)',
|
||||
request: {
|
||||
withUsageCount: false,
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
{
|
||||
name: 'with invalid string',
|
||||
request: {
|
||||
withUsageCount: 'invalid',
|
||||
},
|
||||
expectedErrorPath: ['withUsageCount'],
|
||||
},
|
||||
])('should fail validation for withUsageCount $name', ({ request, expectedErrorPath }) => {
|
||||
const result = RoleListQueryDto.safeParse(request);
|
||||
|
||||
expect(result.success).toBe(false);
|
||||
|
||||
if (expectedErrorPath) {
|
||||
expect(result.error?.issues[0].path).toEqual(expectedErrorPath);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
10
packages/@n8n/api-types/src/dto/roles/role-get-query.dto.ts
Normal file
10
packages/@n8n/api-types/src/dto/roles/role-get-query.dto.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Z } from 'zod-class';
|
||||
|
||||
import { booleanFromString } from '../../schemas/boolean-from-string';
|
||||
|
||||
/**
|
||||
* Query DTO for retrieving a single role with optional usage count
|
||||
*/
|
||||
export class RoleGetQueryDto extends Z.class({
|
||||
withUsageCount: booleanFromString.optional().default('false'),
|
||||
}) {}
|
||||
10
packages/@n8n/api-types/src/dto/roles/role-list-query.dto.ts
Normal file
10
packages/@n8n/api-types/src/dto/roles/role-list-query.dto.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Z } from 'zod-class';
|
||||
|
||||
import { booleanFromString } from '../../schemas/boolean-from-string';
|
||||
|
||||
/**
|
||||
* Query DTO for listing roles with optional usage count
|
||||
*/
|
||||
export class RoleListQueryDto extends Z.class({
|
||||
withUsageCount: booleanFromString.optional().default('false'),
|
||||
}) {}
|
||||
Reference in New Issue
Block a user