/// <summary> /// Adds the default command (implied if program arguments don't begin with a configured command key). /// </summary> /// <typeparam name="TRunInfo">The run info Type this command is mapped to.</typeparam> /// <param name="defaultCommand">The default command configuration object.</param> /// <param name="postBuildCallback">An optional callback that's invoked with the built TRunInfo run info object.</param> /// <returns>The CommandStore instance.</returns> public CommandStore AddDefault <TRunInfo>(DefaultCommand <TRunInfo> defaultCommand, Action <TRunInfo> postBuildCallback = null) where TRunInfo : class { if (defaultCommand == null) { throw new CommandValidationException( "Command must be provided.", CommandValidationError.NullObject, commandLevel: -1); } if (IsCommand(CommandStore.DefaultKey)) { throw new CommandValidationException( "Default command has already been configured.", CommandValidationError.DuplicateKey, commandLevel: -1); } DefaultCommandValidator.Validate(defaultCommand); Func <string[], Pipeline <TRunInfo> > pipelineFactory = args => { Queue <Stage <TRunInfo> > stages = _stagesFactory.Create <TRunInfo>(defaultCommand, postBuildCallback); return(new Pipeline <TRunInfo>(stages, args, defaultCommand, _parser, globalOptions: null)); }; _pipelineFactoryMap.Add(CommandStore.DefaultKey, pipelineFactory); _helpManager.ConfigureForDefaultCommand(defaultCommand); return(this); }
public void WhenValidatingInvalidValidatableObjectCommandThenReturnsFalse() { // Assign ICommandValidator validator = new DefaultCommandValidator(); ICommand command = new ValidatableObjectCommand(false); CommandHandlerRequest request = new CommandHandlerRequest(this.configuration, command); // Act bool result = validator.Validate(request); // Assert Assert.False(result); Assert.Equal(2, request.ModelState.Sum(kvp => kvp.Value.Errors.Count)); }
public void WhenValidatingValidValidatableObjectCommandThenReturnsTrue() { // Assign ICommandValidator validator = new DefaultCommandValidator(); ICommand command = new ValidatableObjectCommand(true); CommandHandlerRequest request = new CommandHandlerRequest(this.configuration, command); // Act bool result = validator.Validate(request); // Assert Assert.True(result); Assert.Equal(0, request.ModelState.Count); }
public void WhenValidatingInvalidDataAnnotationsValidatableCommandThenReturnsFalse() { // Assign ICommandValidator validator = new DefaultCommandValidator(); ICommand command = new DataAnnotationsValidatableCommand { Property1 = "01234567890123456789" }; CommandHandlerRequest request = new CommandHandlerRequest(this.configuration, command); // Act bool result = validator.Validate(request); // Assert Assert.False(result); Assert.Equal(1, request.ModelState.Count); }
public void WhenValidatingCommandWithUriThenReturnsTrue() { // Assign ICommandValidator validator = new DefaultCommandValidator(); CommandWithUriProperty command = new CommandWithUriProperty(); command.Property1 = new Uri("/test/values", UriKind.Relative); CommandHandlerRequest request = new CommandHandlerRequest(this.configuration, command); // Act bool result = validator.Validate(request); // Assert // A lots of properties of Uri throw exceptions but its still valid Assert.True(result); Assert.Equal(0, request.ModelState.Count); }
public void WhenValidatingInvalidMixedValidatableCommandThenReturnsFalse() { // Assign ICommandValidator validator = new DefaultCommandValidator(); MixedValidatableCommand command = new MixedValidatableCommand(false); command.Property1 = "123456789456132456"; CommandHandlerRequest request = new CommandHandlerRequest(this.configuration, command); // Act bool result = validator.Validate(request); // Assert Assert.False(result); // Validator ignore IValidatableObject validation until DataAnnotations succeed. Assert.Equal(1, request.ModelState.Count); }