public async Task ArrayModelBinder_CreatesEmptyCollection_IfIsTopLevelObject() { // Arrange var binder = new ArrayModelBinder<string>(new SimpleTypeModelBinder()); var context = CreateContext(); context.IsTopLevelObject = true; // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; var metadataProvider = context.OperationBindingContext.MetadataProvider; context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(string[])); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); // Act var result = await binder.BindModelResultAsync(context); // Assert Assert.NotEqual(default(ModelBindingResult), result); Assert.Empty(Assert.IsType<string[]>(result.Model)); Assert.Equal("modelName", result.Key); Assert.True(result.IsModelSet); }
public async Task ArrayModelBinder_CreatesEmptyCollection_IfIsTopLevelObject() { // Arrange var binder = new ArrayModelBinder <string>(); var context = CreateContext(); context.IsTopLevelObject = true; // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; var metadataProvider = context.OperationBindingContext.MetadataProvider; context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(string[])); context.ValueProvider = new TestValueProvider(new Dictionary <string, object>()); // Act var result = await binder.BindModelResultAsync(context); // Assert Assert.NotEqual(default(ModelBindingResult), result); Assert.Empty(Assert.IsType <string[]>(result.Model)); Assert.Equal("modelName", result.Key); Assert.True(result.IsModelSet); }
public async Task BindModelAsync_ModelMetadataNotReadOnly_ModelNonNull_FailsSilently(int[] model) { // Arrange var arrayLength = model.Length; var valueProvider = new SimpleValueProvider { { "someName[0]", "42" }, { "someName[1]", "84" }, }; var bindingContext = GetBindingContext(valueProvider, isReadOnly: false); var modelState = bindingContext.ModelState; bindingContext.Model = model; var binder = new ArrayModelBinder <int>(); // Act var result = await binder.BindModelResultAsync(bindingContext); // Assert Assert.NotEqual(default(ModelBindingResult), result); Assert.True(result.IsModelSet); Assert.Same(model, result.Model); Assert.True(modelState.IsValid); for (var i = 0; i < arrayLength; i++) { // Array should be unchanged. Assert.Equal(357, model[i]); } }
public async Task BindModelAsync_ModelMetadataReadOnly_ReturnsNull(int[] model) { // Arrange var valueProvider = new SimpleValueProvider { { "someName[0]", "42" }, { "someName[1]", "84" }, }; var bindingContext = GetBindingContext(valueProvider, isReadOnly: true); bindingContext.Model = model; var binder = new ArrayModelBinder <int>(); // Act var result = await binder.BindModelResultAsync(bindingContext); // Assert Assert.Equal(default(ModelBindingResult), result); }
public async Task ArrayModelBinder_DoesNotCreateCollection_IfNotIsTopLevelObject(string prefix) { // Arrange var binder = new ArrayModelBinder<string>(new SimpleTypeModelBinder()); var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ArrayProperty"); var metadataProvider = context.OperationBindingContext.MetadataProvider; context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithArrayProperty), nameof(ModelWithArrayProperty.ArrayProperty)); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); // Act var result = await binder.BindModelResultAsync(context); // Assert Assert.Equal(default(ModelBindingResult), result); }
public async Task BindModelAsync_ValueProviderContainPrefix_Succeeds() { // Arrange var valueProvider = new SimpleValueProvider { { "someName[0]", "42" }, { "someName[1]", "84" }, }; var bindingContext = GetBindingContext(valueProvider); var modelState = bindingContext.ModelState; var binder = new ArrayModelBinder<int>(new SimpleTypeModelBinder()); // Act var result = await binder.BindModelResultAsync(bindingContext); // Assert Assert.NotEqual(default(ModelBindingResult), result); var array = Assert.IsType<int[]>(result.Model); Assert.Equal(new[] { 42, 84 }, array); }
public async Task ArrayModelBinder_DoesNotCreateCollection_IfNotIsTopLevelObject(string prefix) { // Arrange var binder = new ArrayModelBinder <string>(); var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ArrayProperty"); var metadataProvider = context.OperationBindingContext.MetadataProvider; context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithArrayProperty), nameof(ModelWithArrayProperty.ArrayProperty)); context.ValueProvider = new TestValueProvider(new Dictionary <string, object>()); // Act var result = await binder.BindModelResultAsync(context); // Assert Assert.Equal(default(ModelBindingResult), result); }
public async Task BindModelAsync_ValueProviderContainPrefix_Succeeds() { // Arrange var valueProvider = new SimpleValueProvider { { "someName[0]", "42" }, { "someName[1]", "84" }, }; var bindingContext = GetBindingContext(valueProvider); var modelState = bindingContext.ModelState; var binder = new ArrayModelBinder <int>(); // Act var result = await binder.BindModelResultAsync(bindingContext); // Assert Assert.NotEqual(default(ModelBindingResult), result); var array = Assert.IsType <int[]>(result.Model); Assert.Equal(new[] { 42, 84 }, array); Assert.True(modelState.IsValid); }
public async Task BindModelAsync_ModelMetadataNotReadOnly_ModelNonNull_FailsSilently(int[] model) { // Arrange var arrayLength = model.Length; var valueProvider = new SimpleValueProvider { { "someName[0]", "42" }, { "someName[1]", "84" }, }; var bindingContext = GetBindingContext(valueProvider, isReadOnly: false); var modelState = bindingContext.ModelState; bindingContext.Model = model; var binder = new ArrayModelBinder<int>(new SimpleTypeModelBinder()); // Act var result = await binder.BindModelResultAsync(bindingContext); // Assert Assert.NotEqual(default(ModelBindingResult), result); Assert.True(result.IsModelSet); Assert.Same(model, result.Model); for (var i = 0; i < arrayLength; i++) { // Array should be unchanged. Assert.Equal(357, model[i]); } }