Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using FluentAssertions;
- using FluentValidation;
- using FluentValidation.Results;
- using NSubstitute;
- using System;
- using System.Collections.Generic;
- namespace SubValidationTest
- {
- class Program
- {
- static void Main()
- {
- Test_ChildValidator();
- Test_ParentValidator_WithRealChildValidator();
- Test_ParentValidator_WithMockedChildValidator();
- }
- static void Test_ChildValidator()
- {
- var child = Substitute.For<IChild>();
- var validator = new ChildValidator();
- child.Value.Returns(null as string);
- validator.Validate(child).IsValid.Should().BeFalse();
- child.Value.Returns("");
- validator.Validate(child).IsValid.Should().BeFalse();
- child.Value.Returns("a");
- validator.Validate(child).IsValid.Should().BeTrue();
- }
- static void Test_ParentValidator_WithRealChildValidator()
- {
- var child = Substitute.For<IChild>();
- var childValidator = new ChildValidator();
- var parent = Substitute.For<IParent>();
- var validator = new ParentValidator(childValidator);
- parent.Child.Returns(null as IChild);
- validator.Validate(parent).IsValid.Should().BeTrue();
- parent.Child.Returns(child);
- validator.Validate(parent).IsValid.Should().BeFalse();
- child.Value.Returns("a");
- validator.Validate(parent).IsValid.Should().BeTrue();
- }
- static void Test_ParentValidator_WithMockedChildValidator()
- {
- var child = Substitute.For<IChild>();
- var childValidator = Substitute.For<IValidator<IChild>>();
- var parent = Substitute.For<IParent>();
- var validator = new ParentValidator(childValidator);
- parent.Child.Returns(null as IChild);
- validator.Validate(parent).IsValid.Should().BeTrue();
- parent.Child.Returns(child);
- childValidator.Validate(Arg.Any<IChild>()).Returns(new ValidationResult(new List<ValidationFailure> { new ValidationFailure("property", "message") }));
- validator.Validate(parent).IsValid.Should().BeFalse();
- childValidator.Validate(Arg.Any<IChild>()).Returns(new ValidationResult());
- validator.Validate(parent).IsValid.Should().BeTrue();
- }
- }
- public interface IChild
- {
- string Value { get; }
- }
- public class ChildValidator : AbstractValidator<IChild>
- {
- public ChildValidator()
- {
- RuleFor(c => c.Value)
- .NotEmpty()
- .NotEmpty()
- .WithMessage("Friendly Error Message");
- }
- }
- public interface IParent
- {
- IChild Child { get; }
- }
- public class ParentValidator : AbstractValidator<IParent>
- {
- public ParentValidator(IValidator<IChild> childValidator)
- {
- When(p => p.Child != null, () => {
- RuleFor(p => p.Child)
- .SetValidator(childValidator);
- });
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement