public async Task BindModelAsync_ReturnsNullWhenRequestCannotBeFoundAndExceptionsAreDisabled() { // Arrange var options = Mock.Of <IOptionsMonitor <OpenIddictMvcOptions> >( mock => mock.CurrentValue == new OpenIddictMvcOptions { DisableBindingExceptions = true }); var binder = new OpenIddictMvcBinder(options); var provider = new EmptyModelMetadataProvider(); var context = new DefaultModelBindingContext { ActionContext = new ActionContext() { HttpContext = new DefaultHttpContext(), }, ModelMetadata = provider.GetMetadataForType(typeof(OpenIdConnectRequest)) }; // Act await binder.BindModelAsync(context); // Assert Assert.True(context.Result.IsModelSet); Assert.Null(context.Result.Model); Assert.Equal(BindingSource.Special, context.BindingSource); }
public async Task BindModelAsync_ThrowsAnExceptionWhenRequestCannotBeFound() { // Arrange var options = Mock.Of <IOptionsMonitor <OpenIddictMvcOptions> >( mock => mock.CurrentValue == new OpenIddictMvcOptions()); var binder = new OpenIddictMvcBinder(options); var provider = new EmptyModelMetadataProvider(); var context = new DefaultModelBindingContext { ActionContext = new ActionContext() { HttpContext = new DefaultHttpContext(), }, ModelMetadata = provider.GetMetadataForType(typeof(OpenIdConnectRequest)) }; // Act and assert var exception = await Assert.ThrowsAsync <InvalidOperationException>(delegate { return(binder.BindModelAsync(context)); }); Assert.Equal(new StringBuilder() .AppendLine("The OpenID Connect request cannot be retrieved from the ASP.NET context.") .Append("Make sure that 'app.UseAuthentication()' is called before 'app.UseMvc()' ") .Append("and that the action route corresponds to the endpoint path registered via ") .Append("'services.AddOpenIddict().AddServer().Enable[...]Endpoint(...)'.") .ToString(), exception.Message); }
public async Task BindModelAsync_ThrowsAnExceptionForUnsupportedTypes(Type type) { // Arrange var options = Mock.Of <IOptionsMonitor <OpenIddictMvcOptions> >( mock => mock.CurrentValue == new OpenIddictMvcOptions()); var binder = new OpenIddictMvcBinder(options); var provider = new EmptyModelMetadataProvider(); var context = new DefaultModelBindingContext { ModelMetadata = provider.GetMetadataForType(type) }; // Act and assert var exception = await Assert.ThrowsAsync <InvalidOperationException>(delegate { return(binder.BindModelAsync(context)); }); Assert.Equal("The specified model type is not supported by this binder.", exception.Message); }
public async Task BindModelAsync_ReturnsAmbientResponse() { // Arrange var options = Mock.Of <IOptionsMonitor <OpenIddictMvcOptions> >( mock => mock.CurrentValue == new OpenIddictMvcOptions()); var binder = new OpenIddictMvcBinder(options); var provider = new EmptyModelMetadataProvider(); var response = new OpenIdConnectResponse(); var features = new FeatureCollection(); features.Set(new OpenIdConnectServerFeature { Response = response }); var context = new DefaultModelBindingContext { ActionContext = new ActionContext() { HttpContext = new DefaultHttpContext(features), }, ModelMetadata = provider.GetMetadataForType(typeof(OpenIdConnectResponse)), ValidationState = new ValidationStateDictionary() }; // Act await binder.BindModelAsync(context); // Assert Assert.True(context.Result.IsModelSet); Assert.Same(response, context.Result.Model); Assert.True(context.ValidationState[response].SuppressValidation); Assert.Equal(BindingSource.Special, context.BindingSource); }