public async Task BindModelAsync_CorrectlyBindsValidCommaDelimitedEnumArrayQuery()
        {
            var queryParamName = "test";
            IReadOnlyList <TestType> queryParamValues = new[] { TestType.How, TestType.Much };
            var queryParamString = "How,Much";
            var queryParamType   = typeof(TestType[]);

            var modelBinder   = new CommaDelimitedArrayModelBinder(new NullLogger <CommaDelimitedArrayModelBinder>());
            var valueProvider = new QueryStringValueProvider(
                new BindingSource(string.Empty, string.Empty, false, false),
                new QueryCollection(new Dictionary <string, StringValues> {
                { queryParamName, new StringValues(queryParamString) }
            }),
                CultureInfo.InvariantCulture);
            var bindingContextMock = new Mock <ModelBindingContext>();

            bindingContextMock.Setup(b => b.ValueProvider).Returns(valueProvider);
            bindingContextMock.Setup(b => b.ModelName).Returns(queryParamName);
            bindingContextMock.Setup(b => b.ModelType).Returns(queryParamType);
            bindingContextMock.SetupProperty(b => b.Result);

            await modelBinder.BindModelAsync(bindingContextMock.Object);

            Assert.True(bindingContextMock.Object.Result.IsModelSet);
            Assert.Equal((IReadOnlyList <TestType>?)bindingContextMock.Object.Result.Model, queryParamValues);
        }
        public async Task BindModelAsync_EnumArrayQuery_BindValidOnly_2()
        {
            var queryParamName    = "test";
            var queryParamString1 = "How";
            var queryParamString2 = "😱";
            var queryParamType    = typeof(IReadOnlyList <TestType>);

            var modelBinder = new CommaDelimitedArrayModelBinder(new NullLogger <CommaDelimitedArrayModelBinder>());

            var valueProvider = new QueryStringValueProvider(
                new BindingSource(string.Empty, string.Empty, false, false),
                new QueryCollection(new Dictionary <string, StringValues>
            {
                { queryParamName, new StringValues(new[] { queryParamString1, queryParamString2 }) },
            }),
                CultureInfo.InvariantCulture);
            var bindingContextMock = new Mock <ModelBindingContext>();

            bindingContextMock.Setup(b => b.ValueProvider).Returns(valueProvider);
            bindingContextMock.Setup(b => b.ModelName).Returns(queryParamName);
            bindingContextMock.Setup(b => b.ModelType).Returns(queryParamType);
            bindingContextMock.SetupProperty(b => b.Result);

            await modelBinder.BindModelAsync(bindingContextMock.Object);

            Assert.True(bindingContextMock.Object.Result.IsModelSet);
            Assert.Single((IReadOnlyList <TestType>?)bindingContextMock.Object.Result.Model);
        }
예제 #3
0
        public async Task BindModelAsync_CorrectlyBindsValidCommaDelimitedIntArrayQuery()
        {
            var queryParamName   = "test";
            var queryParamValues = new int[] { 42, 0 };
            var queryParamString = "42,0";
            var queryParamType   = typeof(int[]);

            var modelBinder   = new CommaDelimitedArrayModelBinder();
            var valueProvider = new QueryStringValueProvider(
                new BindingSource(string.Empty, string.Empty, false, false),
                new QueryCollection(new Dictionary <string, StringValues>()
            {
                { queryParamName, new StringValues(queryParamString) }
            }),
                CultureInfo.InvariantCulture);
            var bindingContextMock = new Mock <ModelBindingContext>();

            bindingContextMock.Setup(b => b.ValueProvider).Returns(valueProvider);
            bindingContextMock.Setup(b => b.ModelName).Returns(queryParamName);
            bindingContextMock.Setup(b => b.ModelType).Returns(queryParamType);
            bindingContextMock.SetupProperty(b => b.Result);

            await modelBinder.BindModelAsync(bindingContextMock.Object);

            Assert.True(bindingContextMock.Object.Result.IsModelSet);
            Assert.Equal((int[])bindingContextMock.Object.Result.Model, queryParamValues);
        }
예제 #4
0
        public async Task BindModelAsync_ThrowsIfCommaDelimitedEnumArrayQueryIsInvalid2()
        {
            var queryParamName    = "test";
            var queryParamValues  = new TestType[] { TestType.How, TestType.Much };
            var queryParamString1 = "How";
            var queryParamString2 = "😱";
            var queryParamType    = typeof(TestType[]);

            var modelBinder = new CommaDelimitedArrayModelBinder();

            var valueProvider = new QueryStringValueProvider(
                new BindingSource(string.Empty, string.Empty, false, false),
                new QueryCollection(new Dictionary <string, StringValues>()
            {
                { queryParamName, new StringValues(new string[] { queryParamString1, queryParamString2 }) },
            }),
                CultureInfo.InvariantCulture);
            var bindingContextMock = new Mock <ModelBindingContext>();

            bindingContextMock.Setup(b => b.ValueProvider).Returns(valueProvider);
            bindingContextMock.Setup(b => b.ModelName).Returns(queryParamName);
            bindingContextMock.Setup(b => b.ModelType).Returns(queryParamType);
            bindingContextMock.SetupProperty(b => b.Result);

            Func <Task> act = async() => await modelBinder.BindModelAsync(bindingContextMock.Object);

            await Assert.ThrowsAsync <FormatException>(act);
        }
예제 #5
0
        public async Task BindModelAsync_CorrectlyBindsEmptyEnumArrayQuery()
        {
            var queryParamName   = "test";
            var queryParamValues = Array.Empty <TestType>();
            var queryParamType   = typeof(TestType[]);

            var modelBinder = new CommaDelimitedArrayModelBinder();

            var valueProvider = new QueryStringValueProvider(
                new BindingSource(string.Empty, string.Empty, false, false),
                new QueryCollection(new Dictionary <string, StringValues>()
            {
                { queryParamName, new StringValues(value: null) },
            }),
                CultureInfo.InvariantCulture);
            var bindingContextMock = new Mock <ModelBindingContext>();

            bindingContextMock.Setup(b => b.ValueProvider).Returns(valueProvider);
            bindingContextMock.Setup(b => b.ModelName).Returns(queryParamName);
            bindingContextMock.Setup(b => b.ModelType).Returns(queryParamType);
            bindingContextMock.SetupProperty(b => b.Result);

            await modelBinder.BindModelAsync(bindingContextMock.Object);

            Assert.False(bindingContextMock.Object.Result.IsModelSet);
        }
        public void ShouldParseListOfDateTime()
        {
            var binder = new CommaDelimitedArrayModelBinder();

            var result = binder.ParseArray("2016-01-01,1981-10-26,2012-12-21", typeof(List <DateTime>));

            Assert.NotNull(result);
            Assert.True(result is List <DateTime>);

            var intArray = (List <DateTime>)result;

            Assert.True(intArray.Count() == 3);
        }
        public void ShouldParseListOfString()
        {
            var binder = new CommaDelimitedArrayModelBinder();

            var result = binder.ParseArray("1,two,3", typeof(List <string>));

            Assert.NotNull(result);
            Assert.True(result is List <string>);

            var intArray = (List <string>)result;

            Assert.True(intArray.Count() == 3);
            Assert.Contains(intArray, (o) => o == "1");
            Assert.Contains(intArray, (o) => o == "two");
            Assert.Contains(intArray, (o) => o == "3");
        }
        public void ShouldParseArrayOfInt()
        {
            var binder = new CommaDelimitedArrayModelBinder();

            var result = binder.ParseArray("1,2,3", typeof(int[]));

            Assert.NotNull(result);
            Assert.True(result is int[]);

            var intArray = (int[])result;

            Assert.True(intArray.Count() == 3);
            Assert.Contains(intArray, (o) => o == 1);
            Assert.Contains(intArray, (o) => o == 2);
            Assert.Contains(intArray, (o) => o == 3);
        }
        public void ShouldThrowNotSupportedExceptionIfArrayOfReferenceType()
        {
            var binder = new CommaDelimitedArrayModelBinder();

            Assert.Throws <NotSupportedException>(() => binder.ParseArray("coords(12.4,12.2),454564.454,C#", typeof(List <object>)));
        }
        public void ShouldThrowNotSupportedExceptionIfNotArrayOrIEnumerable()
        {
            var binder = new CommaDelimitedArrayModelBinder();

            Assert.Throws <NotSupportedException>(() => binder.ParseArray("coords(12.4,12.2),454564.454,C#", typeof(ulong)));
        }