/// <summary> /// Tests whether <see cref="BadRequestObjectResult"/> contains the controller's <see cref="ModelStateDictionary"/> as object error. /// </summary> /// <param name="badRequestTestBuilder">Instance of <see cref="IBadRequestTestBuilder"/> type.</param> /// <returns>The same <see cref="IAndBadRequestTestBuilder"/>.</returns> public static IAndBadRequestTestBuilder WithModelStateError(this IBadRequestTestBuilder badRequestTestBuilder) { var actualBadRequestTestBuilder = GetBadRequestTestBuilder(badRequestTestBuilder); return(actualBadRequestTestBuilder .WithModelStateError(actualBadRequestTestBuilder.TestContext.ModelState)); }
/// <summary> /// Tests whether <see cref="BadRequestObjectResult"/> contains specific <see cref="ModelStateDictionary"/>. /// </summary> /// <param name="badRequestTestBuilder">Instance of <see cref="IBadRequestTestBuilder"/> type.</param> /// <param name="modelState"><see cref="ModelStateDictionary"/> to deeply compare to the actual one.</param> /// <returns>The same <see cref="IAndBadRequestTestBuilder"/>.</returns> public static IAndBadRequestTestBuilder WithModelStateError( this IBadRequestTestBuilder badRequestTestBuilder, ModelStateDictionary modelState) { var actualBadRequestTestBuilder = GetBadRequestTestBuilder(badRequestTestBuilder); var badRequestObjectResultValue = actualBadRequestTestBuilder.GetBadRequestObjectResultValue(); var actualModelState = actualBadRequestTestBuilder.GetModelStateFromSerializableError(badRequestObjectResultValue); var modelStateKeys = modelState.Keys.ToList(); var actualModelStateKeys = actualModelState.Keys.ToList(); var expectedKeysCount = modelStateKeys.Count; var actualKeysCount = actualModelStateKeys.Count; if (expectedKeysCount != actualKeysCount) { throw new BadRequestResultAssertionException(string.Format( "{0} bad request model state dictionary to contain {1} keys, but found {2}.", actualBadRequestTestBuilder.TestContext.ExceptionMessagePrefix, expectedKeysCount, actualKeysCount)); } var expectedModelStateSortedKeys = modelStateKeys.OrderBy(k => k).ToList(); foreach (var expectedKey in expectedModelStateSortedKeys) { if (!actualModelState.ContainsKey(expectedKey)) { throw new BadRequestResultAssertionException(string.Format( "{0} bad request model state dictionary to contain {1} key, but none found.", actualBadRequestTestBuilder.TestContext.ExceptionMessagePrefix, expectedKey)); } var actualSortedErrors = GetSortedErrorMessagesForModelStateKey(actualModelState[expectedKey].Errors); var expectedSortedErrors = GetSortedErrorMessagesForModelStateKey(modelState[expectedKey].Errors); if (expectedSortedErrors.Count != actualSortedErrors.Count) { throw new BadRequestResultAssertionException(string.Format( "{0} bad request model state dictionary to contain {1} errors for {2} key, but found {3}.", actualBadRequestTestBuilder.TestContext.ExceptionMessagePrefix, expectedSortedErrors.Count, expectedKey, actualSortedErrors.Count)); } for (int i = 0; i < expectedSortedErrors.Count; i++) { var expectedError = expectedSortedErrors[i]; var actualError = actualSortedErrors[i]; actualBadRequestTestBuilder.ValidateErrorMessage(expectedError, actualError); } } return(actualBadRequestTestBuilder); }
/// <summary> /// Tests whether <see cref="BadRequestObjectResult"/> contains deeply equal error value as the provided error object. /// </summary> /// <typeparam name="TError">Type of error object.</typeparam> /// <param name="builder">Instance of <see cref="IBadRequestTestBuilder"/> type.</param> /// <param name="error">Error object.</param> /// <returns>Test builder of type <see cref="IModelDetailsTestBuilder{TError}"/>.</returns> public static IAndModelDetailsTestBuilder <TError> WithError <TError>( this IBadRequestTestBuilder builder, TError error) { var actualBuilder = (IBaseTestBuilderWithResponseModel)builder; return(actualBuilder.WithModel(error)); }
/// <summary> /// Tests whether <see cref="BadRequestObjectResult"/> contains specific model state errors using test builder. /// </summary> /// <param name="badRequestTestBuilder">Instance of <see cref="IBadRequestTestBuilder"/> type.</param> /// <param name="modelStateTestBuilder">Model state errors test builder.</param> /// <returns>The same <see cref="IAndBadRequestTestBuilder"/>.</returns> public static IAndBadRequestTestBuilder WithModelStateError( this IBadRequestTestBuilder badRequestTestBuilder, Action <IModelStateTestBuilder> modelStateTestBuilder) { var actualBadRequestTestBuilder = GetBadRequestTestBuilder(badRequestTestBuilder); actualBadRequestTestBuilder.TestContext.Model = actualBadRequestTestBuilder.GetBadRequestObjectResultValue(); var newModelStateTestBuilder = new ModelStateTestBuilder( actualBadRequestTestBuilder.TestContext, modelState: actualBadRequestTestBuilder.GetModelStateFromSerializableError(actualBadRequestTestBuilder.TestContext.Model)); modelStateTestBuilder(newModelStateTestBuilder); return(actualBadRequestTestBuilder); }
private static BadRequestTestBuilder <BadRequestObjectResult> GetBadRequestTestBuilder(IBadRequestTestBuilder badRequestTestBuilder) { var actualBadRequestTestBuilder = badRequestTestBuilder as BadRequestTestBuilder <BadRequestObjectResult>; if (actualBadRequestTestBuilder == null) { var badRequestTestBuilderBase = (BaseTestBuilderWithInvokedAction)badRequestTestBuilder; throw new BadRequestResultAssertionException(string.Format( "{0} bad request result to contain error object, but it could not be found.", badRequestTestBuilderBase.TestContext.ExceptionMessagePrefix)); } return(actualBadRequestTestBuilder); }
private static BadRequestTestBuilder<BadRequestObjectResult> GetBadRequestTestBuilder(IBadRequestTestBuilder badRequestTestBuilder) { var actualBadRequestTestBuilder = badRequestTestBuilder as BadRequestTestBuilder<BadRequestObjectResult>; if (actualBadRequestTestBuilder == null) { var badRequestTestBuilderBase = (BaseTestBuilderWithInvokedAction)badRequestTestBuilder; throw new BadRequestResultAssertionException(string.Format( "{0} bad request result to contain error object, but it could not be found.", badRequestTestBuilderBase.TestContext.ExceptionMessagePrefix)); } return actualBadRequestTestBuilder; }
/// <summary> /// Tests whether the <see cref="BadRequestObjectResult"/> /// contains <see cref="IOutputFormatter"/> of the provided type. /// </summary> /// <param name="badRequestTestBuilder"> /// Instance of <see cref="IBadRequestTestBuilder"/> type. /// </param> /// <returns>The same <see cref="IAndBadRequestTestBuilder"/>.</returns> public static IAndBadRequestTestBuilder ContainingOutputFormatterOfType <TOutputFormatter>( this IBadRequestTestBuilder badRequestTestBuilder) where TOutputFormatter : IOutputFormatter => badRequestTestBuilder .ContainingOutputFormatterOfType <IAndBadRequestTestBuilder, TOutputFormatter>();
private static BadRequestTestBuilder <BadRequestObjectResult> GetBadRequestTestBuilder(IBadRequestTestBuilder badRequestTestBuilder) { var actualBadRequestTestBuilder = badRequestTestBuilder as BadRequestTestBuilder <BadRequestObjectResult>; if (actualBadRequestTestBuilder == null) { var badRequestTestBuilderBase = (BaseTestBuilderWithInvokedAction)badRequestTestBuilder; throw new BadRequestResultAssertionException(string.Format( "When calling {0} action in {1} expected bad request result to contain error object, but it could not be found.", badRequestTestBuilderBase.ActionName, badRequestTestBuilderBase.Controller.GetName())); } return(actualBadRequestTestBuilder); }
/// <summary> /// Tests whether <see cref="BadRequestObjectResult"/> contains specific model state errors using test builder. /// </summary> /// <typeparam name="TRequestModel">Type of model for which the model state errors will be tested.</typeparam> /// <param name="badRequestTestBuilder">Instance of <see cref="IBadRequestTestBuilder"/> type.</param> /// <returns>The same <see cref="IAndBadRequestTestBuilder"/>.</returns> public static IModelErrorTestBuilder <TRequestModel> WithModelStateErrorFor <TRequestModel>(this IBadRequestTestBuilder badRequestTestBuilder) { var actualBadRequestTestBuilder = GetBadRequestTestBuilder(badRequestTestBuilder); actualBadRequestTestBuilder.TestContext.Model = actualBadRequestTestBuilder.GetBadRequestObjectResultValue(); return(new ModelErrorTestBuilder <TRequestModel>( actualBadRequestTestBuilder.TestContext, modelState: actualBadRequestTestBuilder.GetModelStateFromSerializableError(actualBadRequestTestBuilder.TestContext.Model))); }