コード例 #1
0
        private Task GivenValidationFailed()
        {
            _validator.Setup(x => x.ValidateAsync(It.IsAny <TestRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(new ValidationResult(new[] { new ValidationFailure("errorcode", "errormessage") }));
            _behaviour = new ValidationBehaviour <TestRequest, Result <TestResponse> >(_validator.Object, _logger);

            return(Task.CompletedTask);
        }
コード例 #2
0
        public async Task ValidationErrorsAreAddedToException()
        {
            const string USER       = "******";
            var          validators = new List <IValidator <GetListRequest> >
            {
                new GetListValidator()
            };

            var request             = new GetListRequest(string.Empty, USER);
            var validationBehaviour = new ValidationBehaviour <GetListRequest, ListDTO>(validators);

            var handlerMock = new Mock <RequestHandlerDelegate <ListDTO> >();

            try
            {
                await validationBehaviour.Handle(request, CancellationToken.None, handlerMock.Object);

                // an exception is expected, if we got here the test failed
                Assert.Fail();
            }
            catch (Exception e)
            {
                Assert.IsInstanceOfType(e, typeof(RequestValidationFailedException));
                Assert.AreEqual(1, (e as RequestValidationFailedException).Failures.Count);
            }
        }
コード例 #3
0
        private Task GivenValidationWasSuccessful()
        {
            _validator.Setup(x => x.ValidateAsync(It.IsAny <TestRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(new ValidationResult());
            _behaviour = new ValidationBehaviour <TestRequest, Result <TestResponse> >(_validator.Object, _logger);

            return(Task.CompletedTask);
        }
コード例 #4
0
        public void ShouldThrow_WhenValidationIsFailed()
        {
            // Arrange
            var validator = Fixture.Freeze <Mock <IValidator <CustomCommand <int> > > >();

            var request = new CustomCommand <int>();

            var token = new CancellationToken();

            var validationFailure = Fixture.Create <ValidationFailure>();

            var validationResult = new ValidationResult(new[] { validationFailure });

            validator.Setup(x => x.ValidateAsync(request, token)).ReturnsAsync(validationResult);

            var sut = new ValidationBehaviour <CustomCommand <int>, int>(new[] { validator.Object });

            // Act
            Func <Task <int> > act = () => sut.Handle(request, token, () => Task.FromResult(0));

            // Assert
            var _ = act.Should().Throw <ValidationException>();

            _.And.Error.Should().NotBeNull();
            _.And.Error.Errors.Should().NotBeNull();
            _.And.Error.Errors.Should().HaveCount(1);
            _.And.Error.Errors[validationFailure.PropertyName].Should().Equal(validationFailure.ErrorMessage);
        }
コード例 #5
0
        public async Task ShouldValidateRequestBeforeCallNextDelegate()
        {
            // Arrange
            var validator = Fixture.Freeze <Mock <IValidator <CustomCommand <int> > > >();

            var messages = new List <string>();

            var request          = new CustomCommand <int>();
            var token            = new CancellationToken();
            var validationResult = new ValidationResult();

            validator.Setup(x => x.ValidateAsync(request, token))
            .ReturnsAsync(validationResult)
            .Callback(() => messages.Add("validation"));

            RequestHandlerDelegate <int> next = () =>
            {
                messages.Add("next");

                return(Task.FromResult(0));
            };

            var sut = new ValidationBehaviour <CustomCommand <int>, int>(new[] { validator.Object });

            // Act
            await sut.Handle(request, token, next);

            // Assert
            messages.Should().Equal("validation", "next");
        }
コード例 #6
0
        public async Task SendValidData_ShouldReturnSuccessRequestResult()
        {
            _validator
            .Setup(v => v.Validate(It.IsAny <ValidationContext <IRequest <IRequestResult> > >()))
            .Returns(new ValidationResult());
            var _validatorsList = new List <IValidator>()
            {
                _validator.Object
            };
            var behaviour = new ValidationBehaviour <IRequest <IRequestResult>, IRequestResult>(_validatorsList);
            RequestHandlerDelegate <IRequestResult> nextDelegate = () => Task.FromResult(_okRequestResult.Object);

            var result = await behaviour.Handle(_command.Object, _cancelToken, nextDelegate);

            result.Succeeded.Should().BeTrue();
        }
コード例 #7
0
        public async Task ThrowsErrorIfAValidationErrorOccurs()
        {
            const string USER       = "******";
            var          validators = new List <IValidator <GetListRequest> >
            {
                new GetListValidator()
            };

            var request             = new GetListRequest(string.Empty, USER);
            var validationBehaviour = new ValidationBehaviour <GetListRequest, ListDTO>(validators);

            var handlerMock = new Mock <RequestHandlerDelegate <ListDTO> >();

            await Assert.ThrowsExceptionAsync <RequestValidationFailedException>(
                () => validationBehaviour.Handle(request, CancellationToken.None, handlerMock.Object));
        }
コード例 #8
0
        public Task DoesValidationBehaviourWorksCorrectlyWhenValidatorDoesNotPass()
        {
            var validators = new IValidator <SampleRequest>[] { new SampleValidator(), };
            var behaviour  = new ValidationBehaviour <SampleRequest, SampleResponse>(validators);
            var request    = new SampleRequest
            {
                IsWorking = true
            };

            Action a = () => behaviour.Handle(request, CancellationToken.None, null).GetAwaiter().GetResult();

            a.Should()
            .Throw <ValidationException>()
            .Which
            .Errors.Should().ContainKey("Version").And.Subject.Values.Should().ContainSingle(x => x.Contains("Version cannot be empty."));
            return(Task.CompletedTask);
        }
コード例 #9
0
        public Task DoesValidationBehaviourWorksCorrectlyWhenAllValidatorsPass()
        {
            var validators = new IValidator <SampleRequest>[] { new SampleValidator() };
            var behaviour  = new ValidationBehaviour <SampleRequest, SampleResponse>(validators);
            var request    = new SampleRequest
            {
                Version   = "v2.0",
                IsWorking = true
            };

            Action a = () => behaviour.Handle(request, CancellationToken.None,
                                              () => Task.FromResult(new SampleResponse {
                HasWorked = true
            })).GetAwaiter().GetResult();

            a.Should().NotThrow();
            return(Task.CompletedTask);
        }
コード例 #10
0
        public async Task CallsNextIfNoValidationErrorsOccur()
        {
            const string LIST_ID = "id";
            const string USER    = "******";

            var validators = new List <IValidator <GetListRequest> >
            {
                new GetListValidator()
            };

            var request             = new GetListRequest(LIST_ID, USER);
            var validationBehaviour = new ValidationBehaviour <GetListRequest, ListDTO>(validators);
            var handlerMock         = new Mock <RequestHandlerDelegate <ListDTO> >();
            var mockReturned        = new ListDTO();

            handlerMock.Setup(m => m.Invoke()).ReturnsAsync(mockReturned);

            var result = await validationBehaviour.Handle(request, CancellationToken.None, handlerMock.Object);

            Assert.AreSame(mockReturned, result);
            handlerMock.Verify(m => m.Invoke(), Times.Once);
        }
コード例 #11
0
 private Task GivenValidatorIsNull()
 {
     _behaviour = new ValidationBehaviour <TestRequest, Result <TestResponse> >(null, _logger);
     return(Task.CompletedTask);
 }
コード例 #12
0
 public ValidationBehaviourTests()
 {
     _sut = new ValidationBehaviour <Request, Response>(_validatorsMock.Object);
 }