public void ApplyConventions_RemovingPropertyModelAsPartOfConvention_Works() { // Arrange var descriptor = new PageActionDescriptor(); var propertyInfo = GetType().GetProperty(nameof(TestProperty), BindingFlags.Instance | BindingFlags.NonPublic); var applicationModel = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var propertyModelConvention = new Mock <IParameterModelBaseConvention>(); var propertyModel = new PagePropertyModel(propertyInfo, new[] { propertyModelConvention.Object }) { Page = applicationModel, }; applicationModel.HandlerProperties.Add(propertyModel); propertyModelConvention.Setup(p => p.Apply(It.IsAny <ParameterModelBase>())) .Callback((ParameterModelBase m) => { var model = Assert.IsType <PagePropertyModel>(m); model.Page.HandlerProperties.Remove(model); }) .Verifiable(); var conventionCollection = new PageConventionCollection(); // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, applicationModel); // Assert propertyModelConvention.Verify(); }
public void ApplyConventions_RemovingParameterModelAsPartOfConventionWorks() { // Arrange var descriptor = new PageActionDescriptor(); var methodInfo = GetType().GetMethod(nameof(OnGet), BindingFlags.Instance | BindingFlags.NonPublic); var parameterInfo = methodInfo.GetParameters()[0]; var applicationModel = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var handlerModel = new PageHandlerModel(methodInfo, Array.Empty <object>()); var parameterModelConvention = new Mock <IParameterModelBaseConvention>(); var parameterModel = new PageParameterModel(parameterInfo, new[] { parameterModelConvention.Object }) { Handler = handlerModel, }; applicationModel.HandlerMethods.Add(handlerModel); handlerModel.Parameters.Add(parameterModel); parameterModelConvention.Setup(p => p.Apply(It.IsAny <ParameterModelBase>())) .Callback((ParameterModelBase m) => { var model = Assert.IsType <PageParameterModel>(m); model.Handler.Parameters.Remove(model); }) .Verifiable(); var conventionCollection = new PageConventionCollection(); // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, applicationModel); // Assert parameterModelConvention.Verify(); }
public void ApplyConventions_InvokesPropertyModelConventions_DeclaredGlobally() { // Arrange var descriptor = new PageActionDescriptor(); var methodInfo = GetType().GetMethod(nameof(OnGet), BindingFlags.Instance | BindingFlags.NonPublic); var propertyInfo = GetType().GetProperty(nameof(TestProperty), BindingFlags.Instance | BindingFlags.NonPublic); var applicationModel = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var handlerModel = new PageHandlerModel(methodInfo, Array.Empty <object>()); var propertyModel = new PagePropertyModel(propertyInfo, Array.Empty <object>()); applicationModel.HandlerMethods.Add(handlerModel); applicationModel.HandlerProperties.Add(propertyModel); var propertyModelConvention = new Mock <IParameterModelBaseConvention>(); propertyModelConvention.Setup(p => p.Apply(It.IsAny <ParameterModelBase>())) .Callback((ParameterModelBase m) => { Assert.Same(propertyModel, m); }) .Verifiable(); var conventionCollection = new PageConventionCollection() { propertyModelConvention.Object }; // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, applicationModel); // Assert propertyModelConvention.Verify(); }
public void ApplyConventions_RemovingHandlerAsPartOfHandlerModelConvention_Works() { // Arrange var descriptor = new PageActionDescriptor(); var methodInfo = GetType().GetMethod(nameof(OnGet), BindingFlags.Instance | BindingFlags.NonPublic); var handlerModelConvention = new Mock <IPageHandlerModelConvention>(); var applicationModel = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var handlerModel = new PageHandlerModel(methodInfo, new[] { handlerModelConvention.Object }) { Page = applicationModel, }; applicationModel.HandlerMethods.Add(handlerModel); handlerModelConvention.Setup(p => p.Apply(It.IsAny <PageHandlerModel>())) .Callback((PageHandlerModel m) => { m.Page.HandlerMethods.Remove(m); }) .Verifiable(); var conventionCollection = new PageConventionCollection(); // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, applicationModel); // Assert handlerModelConvention.Verify(); }
public void ApplyConventions_InvokesApplicationModelConventions_SpecifiedOnHandlerType() { // Arrange var descriptor = new PageActionDescriptor(); var handlerConvention = new Mock <IPageApplicationModelConvention>(); var model = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), new[] { handlerConvention.Object }); var globalConvention = new Mock <IPageApplicationModelConvention>(); globalConvention.Setup(c => c.Apply(It.IsAny <PageApplicationModel>())) .Callback((PageApplicationModel m) => { Assert.Same(model, m); }) .Verifiable(); handlerConvention.Setup(c => c.Apply(It.IsAny <PageApplicationModel>())) .Callback((PageApplicationModel m) => { Assert.Same(model, m); }) .Verifiable(); var conventionCollection = new PageConventionCollection() { globalConvention.Object, }; // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, model); // Assert globalConvention.Verify(); handlerConvention.Verify(); }
public async Task LoadAsync_DoesNotCacheResults() { // Arrange var descriptor = new PageActionDescriptor() { AttributeRouteInfo = new AttributeRouteInfo() { Template = "/test", }, }; var transformer = new Mock <RoutePatternTransformer>(); transformer .Setup(t => t.SubstituteRequiredValues(It.IsAny <RoutePattern>(), It.IsAny <object>())) .Returns <RoutePattern, object>((p, v) => p); var compilerProvider = GetCompilerProvider(); var mvcOptions = Options.Create(new MvcOptions()); var endpointFactory = new PublicActionEndpointFactory(transformer.Object); var provider = new Mock <IPageApplicationModelProvider>(); var pageApplicationModel = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); provider.Setup(p => p.OnProvidersExecuting(It.IsAny <PageApplicationModelProviderContext>())) .Callback((PageApplicationModelProviderContext c) => { Assert.Null(c.PageApplicationModel); c.PageApplicationModel = pageApplicationModel; }) .Verifiable(); var providers = new[] { provider.Object, }; var loader = new RuntimeRazorPageLoader( providers, compilerProvider, endpointFactory, RazorPagesOptions, mvcOptions); // Act var result1 = await loader.LoadAsync(descriptor); var result2 = await loader.LoadAsync(descriptor); // Assert Assert.NotSame(result1.Id, result2.Id); }
public void ApplyConventions_InvokesApplicationModelConventions() { // Arrange var descriptor = new PageActionDescriptor(); var model = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var convention = new Mock <IPageApplicationModelConvention>(); convention.Setup(c => c.Apply(It.IsAny <PageApplicationModel>())) .Callback((PageApplicationModel m) => { Assert.Same(model, m); }) .Verifiable(); var conventionCollection = new PageConventionCollection() { convention.Object, }; // Act RuntimeRazorPageLoader.ApplyConventions(conventionCollection, model); // Assert convention.Verify(); }
public async Task LoadAsync_InvokesApplicationModelProviders() { // Arrange var descriptor = new PageActionDescriptor(); var compilerProvider = GetCompilerProvider(); var mvcOptions = Options.Create(new MvcOptions()); var endpointFactory = new PublicActionEndpointFactory(Mock.Of <RoutePatternTransformer>()); var provider1 = new Mock <IPageApplicationModelProvider>(); var provider2 = new Mock <IPageApplicationModelProvider>(); var sequence = 0; var pageApplicationModel1 = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); var pageApplicationModel2 = new PageApplicationModel(descriptor, typeof(object).GetTypeInfo(), Array.Empty <object>()); provider1.Setup(p => p.OnProvidersExecuting(It.IsAny <PageApplicationModelProviderContext>())) .Callback((PageApplicationModelProviderContext c) => { Assert.Equal(0, sequence++); Assert.Null(c.PageApplicationModel); c.PageApplicationModel = pageApplicationModel1; }) .Verifiable(); provider2.Setup(p => p.OnProvidersExecuting(It.IsAny <PageApplicationModelProviderContext>())) .Callback((PageApplicationModelProviderContext c) => { Assert.Equal(1, sequence++); Assert.Same(pageApplicationModel1, c.PageApplicationModel); c.PageApplicationModel = pageApplicationModel2; }) .Verifiable(); provider1.Setup(p => p.OnProvidersExecuted(It.IsAny <PageApplicationModelProviderContext>())) .Callback((PageApplicationModelProviderContext c) => { Assert.Equal(3, sequence++); Assert.Same(pageApplicationModel2, c.PageApplicationModel); }) .Verifiable(); provider2.Setup(p => p.OnProvidersExecuted(It.IsAny <PageApplicationModelProviderContext>())) .Callback((PageApplicationModelProviderContext c) => { Assert.Equal(2, sequence++); Assert.Same(pageApplicationModel2, c.PageApplicationModel); }) .Verifiable(); var providers = new[] { provider1.Object, provider2.Object }; var loader = new RuntimeRazorPageLoader( providers, compilerProvider, endpointFactory, RazorPagesOptions, mvcOptions); // Act var result = await loader.LoadAsync(new PageActionDescriptor()); // Assert provider1.Verify(); provider2.Verify(); }