예제 #1
0
        public DynamicPageEndpointMatcherPolicyTest()
        {
            var actions = new ActionDescriptor[]
            {
                new PageActionDescriptor()
                {
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        ["page"] = "/Index",
                    },
                    DisplayName = "/Index",
                },
                new PageActionDescriptor()
                {
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        ["page"] = "/About",
                    },
                    DisplayName = "/About"
                },
            };

            PageEndpoints = new[]
            {
                new Endpoint(_ => Task.CompletedTask, new EndpointMetadataCollection(actions[0]), "Test1"),
                new Endpoint(_ => Task.CompletedTask, new EndpointMetadataCollection(actions[1]), "Test2"),
            };

            DynamicEndpoint = new Endpoint(
                _ => Task.CompletedTask,
                new EndpointMetadataCollection(new object[]
            {
                new DynamicPageRouteValueTransformerMetadata(typeof(CustomTransformer), State),
            }),
                "dynamic");

            DataSource = new DefaultEndpointDataSource(PageEndpoints);

            Selector = new TestDynamicPageEndpointSelector(DataSource);

            var services = new ServiceCollection();

            services.AddRouting();
            services.AddTransient <CustomTransformer>(s =>
            {
                var transformer       = new CustomTransformer();
                transformer.Transform = (c, values, state) => Transform(c, values, state);
                transformer.Filter    = (c, values, state, endpoints) => Filter(c, values, state, endpoints);
                return(transformer);
            });
            Services = services.BuildServiceProvider();

            Comparer = Services.GetRequiredService <EndpointMetadataComparer>();

            LoadedEndpoints = new[]
            {
                new Endpoint(_ => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test1"),
                new Endpoint(_ => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test2"),
                new Endpoint(_ => Task.CompletedTask, EndpointMetadataCollection.Empty, "ReplacedLoaded")
            };

            var loader = new Mock <PageLoader>();

            loader
            .Setup(l => l.LoadAsync(It.IsAny <PageActionDescriptor>()))
            .Returns <PageActionDescriptor>(descriptor => Task.FromResult(new CompiledPageActionDescriptor
            {
                Endpoint = descriptor.DisplayName switch
                {
                    "/Index" => LoadedEndpoints[0],
                    "/About" => LoadedEndpoints[1],
                    "/ReplacedEndpoint" => LoadedEndpoints[2],
                    _ => throw new InvalidOperationException($"Invalid endpoint '{descriptor.DisplayName}'.")
                }
            }));
        public DynamicPageEndpointMatcherPolicyTest()
        {
            var actions = new ActionDescriptor[]
            {
                new PageActionDescriptor()
                {
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        ["page"] = "/Index",
                    },
                },
                new PageActionDescriptor()
                {
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        ["page"] = "/About",
                    },
                },
            };

            PageEndpoints = new[]
            {
                new Endpoint(_ => Task.CompletedTask, new EndpointMetadataCollection(actions[0]), "Test1"),
                new Endpoint(_ => Task.CompletedTask, new EndpointMetadataCollection(actions[1]), "Test2"),
            };

            DynamicEndpoint = new Endpoint(
                _ => Task.CompletedTask,
                new EndpointMetadataCollection(new object[]
            {
                new DynamicPageRouteValueTransformerMetadata(typeof(CustomTransformer)),
            }),
                "dynamic");

            DataSource = new DefaultEndpointDataSource(PageEndpoints);

            Selector = new TestDynamicPageEndpointSelector(DataSource);

            var services = new ServiceCollection();

            services.AddRouting();
            services.AddScoped <CustomTransformer>(s =>
            {
                var transformer       = new CustomTransformer();
                transformer.Transform = (c, values) => Transform(c, values);
                return(transformer);
            });
            Services = services.BuildServiceProvider();

            Comparer = Services.GetRequiredService <EndpointMetadataComparer>();

            LoadedEndpoint = new Endpoint(_ => Task.CompletedTask, EndpointMetadataCollection.Empty, "Loaded");

            var loader = new Mock <PageLoader>();

            loader
            .Setup(l => l.LoadAsync(It.IsAny <PageActionDescriptor>()))
            .Returns(Task.FromResult(new CompiledPageActionDescriptor()
            {
                Endpoint = LoadedEndpoint,
            }));
            Loader = loader.Object;
        }