Skip to content

Commit 84079e3

Browse files
Align Validators with Validator requiring registered service in DI (#96)
1 parent 731da82 commit 84079e3

2 files changed

Lines changed: 51 additions & 0 deletions

File tree

src/ValidationDefaults.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,12 @@ public static GetValidationContext<TInput> ValidationContextWithStrategy<TInput>
223223
{
224224
var validators = (IValidator[])inputValidatorContext.MiddlewareContext.Services.GetServices(validatorType);
225225

226+
if (validators is { Length: 0 })
227+
{
228+
throw new InvalidOperationException(
229+
$"No service for type '{validatorType.FullName}' has been registered");
230+
}
231+
226232
ValidationResult? validationResult = null;
227233

228234
for (var validatorIndex = 0; validatorIndex < validators.Length; validatorIndex++)

tests/AppAny.HotChocolate.FluentValidation.Tests/UseValidators.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,5 +331,50 @@ public async Task UseValidatorsGenericWithValidationStrategyName()
331331
Assert.Collection(result.Errors!,
332332
nameIsEmpty => Assert.Equal(NotEmptyNameValidator.Message, nameIsEmpty.Message));
333333
}
334+
335+
[Fact]
336+
public async Task UseValidatorWithoutRegisteredServiceDescriptor()
337+
{
338+
var executor = await TestSetup.CreateRequestExecutor(builder =>
339+
{
340+
builder.AddFluentValidation()
341+
.AddMutationType(new TestMutation(field =>
342+
{
343+
field.Argument("input",
344+
arg => arg.Type<NonNullType<TestPersonInputType>>().UseFluentValidation(argument =>
345+
{
346+
argument.UseValidator<NotEmptyNameValidator>();
347+
}));
348+
}));
349+
});
350+
351+
var result = Assert.IsType<QueryResult>(
352+
await executor.ExecuteAsync(TestSetup.Mutations.WithEmptyName));
353+
354+
var error = Assert.Single(result.Errors!);
355+
356+
Assert.Contains("No service", error.Exception!.Message);
357+
}
358+
359+
[Fact]
360+
public async Task UseValidatorsWithoutRegisteredServiceDescriptor()
361+
{
362+
var executor = await TestSetup.CreateRequestExecutor(builder =>
363+
{
364+
builder.AddFluentValidation()
365+
.AddMutationType(new TestMutation(field =>
366+
{
367+
field.Argument("input",
368+
arg => arg.Type<NonNullType<TestPersonInputType>>().UseFluentValidation());
369+
}));
370+
});
371+
372+
var result = Assert.IsType<QueryResult>(
373+
await executor.ExecuteAsync(TestSetup.Mutations.WithEmptyName));
374+
375+
var error = Assert.Single(result.Errors!);
376+
377+
Assert.Contains("No service", error.Exception!.Message);
378+
}
334379
}
335380
}

0 commit comments

Comments
 (0)