refactor(core): Update tag endpoints to use DTOs and injectable config (#12380)

This commit is contained in:
Ricardo Espinoza
2025-01-09 14:17:11 -05:00
committed by GitHub
parent 95f055d23a
commit b1a40a231b
26 changed files with 282 additions and 103 deletions

View File

@@ -44,3 +44,6 @@ export { CredentialsGetOneRequestQuery } from './credentials/credentials-get-one
export { CredentialsGetManyRequestQuery } from './credentials/credentials-get-many-request.dto';
export { ImportWorkflowFromUrlDto } from './workflows/import-workflow-from-url.dto';
export { CreateOrUpdateTagRequestDto } from './tag/create-or-update-tag-request.dto';
export { RetrieveTagQueryDto } from './tag/retrieve-tag-query.dto';

View File

@@ -0,0 +1,37 @@
import { CreateOrUpdateTagRequestDto } from '../create-or-update-tag-request.dto';
describe('CreateOrUpdateTagRequestDto', () => {
describe('Valid requests', () => {
test.each([
{
name: 'valid name',
request: {
name: 'tag-name',
},
},
])('should validate $name', ({ request }) => {
const result = CreateOrUpdateTagRequestDto.safeParse(request);
expect(result.success).toBe(true);
});
});
describe('Invalid requests', () => {
test.each([
{
name: 'empty tag name',
request: {
name: '',
},
expectedErrorPath: ['name'],
},
])('should fail validation for $name', ({ request, expectedErrorPath }) => {
const result = CreateOrUpdateTagRequestDto.safeParse(request);
expect(result.success).toBe(false);
if (expectedErrorPath) {
expect(result.error?.issues[0].path).toEqual(expectedErrorPath);
}
});
});
});

View File

@@ -0,0 +1,64 @@
import { RetrieveTagQueryDto } from '../retrieve-tag-query.dto';
describe('RetrieveTagQueryDto', () => {
describe('Valid requests', () => {
test.each([
{
name: 'with "true"',
request: {
withUsageCount: 'true',
},
},
{
name: 'with "false"',
request: {
withUsageCount: 'false',
},
},
])('should pass validation for withUsageCount $name', ({ request }) => {
const result = RetrieveTagQueryDto.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 = RetrieveTagQueryDto.safeParse(request);
expect(result.success).toBe(false);
if (expectedErrorPath) {
expect(result.error?.issues[0].path).toEqual(expectedErrorPath);
}
});
});
});

View File

@@ -0,0 +1,6 @@
import { z } from 'zod';
import { Z } from 'zod-class';
export class CreateOrUpdateTagRequestDto extends Z.class({
name: z.string().trim().min(1),
}) {}

View File

@@ -0,0 +1,7 @@
import { Z } from 'zod-class';
import { booleanFromString } from '../../schemas/booleanFromString';
export class RetrieveTagQueryDto extends Z.class({
withUsageCount: booleanFromString.optional().default('false'),
}) {}