/// <summary>
        /// Tests whether the <see cref="ActionResult"/>
        /// contains error object of the provided type.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult"/> type.
        /// </param>
        /// <typeparam name="TError">Type of error object.</typeparam>
        /// <returns>Test builder of type <see cref="IModelDetailsTestBuilder{TError}"/>.</returns>
        public static IAndModelDetailsTestBuilder <TError> WithErrorOfType <TError>(
            this IBaseTestBuilderWithErrorResult baseTestBuilderWithErrorResult)
        {
            var actualBuilder = (IBaseTestBuilderWithResponseModel)baseTestBuilderWithErrorResult;

            return(actualBuilder.WithModelOfType <TError>());
        }
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> contains the
        /// controller's <see cref="ModelStateDictionary"/> as object error.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithModelStateError <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            return(baseTestBuilderWithErrorResult
                   .WithModelStateError(actualBuilder.TestContext.ModelState));
        }
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> contains specific <see cref="ModelStateDictionary"/>.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <param name="modelState"><see cref="ModelStateDictionary"/> to deeply compare to the actual one.</param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithModelStateError <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult,
            ModelStateDictionary modelState)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            var actualModelState = actualBuilder.GetModelStateFromSerializableError();

            var modelStateKeys       = modelState.Keys.ToList();
            var actualModelStateKeys = actualModelState.Keys.ToList();

            var expectedKeysCount = modelStateKeys.Count;
            var actualKeysCount   = actualModelStateKeys.Count;

            if (expectedKeysCount != actualKeysCount)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "model state dictionary",
                    $"to contain {expectedKeysCount} keys",
                    $"instead found {actualKeysCount}");
            }

            var expectedModelStateSortedKeys = modelStateKeys.OrderBy(k => k).ToList();

            foreach (var expectedKey in expectedModelStateSortedKeys)
            {
                if (!actualModelState.ContainsKey(expectedKey))
                {
                    actualBuilder.ThrowNewFailedValidationException(
                        "model state dictionary",
                        $"to contain '{expectedKey}' key",
                        "it was not found");
                }

                var actualSortedErrors   = GetSortedErrorMessagesForModelStateKey(actualModelState[expectedKey].Errors);
                var expectedSortedErrors = GetSortedErrorMessagesForModelStateKey(modelState[expectedKey].Errors);

                if (expectedSortedErrors.Count != actualSortedErrors.Count)
                {
                    actualBuilder.ThrowNewFailedValidationException(
                        "model state dictionary",
                        $"to contain {expectedSortedErrors.Count} errors for the '{expectedKey}' key",
                        $"instead found {actualSortedErrors.Count}");
                }

                for (int i = 0; i < expectedSortedErrors.Count; i++)
                {
                    var expectedError = expectedSortedErrors[i];
                    var actualError   = actualSortedErrors[i];
                    actualBuilder.ValidateErrorMessage(expectedError, actualError);
                }
            }

            return(actualBuilder.ResultTestBuilder);
        }
Example #4
0
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> has
        /// error message passing the given assertions.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <param name="assertions">
        /// Action containing all assertions for the error message.
        /// </param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithErrorMessage <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult,
            Action <string> assertions)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            var actualErrorMessage = actualBuilder.GetErrorMessage();

            assertions(actualErrorMessage);

            return(actualBuilder.ResultTestBuilder);
        }
Example #5
0
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> has
        /// specific text error message provided as string.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <param name="error">Expected error message.</param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithErrorMessage <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult,
            string error)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            var actualErrorMessage = actualBuilder.GetErrorMessage();

            actualBuilder.ValidateErrorMessage(error, actualErrorMessage);

            return(actualBuilder.ResultTestBuilder);
        }
Example #6
0
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> has
        /// specific text error message using test builder.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <returns><see cref="IErrorMessageTestBuilder{TTestBuilder}"/> testing the error message details.</returns>
        public static IErrorMessageTestBuilder <TErrorResultTestBuilder> WithErrorMessage <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            var actualErrorMessage = actualBuilder.GetErrorMessage();

            return(new ErrorMessageTestBuilder <TErrorResultTestBuilder>(
                       actualBuilder.TestContext,
                       actualErrorMessage,
                       actualBuilder.ResultTestBuilder));
        }
Example #7
0
        /// <summary>
        /// Tests whether no specific error is returned
        /// from the error <see cref="ActionResult"/>.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithNoError <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            if (actualBuilder.TestContext.MethodResult is ObjectResult)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "to not have",
                    "error message",
                    "in fact such was found");
            }

            return(actualBuilder.ResultTestBuilder);
        }
        GetActualBuilder <TErrorResultTestBuilder>(
            IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder =
                (IBaseTestBuilderWithErrorResultInternal <TErrorResultTestBuilder>)baseTestBuilderWithErrorResult;

            if (!(actualBuilder.TestContext.MethodResult is ObjectResult))
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "to",
                    "contain error object",
                    "such was not be found");
            }

            return(actualBuilder);
        }
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> contains specific model state errors by using a test builder.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <param name="modelStateTestBuilder">Model state errors test builder.</param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithModelStateError <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult,
            Action <IModelStateTestBuilder> modelStateTestBuilder)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            actualBuilder.TestContext.Model = actualBuilder.GetObjectResultValue();

            var newModelStateTestBuilder = new ModelStateTestBuilder(
                actualBuilder.TestContext,
                actualBuilder.GetModelStateFromSerializableError(actualBuilder.TestContext.Model));

            modelStateTestBuilder(newModelStateTestBuilder);

            return(actualBuilder.ResultTestBuilder);
        }
Example #10
0
        /// <summary>
        /// Tests whether the <see cref="ActionResult"/> has
        /// error message passing the given predicate.
        /// </summary>
        /// <param name="baseTestBuilderWithErrorResult">
        /// Instance of <see cref="IBaseTestBuilderWithErrorResult{TErrorResultTestBuilder}"/> type.
        /// </param>
        /// <param name="predicate">Predicate testing the error message.</param>
        /// <returns>The same error <see cref="ActionResult"/> test builder.</returns>
        public static TErrorResultTestBuilder WithErrorMessage <TErrorResultTestBuilder>(
            this IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult,
            Func <string, bool> predicate)
            where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
        {
            var actualBuilder = GetActualBuilder(baseTestBuilderWithErrorResult);

            var actualErrorMessage = actualBuilder.GetErrorMessage();

            if (!predicate(actualErrorMessage))
            {
                actualBuilder.ThrowNewFailedValidationException(
                    $"error message ('{actualErrorMessage}')",
                    "to pass the given predicate",
                    "it failed");
            }

            return(actualBuilder.ResultTestBuilder);
        }
Example #11
0
 GetActualBuilder <TErrorResultTestBuilder>(
     IBaseTestBuilderWithErrorResult <TErrorResultTestBuilder> baseTestBuilderWithErrorResult)
     where TErrorResultTestBuilder : IBaseTestBuilderWithActionResult
 => (IBaseTestBuilderWithErrorResultInternal <TErrorResultTestBuilder>)baseTestBuilderWithErrorResult;