public static string GenerateLink(
            this IUrlHelper urlHelper,
            LinkGenerationTestContext linkGenerationTestContext,
            ControllerTestContext controllerTestContext)
        {
            string uri = null;
            if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.Location))
            {
                uri = linkGenerationTestContext.Location;
            }
            else if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.RouteName))
            {
                uri = urlHelper.RouteUrl(
                    linkGenerationTestContext.RouteName,
                    linkGenerationTestContext.RouteValues);
            }
            else
            {
                linkGenerationTestContext.Action = linkGenerationTestContext.Action
                    ?? controllerTestContext.RouteData.Values["action"] as string
                    ?? controllerTestContext.ActionName;

                linkGenerationTestContext.Controller = linkGenerationTestContext.Controller
                    ?? controllerTestContext.RouteData.Values["controller"] as string
                    ?? controllerTestContext.ControllerContext.ActionDescriptor.ControllerName;

                uri = urlHelper.Action(
                    linkGenerationTestContext.Action,
                    linkGenerationTestContext.Controller,
                    linkGenerationTestContext.RouteValues);
            }

            return uri;
        }
        public static void Validate(
            ControllerTestContext controllerTestContext,
            LinkGenerationTestContext linkGenerationTestContext,
            LambdaExpression expectedRouteValuesAsLambdaExpression,
            Action<string, string, string> failedValidationAction)
        {
            var actionContext = controllerTestContext.ComponentContext;
            if (!actionContext.RouteData.Routers.Any())
            {
                actionContext.RouteData.Routers.Add(TestApplication.Router);
            }

            var urlHelper = linkGenerationTestContext.UrlHelper ?? TestServiceProvider
                .GetRequiredService<IUrlHelperFactory>()
                .GetUrlHelper(actionContext);

            ICollection<string> ignoredRouteKeys;
            var expectedUri = urlHelper.ExpressionLink(
                expectedRouteValuesAsLambdaExpression,
                out ignoredRouteKeys);

            var actualUri = urlHelper.GenerateLink(
                linkGenerationTestContext,
                controllerTestContext,
                ignoredRouteKeys);

            if (!string.Equals(expectedUri, actualUri, StringComparison.OrdinalIgnoreCase))
            {
                failedValidationAction(
                    "to have resolved location to",
                    $"{expectedUri.GetErrorMessageName()}",
                    $"in fact received {actualUri.GetErrorMessageName()}");
            }
        }
Exemplo n.º 3
0
        private static IAndRedirectTestBuilder ProcessRouteLambdaExpression <TController>(
            dynamic redirectTestBuilder,
            LambdaExpression actionCall)
        {
            redirectTestBuilder.IncludeCountCheck = false;

            ExpressionLinkValidator.Validate(
                redirectTestBuilder.TestContext,
                LinkGenerationTestContext.FromRedirectResult(redirectTestBuilder.ActionResult),
                actionCall,
                new Action <string, string, string>((pr, exp, act) =>
                                                    redirectTestBuilder.ThrowNewRedirectResultAssertionException(pr, exp, act)));

            return(redirectTestBuilder);
        }
Exemplo n.º 4
0
        private static IAndCreatedTestBuilder ProcessRouteLambdaExpression <TController>(
            dynamic createdTestBuilder,
            LambdaExpression actionCall)
        {
            createdTestBuilder.IncludeCountCheck = false;

            ExpressionLinkValidator.Validate(
                createdTestBuilder.TestContext,
                LinkGenerationTestContext.FromCreatedResult(createdTestBuilder.TestContext.MethodResult as IActionResult),
                actionCall,
                new Action <string, string, string>((pr, exp, act) =>
                                                    createdTestBuilder.ThrowNewCreatedResultAssertionException(pr, exp, act)));

            return(createdTestBuilder);
        }
Exemplo n.º 5
0
        public static string GenerateLink(
            this IUrlHelper urlHelper,
            LinkGenerationTestContext linkGenerationTestContext,
            ControllerTestContext controllerTestContext,
            ICollection <string> ignoredRouteKeys = null)
        {
            if (ignoredRouteKeys != null)
            {
                linkGenerationTestContext.RouteValues = linkGenerationTestContext
                                                        .RouteValues
                                                        ?.Where(kvp => !ignoredRouteKeys.Contains(kvp.Key))
                                                        .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            }

            string uri = null;

            if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.Location))
            {
                uri = linkGenerationTestContext.Location;
            }
            else if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.RouteName))
            {
                uri = urlHelper.RouteUrl(
                    linkGenerationTestContext.RouteName,
                    linkGenerationTestContext.RouteValues);
            }
            else
            {
                linkGenerationTestContext.Action = linkGenerationTestContext.Action
                                                   ?? controllerTestContext.RouteData.Values["action"] as string
                                                   ?? controllerTestContext.MethodName;

                linkGenerationTestContext.Controller = linkGenerationTestContext.Controller
                                                       ?? controllerTestContext.RouteData.Values["controller"] as string
                                                       ?? controllerTestContext.ComponentContext.ActionDescriptor.ControllerName;

                uri = urlHelper.Action(
                    linkGenerationTestContext.Action,
                    linkGenerationTestContext.Controller,
                    linkGenerationTestContext.RouteValues);
            }

            return(uri);
        }
Exemplo n.º 6
0
        private static IAndAcceptedTestBuilder ProcessRouteLambdaExpression(
            IAcceptedTestBuilder acceptedTestBuilder,
            LambdaExpression actionCall)
        {
            var actualBuilder = GetActualBuilder(acceptedTestBuilder);

            actualBuilder.IncludeCountCheck = false;

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

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

            return((IAndAcceptedTestBuilder)acceptedTestBuilder);
        }
        public static string GenerateLink(
            this IUrlHelper urlHelper,
            LinkGenerationTestContext linkGenerationTestContext,
            ControllerTestContext controllerTestContext,
            ICollection<string> ignoredRouteKeys = null)
        {
            if (ignoredRouteKeys != null)
            {
                linkGenerationTestContext.RouteValues = linkGenerationTestContext
                    .RouteValues
                    ?.Where(kvp => !ignoredRouteKeys.Contains(kvp.Key))
                    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            }

            string uri = null;
            if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.Location))
            {
                uri = linkGenerationTestContext.Location;
            }
            else if (!string.IsNullOrWhiteSpace(linkGenerationTestContext.RouteName))
            {
                uri = urlHelper.RouteUrl(
                    linkGenerationTestContext.RouteName,
                    linkGenerationTestContext.RouteValues);
            }
            else
            {
                linkGenerationTestContext.Action = linkGenerationTestContext.Action
                    ?? controllerTestContext.RouteData.Values["action"] as string
                    ?? controllerTestContext.MethodName;

                linkGenerationTestContext.Controller = linkGenerationTestContext.Controller
                    ?? controllerTestContext.RouteData.Values["controller"] as string
                    ?? controllerTestContext.ComponentContext.ActionDescriptor.ControllerName;

                uri = urlHelper.Action(
                    linkGenerationTestContext.Action,
                    linkGenerationTestContext.Controller,
                    linkGenerationTestContext.RouteValues);
            }

            return uri;
        }