public async Task TestCommandNull()
 {
     var command = new CommandA();
     var self = new CommandAndValidator(command, null);
     var result = await CommandValidationSteps.Validate(self);
     result.ShouldBe(command);
 }
 public async Task TestCommandValid()
 {
     var command = new CommandA();
     var self = new CommandAndValidator(command, _validValidator);
     var result = await CommandValidationSteps.Validate(self);
     await _validValidator.Received().ValidateAsync(command);
     result.ShouldBe(command);
 }
        public void TestCommandInvalid()
        {
            var command = new CommandA();
            var self = new CommandAndValidator(command, _invalidValidator);
            var result = Should.Throw<Qvc.Validation.ValidationException>(async () => await CommandValidationSteps.Validate(self));
            _invalidValidator.Received().ValidateAsync(command);

            result.Violations.Single().FieldName.ShouldBe("fieldCamelCase");
            result.Violations.Single().Message.ShouldBe("error");
        }
        public static async Task<ICommand> Validate(CommandAndValidator self)
        {
            if (self.Validator == null)
            {
                return self.Command;
            }

            var result = await self.Validator.ValidateAsync(self.Command);

            if (result.IsValid)
            {
                return self.Command;
            }

            var errors = result.Errors
                .Select(x => new Violation(x.PropertyName.ToCamelCase(), x.ErrorMessage))
                .ToList();

            throw new Qvc.Validation.ValidationException(errors);
        }