private MvcEndpointDataSource CreateMvcEndpointDataSource(
            IActionDescriptorCollectionProvider actionDescriptorCollectionProvider = null,
            MvcEndpointInvokerFactory mvcEndpointInvokerFactory = null,
            IEnumerable <IActionDescriptorChangeProvider> actionDescriptorChangeProviders = null)
        {
            if (actionDescriptorCollectionProvider == null)
            {
                var mockDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>();
                mockDescriptorProvider.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(new List <ActionDescriptor>(), 0));

                actionDescriptorCollectionProvider = mockDescriptorProvider.Object;
            }

            var serviceProviderMock = new Mock <IServiceProvider>();

            serviceProviderMock.Setup(m => m.GetService(typeof(IActionDescriptorCollectionProvider))).Returns(actionDescriptorCollectionProvider);

            var dataSource = new MvcEndpointDataSource(
                actionDescriptorCollectionProvider,
                mvcEndpointInvokerFactory ?? new MvcEndpointInvokerFactory(new ActionInvokerFactory(Array.Empty <IActionInvokerProvider>())),
                actionDescriptorChangeProviders ?? Array.Empty <IActionDescriptorChangeProvider>(),
                serviceProviderMock.Object);

            return(dataSource);
        }
Example #2
0
        public void Endpoints_InvokeReturnedEndpoint_ActionInvokerProviderCalled()
        {
            // Arrange
            var featureCollection = new FeatureCollection();

            featureCollection.Set <IEndpointFeature>(new EndpointFeature
            {
                Values = new RouteValueDictionary()
            });

            var httpContextMock = new Mock <HttpContext>();

            httpContextMock.Setup(m => m.Features).Returns(featureCollection);

            var mockDescriptorProviderMock = new Mock <IActionDescriptorCollectionProvider>();

            mockDescriptorProviderMock.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(new List <ActionDescriptor>
            {
                new ActionDescriptor
                {
                    AttributeRouteInfo = new AttributeRouteInfo
                    {
                        Template = string.Empty
                    },
                    FilterDescriptors = new List <FilterDescriptor>()
                }
            }, 0));

            var actionInvokerCalled = false;
            var actionInvokerMock   = new Mock <IActionInvoker>();

            actionInvokerMock.Setup(m => m.InvokeAsync()).Returns(() =>
            {
                actionInvokerCalled = true;
                return(Task.CompletedTask);
            });

            var actionInvokerProviderMock = new Mock <IActionInvokerFactory>();

            actionInvokerProviderMock.Setup(m => m.CreateInvoker(It.IsAny <ActionContext>())).Returns(actionInvokerMock.Object);

            // Act
            var dataSource = new MvcEndpointDataSource(
                mockDescriptorProviderMock.Object,
                new MvcEndpointInvokerFactory(actionInvokerProviderMock.Object),
                Array.Empty <IActionDescriptorChangeProvider>());

            // Assert
            var endpoint        = Assert.Single(dataSource.Endpoints);
            var matcherEndpoint = Assert.IsType <MatcherEndpoint>(endpoint);

            var invokerDelegate = matcherEndpoint.Invoker((next) => Task.CompletedTask);

            invokerDelegate(httpContextMock.Object);

            Assert.True(actionInvokerCalled);
        }
Example #3
0
        private MvcEndpointDataSource CreateMvcEndpointDataSource(
            IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
        {
            var dataSource = new MvcEndpointDataSource(
                actionDescriptorCollectionProvider,
                new MvcEndpointInvokerFactory(new ActionInvokerFactory(Array.Empty <IActionInvokerProvider>())));

            return(dataSource);
        }
Example #4
0
        private MvcEndpointDataSource CreateMvcEndpointDataSource(
            IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
        {
            var dataSource = new MvcEndpointDataSource(
                actionDescriptorCollectionProvider,
                new MvcEndpointInvokerFactory(new ActionInvokerFactory(Array.Empty <IActionInvokerProvider>())),
                new MockParameterPolicyFactory(),
                new MockRoutePatternTransformer());

            return(dataSource);
        }
Example #5
0
        public void Endpoints_AccessParameters_InitializedFromProvider()
        {
            // Arrange
            var routeValue  = "Value";
            var routeValues = new Dictionary <string, string>
            {
                ["Name"] = routeValue
            };
            var displayName      = "DisplayName!";
            var order            = 1;
            var template         = "/Template!";
            var filterDescriptor = new FilterDescriptor(new ControllerActionFilter(), 1);

            var mockDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>();

            mockDescriptorProvider.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(new List <ActionDescriptor>
            {
                new ActionDescriptor
                {
                    RouteValues        = routeValues,
                    DisplayName        = displayName,
                    AttributeRouteInfo = new AttributeRouteInfo
                    {
                        Order    = order,
                        Template = template
                    },
                    FilterDescriptors = new List <FilterDescriptor>
                    {
                        filterDescriptor
                    }
                }
            }, 0));

            // Act
            var dataSource = new MvcEndpointDataSource(
                mockDescriptorProvider.Object,
                new MvcEndpointInvokerFactory(new ActionInvokerFactory(Array.Empty <IActionInvokerProvider>())),
                Array.Empty <IActionDescriptorChangeProvider>());

            // Assert
            var endpoint        = Assert.Single(dataSource.Endpoints);
            var matcherEndpoint = Assert.IsType <MatcherEndpoint>(endpoint);

            object endpointValue = matcherEndpoint.Values["Name"];

            Assert.Equal(routeValue, endpointValue);

            Assert.Equal(displayName, matcherEndpoint.DisplayName);
            Assert.Equal(order, matcherEndpoint.Order);
            Assert.Equal(template, matcherEndpoint.Template);
        }
Example #6
0
        public void ChangeToken_MultipleChangeTokenProviders_ComposedResult()
        {
            // Arrange
            var featureCollection = new FeatureCollection();

            featureCollection.Set <IEndpointFeature>(new EndpointFeature
            {
                Values = new RouteValueDictionary()
            });

            var httpContextMock = new Mock <HttpContext>();

            httpContextMock.Setup(m => m.Features).Returns(featureCollection);

            var mockDescriptorProviderMock = new Mock <IActionDescriptorCollectionProvider>();

            mockDescriptorProviderMock.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(new List <ActionDescriptor>(), 0));

            var actionInvokerMock = new Mock <IActionInvoker>();

            var actionInvokerProviderMock = new Mock <IActionInvokerFactory>();

            actionInvokerProviderMock.Setup(m => m.CreateInvoker(It.IsAny <ActionContext>())).Returns(actionInvokerMock.Object);

            var changeTokenMock = new Mock <IChangeToken>();

            var changeProvider1Mock = new Mock <IActionDescriptorChangeProvider>();

            changeProvider1Mock.Setup(m => m.GetChangeToken()).Returns(changeTokenMock.Object);
            var changeProvider2Mock = new Mock <IActionDescriptorChangeProvider>();

            changeProvider2Mock.Setup(m => m.GetChangeToken()).Returns(changeTokenMock.Object);

            var dataSource = new MvcEndpointDataSource(
                mockDescriptorProviderMock.Object,
                new MvcEndpointInvokerFactory(actionInvokerProviderMock.Object),
                new[] { changeProvider1Mock.Object, changeProvider2Mock.Object });

            // Act
            var changeToken = dataSource.ChangeToken;

            // Assert
            var compositeChangeToken = Assert.IsType <CompositeChangeToken>(changeToken);

            Assert.Equal(2, compositeChangeToken.ChangeTokens.Count);
        }