Skip to content

Commit

Permalink
Align Validators with Validator requiring registered service in DI (#96)
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeyshaykhullin authored Apr 1, 2022
1 parent 731da82 commit 84079e3
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/ValidationDefaults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,12 @@ public static GetValidationContext<TInput> ValidationContextWithStrategy<TInput>
{
var validators = (IValidator[])inputValidatorContext.MiddlewareContext.Services.GetServices(validatorType);

if (validators is { Length: 0 })
{
throw new InvalidOperationException(
$"No service for type '{validatorType.FullName}' has been registered");
}

ValidationResult? validationResult = null;

for (var validatorIndex = 0; validatorIndex < validators.Length; validatorIndex++)
Expand Down
45 changes: 45 additions & 0 deletions tests/AppAny.HotChocolate.FluentValidation.Tests/UseValidators.cs
Original file line number Diff line number Diff line change
Expand Up @@ -331,5 +331,50 @@ public async Task UseValidatorsGenericWithValidationStrategyName()
Assert.Collection(result.Errors!,
nameIsEmpty => Assert.Equal(NotEmptyNameValidator.Message, nameIsEmpty.Message));
}

[Fact]
public async Task UseValidatorWithoutRegisteredServiceDescriptor()
{
var executor = await TestSetup.CreateRequestExecutor(builder =>
{
builder.AddFluentValidation()
.AddMutationType(new TestMutation(field =>
{
field.Argument("input",
arg => arg.Type<NonNullType<TestPersonInputType>>().UseFluentValidation(argument =>
{
argument.UseValidator<NotEmptyNameValidator>();
}));
}));
});

var result = Assert.IsType<QueryResult>(
await executor.ExecuteAsync(TestSetup.Mutations.WithEmptyName));

var error = Assert.Single(result.Errors!);

Assert.Contains("No service", error.Exception!.Message);
}

[Fact]
public async Task UseValidatorsWithoutRegisteredServiceDescriptor()
{
var executor = await TestSetup.CreateRequestExecutor(builder =>
{
builder.AddFluentValidation()
.AddMutationType(new TestMutation(field =>
{
field.Argument("input",
arg => arg.Type<NonNullType<TestPersonInputType>>().UseFluentValidation());
}));
});

var result = Assert.IsType<QueryResult>(
await executor.ExecuteAsync(TestSetup.Mutations.WithEmptyName));

var error = Assert.Single(result.Errors!);

Assert.Contains("No service", error.Exception!.Message);
}
}
}

0 comments on commit 84079e3

Please sign in to comment.