Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }