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); }
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); }
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); }
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))); }