From 9f9dcbe6ec2e34d8a0dfae283cb5e40d8b94fdb7 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Mon, 16 Feb 2015 17:50:15 -0800 Subject: [PATCH] Additional functional tests for ElementalValueProvider --- .../ModelBindingFromFormTest.cs | 1 + .../ModelBindingFromQueryTest.cs | 3 +- .../ModelBindingFromRouteTest.cs | 7 +- .../ModelBindingModelBinderAttributeTest.cs | 8 +- .../ModelBindingTest.cs | 236 +++++++++++++++++- .../RoundTripTests.cs | 1 + .../Controllers/BindAttributeController.cs | 1 + .../Controllers/FileUploadController.cs | 1 + .../Controllers/FromAttributesController.cs | 2 +- .../FromFormAttribute_CompanyController.cs | 1 + .../Controllers/FromHeader_BlogController.cs | 1 - .../FromQueryAttribute_CompanyController.cs | 1 + .../FromRouteAttribute_CompanyController.cs | 1 + .../ModelBinderAttribute_CompanyController.cs | 1 + .../Person_CollectionBinderController.cs | 37 +++ .../PropertiesGetCreatedController.cs | 2 +- .../Controllers/RoundtripController.cs | 1 + .../Controllers/TryUpdateModelController.cs | 6 +- .../Controllers/ValidationController.cs | 4 +- .../Controllers/VehicleController.cs | 2 +- .../WithBinderMetadataController.cs | 3 +- .../WithoutBinderMetadataController.cs | 1 + .../DefaultCalculatorContext.cs | 2 - .../ModelBindingWebSite/Models/Address.cs | 2 +- .../ModelBindingWebSite/Models/Book.cs | 2 +- .../ModelBindingWebSite/Models/Company.cs | 2 +- .../ModelBindingWebSite/Models/Country.cs | 2 +- .../ModelBindingWebSite/Models/Customer.cs | 2 +- .../ModelBindingWebSite/Models/Department.cs | 2 +- .../ModelBindingWebSite/Models/Document.cs | 2 +- .../ModelBindingWebSite/Models/Employee.cs | 2 +- .../Models/EmployeeWithBinderMetadata.cs | 2 +- .../ModelBindingWebSite/Models/FileDetails.cs | 2 +- .../Models/MixedUser_FromBody.cs | 2 +- .../Models/MixedUser_FromForm.cs | 2 +- .../Models/ModelWithValidation.cs | 2 +- .../ModelBindingWebSite/Models/PeopleModel.cs | 12 + .../ModelBindingWebSite/Models/Person.cs | 2 +- .../Models/PersonAddress.cs | 14 ++ .../ModelBindingWebSite/Models/Resident.cs | 2 +- .../Models/StreetAddress.cs | 10 + .../ModelBindingWebSite/Models/User.cs | 2 +- .../Models/UserPreference.cs | 12 + .../Models/UserWithAddress.cs | 12 + test/WebSites/ModelBindingWebSite/Startup.cs | 1 + 45 files changed, 368 insertions(+), 48 deletions(-) create mode 100644 test/WebSites/ModelBindingWebSite/Controllers/Person_CollectionBinderController.cs create mode 100644 test/WebSites/ModelBindingWebSite/Models/PeopleModel.cs create mode 100644 test/WebSites/ModelBindingWebSite/Models/PersonAddress.cs create mode 100644 test/WebSites/ModelBindingWebSite/Models/StreetAddress.cs create mode 100644 test/WebSites/ModelBindingWebSite/Models/UserPreference.cs create mode 100644 test/WebSites/ModelBindingWebSite/Models/UserWithAddress.cs diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromFormTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromFormTest.cs index 4afbab5275..1c3dc5105f 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromFormTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromFormTest.cs @@ -9,6 +9,7 @@ using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; using ModelBindingWebSite; using ModelBindingWebSite.Controllers; +using ModelBindingWebSite.Models; using Newtonsoft.Json; using Xunit; diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromQueryTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromQueryTest.cs index 8fb2d7c716..882234ac6b 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromQueryTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromQueryTest.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; using ModelBindingWebSite; +using ModelBindingWebSite.Models; using Newtonsoft.Json; using Xunit; using ModelBindingWebSite.Controllers; @@ -15,7 +16,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests public class ModelBindingFromQueryTest { private readonly IServiceProvider _services = TestHelper.CreateServices(nameof(ModelBindingWebSite)); - private readonly Action _app = new ModelBindingWebSite.Startup().Configure; + private readonly Action _app = new Startup().Configure; [Fact] public async Task FromQuery_CustomModelPrefix_ForParameter() diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromRouteTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromRouteTest.cs index c2c40c2024..9defb1a114 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromRouteTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingFromRouteTest.cs @@ -3,15 +3,12 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Net; using System.Net.Http; -using System.Text; using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; using ModelBindingWebSite; +using ModelBindingWebSite.Models; using Newtonsoft.Json; using Xunit; @@ -20,7 +17,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests public class ModelBindingFromRouteTest { private readonly IServiceProvider _services = TestHelper.CreateServices(nameof(ModelBindingWebSite)); - private readonly Action _app = new ModelBindingWebSite.Startup().Configure; + private readonly Action _app = new Startup().Configure; [Fact] public async Task FromRoute_CustomModelPrefix_ForParameter() diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingModelBinderAttributeTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingModelBinderAttributeTest.cs index 822567b3b6..911bc78ae0 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingModelBinderAttributeTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingModelBinderAttributeTest.cs @@ -2,16 +2,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Net; -using System.Net.Http; -using System.Text; using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; -using ModelBindingWebSite; +using ModelBindingWebSite.Models; using Newtonsoft.Json; using Xunit; diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTest.cs index 43c432e8cc..2d4f4f385e 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTest.cs @@ -11,10 +11,8 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; using Microsoft.AspNet.Builder; -using Microsoft.AspNet.Http; -using Microsoft.AspNet.Http.Core.Collections; using Microsoft.AspNet.TestHost; -using ModelBindingWebSite; +using ModelBindingWebSite.Models; using ModelBindingWebSite.ViewModels; using Newtonsoft.Json; using Xunit; @@ -1821,7 +1819,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests [Theory] [MemberData(nameof(ModelStateHasErrorsForValueAndReferenceTypesData))] public async Task ModelState_HasErrors_ForValueAndReferenceTypes( - string input, + string input, IEnumerable expectedModelStateErrorMessages) { // Arrange @@ -1831,7 +1829,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests // Act var response = await client.PostAsync( - "http://localhost/Validation/CreateRectangle", + "http://localhost/Validation/CreateRectangle", content); // Assert @@ -1846,5 +1844,233 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests (actualErrorMessage) => actualErrorMessage.StartsWith(expectedErrorMessage)); } } + + [Fact] + public async Task BindModelAsync_WithCollection() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new Dictionary + { + { "AddressLines[0].Line", "Street Address 0" }, + { "AddressLines[1].Line", "Street Address 1" }, + { "ZipCode", "98052" }, + }; + var url = "http://localhost/Person_CollectionBinder/CollectionType"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PutAsync(url, formData); + + // Assert + var address = await ReadValue(response); + Assert.Equal(2, address.AddressLines.Count); + Assert.Equal("Street Address 0", address.AddressLines[0].Line); + Assert.Equal("Street Address 1", address.AddressLines[1].Line); + Assert.Equal("98052", address.ZipCode); + } + + [Fact] + public async Task BindModelAsync_WithCollection_SpecifyingIndex() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new[] + { + new KeyValuePair("AddressLines.index", "3"), + new KeyValuePair("AddressLines.index", "10000"), + new KeyValuePair("AddressLines[3].Line", "Street Address 0"), + new KeyValuePair("AddressLines[10000].Line", "Street Address 1"), + }; + var url = "http://localhost/Person_CollectionBinder/CollectionType"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PutAsync(url, formData); + + // Assert + var address = await ReadValue(response); + Assert.Equal(2, address.AddressLines.Count); + Assert.Equal("Street Address 0", address.AddressLines[0].Line); + Assert.Equal("Street Address 1", address.AddressLines[1].Line); + } + + [Fact] + public async Task BindModelAsync_WithNestedCollection() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new Dictionary + { + { "Addresses[0].AddressLines[0].Line", "Street Address 00" }, + { "Addresses[0].AddressLines[1].Line", "Street Address 01" }, + { "Addresses[0].ZipCode", "98052" }, + { "Addresses[1].AddressLines[0].Line", "Street Address 10" }, + { "Addresses[1].AddressLines[3].Line", "Street Address 13" }, + }; + var url = "http://localhost/Person_CollectionBinder/NestedCollectionType"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue(response); + Assert.Equal(2, result.Addresses.Count); + var address = result.Addresses[0]; + Assert.Equal(2, address.AddressLines.Count); + Assert.Equal("Street Address 00", address.AddressLines[0].Line); + Assert.Equal("Street Address 01", address.AddressLines[1].Line); + Assert.Equal("98052", address.ZipCode); + + address = result.Addresses[1]; + Assert.Single(address.AddressLines); + Assert.Equal("Street Address 10", address.AddressLines[0].Line); + Assert.Null(address.ZipCode); + } + + [Fact] + public async Task BindModelAsync_WithIncorrectlyFormattedNestedCollectionValue() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new Dictionary + { + { "Addresses", "Street Address 00" }, + }; + var url = "http://localhost/Person_CollectionBinder/NestedCollectionType"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue(response); + var address = Assert.Single(result.Addresses); + Assert.Null(address.AddressLines); + Assert.Null(address.ZipCode); + } + + [Fact] + public async Task BindModelAsync_WithNestedCollectionContainingRecursiveRelation() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new Dictionary + { + { "People[0].Name", "Person 0" }, + { "People[0].Parent.Name", "Person 0 Parent" }, + { "People[1].Parent.Name", "Person 1 Parent" }, + { "People[2].Parent", "Person 2 Parent" }, + { "People[1000].Name", "Person 1000 Parent" }, + }; + var url = "http://localhost/Person_CollectionBinder/NestedCollectionOfRecursiveTypes"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue(response); + Assert.Equal(3, result.People.Count); + var person = result.People[0]; + + Assert.Equal("Person 0", person.Name); + Assert.Equal("Person 0 Parent", person.Parent.Name); + Assert.Null(person.Parent.Parent); + + person = result.People[1]; + Assert.Equal("Person 1 Parent", person.Parent.Name); + Assert.Null(person.Parent.Parent); + + person = result.People[2]; + Assert.Null(person.Name); + Assert.Null(person.Parent); + } + + [Fact] + public async Task BindModelAsync_WithNestedCollectionContainingRecursiveRelation_WithMalformedValue() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new Dictionary + { + { "People", "Person 0" }, + }; + var url = "http://localhost/Person_CollectionBinder/NestedCollectionOfRecursiveTypes"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue(response); + var person = Assert.Single(result.People); + Assert.Null(person.Name); + Assert.Null(person.Parent); + } + + [Theory] + [InlineData("true", "false", true)] + [InlineData("false", "true", false)] + public async Task BindModelAsync_MultipleCheckBoxesWithSameKey_BindsFirstValue(string firstValue, + string secondValue, + bool expectedResult) + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new List> + { + new KeyValuePair("isValid", firstValue), + new KeyValuePair("isValid", secondValue), + }; + var url = "http://localhost/Person_CollectionBinder/PostCheckBox"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue(response); + Assert.Equal(expectedResult, result); + } + + [Fact] + public async Task BindModelAsync_CheckBoxesList_BindSuccessful() + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new List> + { + new KeyValuePair("userPreferences[0].Id", "1"), + new KeyValuePair("userPreferences[0].Checked", "true"), + new KeyValuePair("userPreferences[1].Id", "2"), + new KeyValuePair("userPreferences[1].Checked", "false"), + }; + var url = "http://localhost/Person_CollectionBinder/PostCheckBoxList"; + var formData = new FormUrlEncodedContent(content); + + // Act + var response = await client.PostAsync(url, formData); + + // Assert + var result = await ReadValue>(response); + Assert.True(result[0].Checked); + Assert.False(result[1].Checked); + } + + private async Task ReadValue(HttpResponseMessage response) + { + Assert.True(response.IsSuccessStatusCode); + return JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/RoundTripTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/RoundTripTests.cs index 69db1b98c0..18c7112dfc 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/RoundTripTests.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/RoundTripTests.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; using ModelBindingWebSite; +using ModelBindingWebSite.Models; using Newtonsoft.Json; using Xunit; diff --git a/test/WebSites/ModelBindingWebSite/Controllers/BindAttributeController.cs b/test/WebSites/ModelBindingWebSite/Controllers/BindAttributeController.cs index eed4d77ab5..1610f5fbd5 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/BindAttributeController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/BindAttributeController.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq.Expressions; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.ModelBinding; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs index 8a6b5183fd..223d231e2d 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs @@ -7,6 +7,7 @@ using System.Linq; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Http; using Microsoft.Net.Http.Headers; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FromAttributesController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FromAttributesController.cs index 5f9a554447..abedea20b5 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FromAttributesController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FromAttributesController.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNet.Mvc; -using Microsoft.AspNet.Mvc.ModelBinding; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FromFormAttribute_CompanyController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FromFormAttribute_CompanyController.cs index 86e6120617..f885b20f48 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FromFormAttribute_CompanyController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FromFormAttribute_CompanyController.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FromHeader_BlogController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FromHeader_BlogController.cs index d09720d7ad..ac0cb3aabc 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FromHeader_BlogController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FromHeader_BlogController.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FromQueryAttribute_CompanyController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FromQueryAttribute_CompanyController.cs index 1e7b3e2004..7af9b04e86 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FromQueryAttribute_CompanyController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FromQueryAttribute_CompanyController.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/FromRouteAttribute_CompanyController.cs b/test/WebSites/ModelBindingWebSite/Controllers/FromRouteAttribute_CompanyController.cs index a49d08bb9a..a5575af58b 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/FromRouteAttribute_CompanyController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/FromRouteAttribute_CompanyController.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/ModelBinderAttribute_CompanyController.cs b/test/WebSites/ModelBindingWebSite/Controllers/ModelBinderAttribute_CompanyController.cs index e19679275a..48a8bb3dd3 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/ModelBinderAttribute_CompanyController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/ModelBinderAttribute_CompanyController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/Person_CollectionBinderController.cs b/test/WebSites/ModelBindingWebSite/Controllers/Person_CollectionBinderController.cs new file mode 100644 index 0000000000..bd4a7ae23b --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Controllers/Person_CollectionBinderController.cs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; + +namespace ModelBindingWebSite.Controllers +{ + public class Person_CollectionBinderController : Controller + { + public PersonAddress CollectionType(PersonAddress address) + { + return address; + } + + public UserWithAddress NestedCollectionType(UserWithAddress user) + { + return user; + } + + public PeopleModel NestedCollectionOfRecursiveTypes(PeopleModel model) + { + return model; + } + + public bool PostCheckBox(bool isValid) + { + return isValid; + } + + public IEnumerable PostCheckBoxList(IEnumerable userPreferences) + { + return userPreferences; + } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Controllers/PropertiesGetCreatedController.cs b/test/WebSites/ModelBindingWebSite/Controllers/PropertiesGetCreatedController.cs index d24aa42110..fecc9880ff 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/PropertiesGetCreatedController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/PropertiesGetCreatedController.cs @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/RoundtripController.cs b/test/WebSites/ModelBindingWebSite/Controllers/RoundtripController.cs index b47d95050b..223207e7a7 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/RoundtripController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/RoundtripController.cs @@ -6,6 +6,7 @@ using System.IO; using System.Threading.Tasks; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.Rendering; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/TryUpdateModelController.cs b/test/WebSites/ModelBindingWebSite/Controllers/TryUpdateModelController.cs index fe5d89d543..29a697cc3c 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/TryUpdateModelController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/TryUpdateModelController.cs @@ -8,7 +8,7 @@ using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.ModelBinding; using System.Collections.Generic; using Microsoft.AspNet.Http.Core.Collections; -using Microsoft.AspNet.Http; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { @@ -42,8 +42,8 @@ namespace ModelBindingWebSite.Controllers prefix: string.Empty, predicate: (context, modelName) => - !string.Equals(modelName, nameof(ModelBindingWebSite.User.Id), StringComparison.Ordinal) && - !string.Equals(modelName, nameof(ModelBindingWebSite.User.Key), StringComparison.Ordinal)); + !string.Equals(modelName, nameof(Models.User.Id), StringComparison.Ordinal) && + !string.Equals(modelName, nameof(Models.User.Key), StringComparison.Ordinal)); return user; } diff --git a/test/WebSites/ModelBindingWebSite/Controllers/ValidationController.cs b/test/WebSites/ModelBindingWebSite/Controllers/ValidationController.cs index f47e9554bb..6ef1f46c1d 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/ValidationController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/ValidationController.cs @@ -1,12 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.ModelBinding; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/VehicleController.cs b/test/WebSites/ModelBindingWebSite/Controllers/VehicleController.cs index 4bf4eefd93..c130d226fa 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/VehicleController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/VehicleController.cs @@ -7,8 +7,8 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.WebUtilities; -using ModelBindingWebSite.Services; using ModelBindingWebSite.ViewModels; +using ModelBindingWebSite.Services; namespace ModelBindingWebSite { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs b/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs index 3dc0ff7566..e3c57c68de 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs @@ -1,9 +1,8 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using Microsoft.AspNet.Mvc; -using Microsoft.AspNet.Mvc.ModelBinding; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs b/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs index 48c9e33201..2e5f623db6 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs @@ -3,6 +3,7 @@ using System; using Microsoft.AspNet.Mvc; +using ModelBindingWebSite.Models; namespace ModelBindingWebSite.Controllers { diff --git a/test/WebSites/ModelBindingWebSite/DefaultCalculatorContext.cs b/test/WebSites/ModelBindingWebSite/DefaultCalculatorContext.cs index bf8a9c6114..a97ef488cf 100644 --- a/test/WebSites/ModelBindingWebSite/DefaultCalculatorContext.cs +++ b/test/WebSites/ModelBindingWebSite/DefaultCalculatorContext.cs @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using Microsoft.AspNet.Mvc; - namespace ModelBindingWebSite { public class DefaultCalculatorContext : CalculatorContext diff --git a/test/WebSites/ModelBindingWebSite/Models/Address.cs b/test/WebSites/ModelBindingWebSite/Models/Address.cs index 82dfce1d53..b3ee9c3f2b 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Address.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Address.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Address { diff --git a/test/WebSites/ModelBindingWebSite/Models/Book.cs b/test/WebSites/ModelBindingWebSite/Models/Book.cs index 9877796e7c..0f53ec23e2 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Book.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Book.cs @@ -3,7 +3,7 @@ using Microsoft.AspNet.Http; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Book { diff --git a/test/WebSites/ModelBindingWebSite/Models/Company.cs b/test/WebSites/ModelBindingWebSite/Models/Company.cs index e0b435463a..de1064beed 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Company.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Company.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Company { diff --git a/test/WebSites/ModelBindingWebSite/Models/Country.cs b/test/WebSites/ModelBindingWebSite/Models/Country.cs index 7463c54ed6..6db04eff67 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Country.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Country.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Country { diff --git a/test/WebSites/ModelBindingWebSite/Models/Customer.cs b/test/WebSites/ModelBindingWebSite/Models/Customer.cs index 15da4ec197..06e0b78148 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Customer.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Customer.cs @@ -3,7 +3,7 @@ using Microsoft.AspNet.Mvc; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Customer : Person { diff --git a/test/WebSites/ModelBindingWebSite/Models/Department.cs b/test/WebSites/ModelBindingWebSite/Models/Department.cs index 249ce62aca..e5973ecd12 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Department.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Department.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Department { diff --git a/test/WebSites/ModelBindingWebSite/Models/Document.cs b/test/WebSites/ModelBindingWebSite/Models/Document.cs index 354164571e..2af01ae3d6 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Document.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Document.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Document { diff --git a/test/WebSites/ModelBindingWebSite/Models/Employee.cs b/test/WebSites/ModelBindingWebSite/Models/Employee.cs index f211ab0410..82d9eefe6c 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Employee.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Employee.cs @@ -5,7 +5,7 @@ using System.ComponentModel.DataAnnotations; using Microsoft.AspNet.Mvc; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Employee : Person { diff --git a/test/WebSites/ModelBindingWebSite/Models/EmployeeWithBinderMetadata.cs b/test/WebSites/ModelBindingWebSite/Models/EmployeeWithBinderMetadata.cs index 85deda0e2b..a5aaa21c5c 100644 --- a/test/WebSites/ModelBindingWebSite/Models/EmployeeWithBinderMetadata.cs +++ b/test/WebSites/ModelBindingWebSite/Models/EmployeeWithBinderMetadata.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class EmployeeWithBinderMetadata : Employee { diff --git a/test/WebSites/ModelBindingWebSite/Models/FileDetails.cs b/test/WebSites/ModelBindingWebSite/Models/FileDetails.cs index 8ac20fe800..83a4432869 100644 --- a/test/WebSites/ModelBindingWebSite/Models/FileDetails.cs +++ b/test/WebSites/ModelBindingWebSite/Models/FileDetails.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class FileDetails { diff --git a/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromBody.cs b/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromBody.cs index bf3eea2d3c..da176516f8 100644 --- a/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromBody.cs +++ b/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromBody.cs @@ -3,7 +3,7 @@ using Microsoft.AspNet.Mvc; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class User_FromBody { diff --git a/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromForm.cs b/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromForm.cs index 950dbc2237..db1d677ca8 100644 --- a/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromForm.cs +++ b/test/WebSites/ModelBindingWebSite/Models/MixedUser_FromForm.cs @@ -3,7 +3,7 @@ using Microsoft.AspNet.Mvc; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class User_FromForm { diff --git a/test/WebSites/ModelBindingWebSite/Models/ModelWithValidation.cs b/test/WebSites/ModelBindingWebSite/Models/ModelWithValidation.cs index 51c2a4f0e3..b4126e2b0e 100644 --- a/test/WebSites/ModelBindingWebSite/Models/ModelWithValidation.cs +++ b/test/WebSites/ModelBindingWebSite/Models/ModelWithValidation.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class ModelWithValidation { diff --git a/test/WebSites/ModelBindingWebSite/Models/PeopleModel.cs b/test/WebSites/ModelBindingWebSite/Models/PeopleModel.cs new file mode 100644 index 0000000000..63a65f70e7 --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Models/PeopleModel.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace ModelBindingWebSite.Models +{ + public class PeopleModel + { + public List People { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Models/Person.cs b/test/WebSites/ModelBindingWebSite/Models/Person.cs index 667e7402e2..16625cdabf 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Person.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Person.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Person { diff --git a/test/WebSites/ModelBindingWebSite/Models/PersonAddress.cs b/test/WebSites/ModelBindingWebSite/Models/PersonAddress.cs new file mode 100644 index 0000000000..60463c1551 --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Models/PersonAddress.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace ModelBindingWebSite.Models +{ + public class PersonAddress + { + public List AddressLines { get; set; } + + public string ZipCode { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Models/Resident.cs b/test/WebSites/ModelBindingWebSite/Models/Resident.cs index 03098e77a4..3df702e388 100644 --- a/test/WebSites/ModelBindingWebSite/Models/Resident.cs +++ b/test/WebSites/ModelBindingWebSite/Models/Resident.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using Microsoft.AspNet.Mvc; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class Resident : Person { diff --git a/test/WebSites/ModelBindingWebSite/Models/StreetAddress.cs b/test/WebSites/ModelBindingWebSite/Models/StreetAddress.cs new file mode 100644 index 0000000000..768577424c --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Models/StreetAddress.cs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace ModelBindingWebSite.Models +{ + public class StreetAddress + { + public string Line { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Models/User.cs b/test/WebSites/ModelBindingWebSite/Models/User.cs index e2e9280c64..07270afa20 100644 --- a/test/WebSites/ModelBindingWebSite/Models/User.cs +++ b/test/WebSites/ModelBindingWebSite/Models/User.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; -namespace ModelBindingWebSite +namespace ModelBindingWebSite.Models { public class User { diff --git a/test/WebSites/ModelBindingWebSite/Models/UserPreference.cs b/test/WebSites/ModelBindingWebSite/Models/UserPreference.cs new file mode 100644 index 0000000000..74fb385cae --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Models/UserPreference.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace ModelBindingWebSite.Models +{ + public class UserPreference + { + public int Id { get; set; } + + public bool Checked { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Models/UserWithAddress.cs b/test/WebSites/ModelBindingWebSite/Models/UserWithAddress.cs new file mode 100644 index 0000000000..2bba5ba3eb --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Models/UserWithAddress.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace ModelBindingWebSite.Models +{ + public class UserWithAddress + { + public List Addresses { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Startup.cs b/test/WebSites/ModelBindingWebSite/Startup.cs index 51a0b3a3db..40626cde0f 100644 --- a/test/WebSites/ModelBindingWebSite/Startup.cs +++ b/test/WebSites/ModelBindingWebSite/Startup.cs @@ -5,6 +5,7 @@ using Microsoft.AspNet.Builder; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.Framework.DependencyInjection; +using ModelBindingWebSite.Models; using ModelBindingWebSite.Services; namespace ModelBindingWebSite