diff --git a/src/code_scanners/routes_scanner/validator_extractor.ts b/src/code_scanners/routes_scanner/validator_extractor.ts index 36eb7828..dd1d197a 100644 --- a/src/code_scanners/routes_scanner/validator_extractor.ts +++ b/src/code_scanners/routes_scanner/validator_extractor.ts @@ -81,8 +81,11 @@ export async function extractValidators( */ const validationCalls = inspectMethodArguments(method, [ 'request.validateUsing', + 'request.tryValidateUsing', '$CTX.request.validateUsing', + '$CTX.request.tryValidateUsing', 'vine.validate', + 'vine.tryValidate', ]) .map((node) => { const firstArg = node.find({ diff --git a/tests/code_scanners/validator_extractor.spec.ts b/tests/code_scanners/validator_extractor.spec.ts index 56f9806f..8ac43390 100644 --- a/tests/code_scanners/validator_extractor.spec.ts +++ b/tests/code_scanners/validator_extractor.spec.ts @@ -446,6 +446,82 @@ test.group('Validator extractor', () => { ) }) + test('extract validator when using ctx.request.tryValidateUsing', async ({ assert, fs }) => { + await fs.create( + 'app/controllers/users_controller.ts', + ` + import { createUserValidator } from '#validators/user' + + export default class UsersController { + async store(ctx: HttpContext) { + await ctx.request.tryValidateUsing(createUserValidator) + } + } + ` + ) + + assert.deepEqual( + await extractValidators(fs.basePath, new VirtualFileSystem(fs.basePath), { + path: join(fs.basePath, 'app/controllers/users_controller.ts'), + method: 'store', + name: 'UsersController', + import: { + type: 'default', + value: 'UsersController', + specifier: '#controllers/users_controller', + }, + }), + [ + { + import: { + specifier: '#validators/user', + type: 'named', + value: 'createUserValidator', + }, + name: 'createUserValidator', + }, + ] + ) + }) + + test('extract validator when using request.tryValidateUsing', async ({ assert, fs }) => { + await fs.create( + 'app/controllers/users_controller.ts', + ` + import { createUserValidator } from '#validators/user' + + export default class UsersController { + async store({ request }: HttpContext) { + await request.tryValidateUsing(createUserValidator) + } + } + ` + ) + + assert.deepEqual( + await extractValidators(fs.basePath, new VirtualFileSystem(fs.basePath), { + path: join(fs.basePath, 'app/controllers/users_controller.ts'), + method: 'store', + name: 'UsersController', + import: { + type: 'default', + value: 'UsersController', + specifier: '#controllers/users_controller', + }, + }), + [ + { + import: { + specifier: '#validators/user', + type: 'named', + value: 'createUserValidator', + }, + name: 'createUserValidator', + }, + ] + ) + }) + test('do not match method name when it appear in body of another method', async ({ assert, fs,