public void OnProvidersExecuting_CachesViewStartFactories()
        {
            // Arrange
            var descriptor = new PageActionDescriptor
            {
                RelativePath      = "/Home/Path1/File.cshtml",
                ViewEnginePath    = "/Home/Path1/File.cshtml",
                FilterDescriptors = new FilterDescriptor[0],
            };

            var loader = new Mock <IPageLoader>();

            loader
            .Setup(l => l.Load(It.IsAny <PageActionDescriptor>()))
            .Returns(CreateCompiledPageActionDescriptor(descriptor, pageType: typeof(PageWithModel)));

            var razorPageFactoryProvider = new Mock <IRazorPageFactoryProvider>();

            Func <IRazorPage> factory1 = () => null;
            Func <IRazorPage> factory2 = () => null;

            razorPageFactoryProvider
            .Setup(f => f.CreateFactory("/Home/Path1/_ViewStart.cshtml"))
            .Returns(new RazorPageFactoryResult(new CompiledViewDescriptor(), factory1));
            razorPageFactoryProvider
            .Setup(f => f.CreateFactory("/_ViewStart.cshtml"))
            .Returns(new RazorPageFactoryResult(new CompiledViewDescriptor(), factory2));

            var fileProvider = new TestFileProvider();

            fileProvider.AddFile("/Home/Path1/_ViewStart.cshtml", "content1");
            fileProvider.AddFile("/_ViewStart.cshtml", "content2");
            var accessor = Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider);

            var defaultRazorProject = new FileProviderRazorProject(accessor, _hostingEnvironment);

            var invokerProvider = CreateInvokerProvider(
                loader.Object,
                CreateActionDescriptorCollection(descriptor),
                razorPageFactoryProvider: razorPageFactoryProvider.Object,
                razorProject: defaultRazorProject);

            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;

            Assert.Equal(new[] { factory2, factory1 }, entry.ViewStartFactories);
        }
Пример #2
0
        public CompiledPageRouteModelProviderTest()
        {
            FileProvider = new TestFileProvider();
            Project      = new FileProviderRazorProject(
                Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == FileProvider),
                Mock.Of <IHostingEnvironment>(e => e.ContentRootPath == "BasePath"));
            TemplateEngine = new RazorTemplateEngine(RazorEngine.Create(), Project);

            PagesOptions = new RazorPagesOptions();
            Provider     = new TestCompiledPageRouteModelProvider(new ApplicationPartManager(), Options.Create(PagesOptions), TemplateEngine, NullLoggerFactory.Instance);
        }
Пример #3
0
        private TestCompiledPageRouteModelProvider CreateProvider(
            RazorPagesOptions options = null,
            IList <CompiledViewDescriptor> descriptors = null,
            TestFileProvider fileProvider = null)
        {
            options      = options ?? new RazorPagesOptions();
            fileProvider = fileProvider ?? new TestFileProvider();
            var project = new FileProviderRazorProject(
                Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider),
                Mock.Of <IHostingEnvironment>(e => e.ContentRootPath == "BasePath"));
            var templateEngine = new RazorTemplateEngine(RazorEngine.Create(), project);

            var provider = new TestCompiledPageRouteModelProvider(
                new ApplicationPartManager(),
                Options.Create(options),
                templateEngine,
                NullLogger <CompiledPageRouteModelProvider> .Instance);

            provider.Descriptors.AddRange(descriptors ?? Array.Empty <CompiledViewDescriptor>());

            return(provider);
        }