Esempio n. 1
0
 /// <summary>
 /// Tests whether <see cref="Microsoft.AspNetCore.Mvc.RedirectToActionResult"/> or <see cref="Microsoft.AspNetCore.Mvc.RedirectToRouteResult"/> redirects to specific asynchronous action.
 /// </summary>
 /// <typeparam name="TController">Type of expected redirect controller.</typeparam>
 /// <param name="builder">Instance of <see cref="IRedirectTestBuilder"/> type.</param>
 /// <param name="actionCall">Method call expression indicating the expected asynchronous redirect action.</param>
 /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
 public static IAndRedirectTestBuilder To <TController>(
     this IRedirectTestBuilder builder,
     Expression <Func <TController, Task> > actionCall)
     where TController : class
 {
     return(ProcessRouteLambdaExpression <TController>(builder, actionCall));
 }
Esempio n. 2
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToActionResult"/> or <see cref="RedirectToRouteResult"/>
        /// has the same fragment as the provided one.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="fragment">Expected fragment.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder WithFragment(
            this IRedirectTestBuilder redirectTestBuilder,
            string fragment)
        {
            var actualBuilder = (IBaseTestBuilderWithRedirectResultInternal <IAndRedirectTestBuilder>)redirectTestBuilder;

            RuntimeBinderValidator.ValidateBinding(() =>
            {
                var actualFragment = actualBuilder
                                     .TestContext
                                     .MethodResult
                                     .AsDynamic()
                                     .Fragment;

                if (fragment != actualFragment)
                {
                    actualBuilder.ThrowNewFailedValidationException(
                        "fragment",
                        $"to be {fragment.GetErrorMessageName()}",
                        $"instead received {actualFragment.GetErrorMessageName()}");
                }
            });

            return(actualBuilder.ResultTestBuilder);
        }
Esempio n. 3
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToActionResult"/>
        /// result has specific controller name.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="controllerName">Expected controller name.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder ToController(
            this IRedirectTestBuilder redirectTestBuilder,
            string controllerName)
        {
            var actualBuilder = GetRedirectTestBuilder <RedirectToActionResult>(redirectTestBuilder, "controller name");

            RouteActionResultValidator.ValidateControllerName(
                actualBuilder.ActionResult,
                controllerName,
                actualBuilder.ThrowNewFailedValidationException);

            return(actualBuilder);
        }
Esempio n. 4
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToPageResult"/>
        /// result has specific page name.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="pageName">Expected page name.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder ToPage(
            this IRedirectTestBuilder redirectTestBuilder,
            string pageName)
        {
            var actualBuilder = GetRedirectTestBuilder <RedirectToPageResult>(redirectTestBuilder, "page name");

            var actualPageName = actualBuilder.ActionResult.PageName;

            if (pageName != actualPageName)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "to have",
                    $"'{pageName}' page name",
                    $"instead received {actualPageName.GetErrorMessageName()}");
            }

            return(actualBuilder.ResultTestBuilder);
        }
Esempio n. 5
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToPageResult"/>
        /// result has specific URL host.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="host">Expected URL host.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder WithHost(
            this IRedirectTestBuilder redirectTestBuilder,
            string host)
        {
            var actualBuilder = GetRedirectTestBuilder <RedirectToPageResult>(redirectTestBuilder, "host");

            var actualHost = actualBuilder.ActionResult.Host;

            if (host != actualHost)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "host",
                    $"to be {host.GetErrorMessageName()}",
                    $"instead received {actualHost.GetErrorMessageName()}");
            }

            return(actualBuilder.ResultTestBuilder);
        }
Esempio n. 6
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToPageResult"/>
        /// result has specific URL protocol.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="protocol">Expected URL protocol.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder WithProtocol(
            this IRedirectTestBuilder redirectTestBuilder,
            string protocol)
        {
            var actualBuilder = GetRedirectTestBuilder <RedirectToPageResult>(redirectTestBuilder, "protocol");

            var actualProtocol = actualBuilder.ActionResult.Protocol;

            if (protocol != actualProtocol)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "protocol",
                    $"to be {protocol.GetErrorMessageName()}",
                    $"instead received {actualProtocol.GetErrorMessageName()}");
            }

            return(actualBuilder.ResultTestBuilder);
        }
Esempio n. 7
0
        /// <summary>
        /// Tests whether the <see cref="RedirectToPageResult"/>
        /// result has specific page handler.
        /// </summary>
        /// <param name="redirectTestBuilder">
        /// Instance of <see cref="IRedirectTestBuilder"/> type.
        /// </param>
        /// <param name="pageHandler">Expected page handler.</param>
        /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
        public static IAndRedirectTestBuilder WithPageHandler(
            this IRedirectTestBuilder redirectTestBuilder,
            string pageHandler)
        {
            var actualBuilder = GetRedirectTestBuilder <RedirectToPageResult>(redirectTestBuilder, "page handler");

            var actualPageHandler = actualBuilder.ActionResult.PageHandler;

            if (pageHandler != actualPageHandler)
            {
                actualBuilder.ThrowNewFailedValidationException(
                    "page handler",
                    $"to be {pageHandler.GetErrorMessageName()}",
                    $"instead received {actualPageHandler.GetErrorMessageName()}");
            }

            return(actualBuilder.ResultTestBuilder);
        }
        private static IAndRedirectTestBuilder ProcessRouteLambdaExpression(
            IRedirectTestBuilder redirectTestBuilder,
            LambdaExpression actionCall)
        {
            var actualBuilder = GetActualBuilder(redirectTestBuilder);

            actualBuilder.IncludeCountCheck = false;

            var controllerTestContext = actualBuilder.TestContext as ControllerTestContext;
            var actionResult          = actualBuilder.TestContext.MethodResult as IActionResult;

            ExpressionLinkValidator.Validate(
                controllerTestContext,
                LinkGenerationTestContext.FromRedirectResult(actionResult),
                actionCall,
                actualBuilder.ThrowNewFailedValidationException);

            return((IAndRedirectTestBuilder)actualBuilder);
        }
Esempio n. 9
0
        private static RedirectTestBuilder <TRedirectResult> GetRedirectTestBuilder <TRedirectResult>(
            IRedirectTestBuilder redirectTestBuilder,
            string containment)
            where TRedirectResult : ActionResult
        {
            var actualRedirectTestBuilder = redirectTestBuilder as RedirectTestBuilder <TRedirectResult>;

            if (actualRedirectTestBuilder == null)
            {
                var redirectTestBuilderBase = (BaseTestBuilderWithComponent)redirectTestBuilder;

                throw new RedirectResultAssertionException(string.Format(
                                                               "{0} redirect result to contain {1}, but such could not be found.",
                                                               redirectTestBuilderBase.TestContext.ExceptionMessagePrefix,
                                                               containment));
            }

            return(actualRedirectTestBuilder);
        }
 GetActualBuilder(IRedirectTestBuilder redirectTestBuilder)
 => (IBaseTestBuilderWithRouteValuesResultInternal <IAndRedirectTestBuilder>)redirectTestBuilder;
 /// <summary>
 /// Tests whether <see cref="RedirectToActionResult"/> or <see cref="RedirectToRouteResult"/>
 /// redirects to specific action.
 /// </summary>
 /// <typeparam name="TController">Type of expected redirect controller.</typeparam>
 /// <param name="builder">Instance of <see cref="IRedirectTestBuilder"/> type.</param>
 /// <param name="actionCall">Method call expression indicating the expected redirect action.</param>
 /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
 public static IAndRedirectTestBuilder To <TController>(
     this IRedirectTestBuilder builder,
     Expression <Action <TController> > actionCall)
     where TController : class
 => ProcessRouteLambdaExpression(builder, actionCall);
Esempio n. 12
0
 /// <summary>
 /// Tests whether the <see cref="RedirectToRouteResult"/>
 /// has specific route name.
 /// </summary>
 /// <param name="redirectTestBuilder">
 /// Instance of <see cref="IRedirectTestBuilder"/> type.
 /// </param>
 /// <param name="routeName">Expected route name.</param>
 /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
 public static IAndRedirectTestBuilder ToRoute(
     this IRedirectTestBuilder redirectTestBuilder,
     string routeName)
 => redirectTestBuilder
 .WithRouteName(routeName);
Esempio n. 13
0
 /// <summary>
 /// Tests whether the <see cref="RedirectToActionResult"/> or <see cref="RedirectToRouteResult"/>
 /// has the same <see cref="IUrlHelper"/> type as the provided one.
 /// </summary>
 /// <param name="redirectTestBuilder">
 /// Instance of <see cref="IRedirectTestBuilder"/> type.
 /// </param>
 /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
 public static IAndRedirectTestBuilder WithUrlHelperOfType <TUrlHelper>(
     this IRedirectTestBuilder redirectTestBuilder)
     where TUrlHelper : IUrlHelper
 => redirectTestBuilder
 .WithUrlHelperOfType <IAndRedirectTestBuilder, TUrlHelper>();
Esempio n. 14
0
 /// <summary>
 /// Tests whether the <see cref="RedirectToActionResult"/> or <see cref="RedirectToRouteResult"/>
 /// contains specific route value of the given type with the provided key.
 /// </summary>
 /// <param name="redirectTestBuilder">
 /// Instance of <see cref="IRedirectTestBuilder"/> type.
 /// </param>
 /// <param name="key">Expected route key.</param>
 /// <returns>The same <see cref="IAndRedirectTestBuilder"/>.</returns>
 public static IAndRedirectTestBuilder ContainingRouteValueOfType <TRouteValue>(
     this IRedirectTestBuilder redirectTestBuilder,
     string key)
 => redirectTestBuilder
 .ContainingRouteValueOfType <IAndRedirectTestBuilder, TRouteValue>(key);