Beispiel #1
0
 public void OnProvidersExecuted(ActionInvokerProviderContext context)
 {
 }
        public void OnProvidersExecuting_WithModel_PopulatesCacheEntry()
        {
            // Arrange
            var descriptor = CreateCompiledPageActionDescriptor(
                new PageActionDescriptor
            {
                RelativePath      = "/Path1",
                FilterDescriptors = new FilterDescriptor[0]
            },
                pageType: typeof(PageWithModel),
                modelType: typeof(DerivedTestPageModel));

            Func <PageContext, ViewContext, object>            factory  = (a, b) => null;
            Func <PageContext, ViewContext, object, ValueTask> releaser = (a, b, c) => default;
            Func <PageContext, object>            modelFactory          = _ => null;
            Func <PageContext, object, ValueTask> modelDisposer         = (_, __) => default;

            var loader = Mock.Of <PageLoader>();
            var pageFactoryProvider = new Mock <IPageFactoryProvider>();

            pageFactoryProvider
            .Setup(f => f.CreatePageFactory(It.IsAny <CompiledPageActionDescriptor>()))
            .Returns(factory);
            pageFactoryProvider
            .Setup(f => f.CreateAsyncPageDisposer(It.IsAny <CompiledPageActionDescriptor>()))
            .Returns(releaser);

            var modelFactoryProvider = new Mock <IPageModelFactoryProvider>();

            modelFactoryProvider
            .Setup(f => f.CreateModelFactory(It.IsAny <CompiledPageActionDescriptor>()))
            .Returns(modelFactory);
            modelFactoryProvider
            .Setup(f => f.CreateAsyncModelDisposer(It.IsAny <CompiledPageActionDescriptor>()))
            .Returns(modelDisposer);

            var invokerProvider = CreateInvokerProvider(
                loader,
                pageFactoryProvider.Object,
                modelFactoryProvider.Object);

            var context = new ActionInvokerProviderContext(new ActionContext()
            {
                ActionDescriptor = descriptor,
                HttpContext      = new DefaultHttpContext(),
                RouteData        = new RouteData(),
            });

            // Act
            invokerProvider.OnProvidersExecuting(context);

            // Assert
            Assert.NotNull(context.Result);

            var actionInvoker = Assert.IsType <PageActionInvoker>(context.Result);

            var entry = actionInvoker.CacheEntry;
            var compiledPageActionDescriptor = Assert.IsType <CompiledPageActionDescriptor>(entry.ActionDescriptor);

            Assert.Equal(descriptor.RelativePath, compiledPageActionDescriptor.RelativePath);
            Assert.Same(factory, entry.PageFactory);
            Assert.Same(releaser, entry.ReleasePage);
            Assert.Same(modelFactory, entry.ModelFactory);
            Assert.Same(modelDisposer, entry.ReleaseModel);
            Assert.NotNull(entry.ViewDataFactory);

            var pageContext = actionInvoker.PageContext;

            Assert.Same(compiledPageActionDescriptor, pageContext.ActionDescriptor);
            Assert.Same(context.ActionContext.HttpContext, pageContext.HttpContext);
            Assert.Same(context.ActionContext.ModelState, pageContext.ModelState);
            Assert.Same(context.ActionContext.RouteData, pageContext.RouteData);
            Assert.Empty(pageContext.ValueProviderFactories);
            Assert.NotNull(Assert.IsType <ViewDataDictionary <TestPageModel> >(pageContext.ViewData));
            Assert.Empty(pageContext.ViewStartFactories);
        }