From 04c37a8d5137017b4ca7857e6f92d4f918d1f3be Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Thu, 11 Dec 2014 13:43:32 -0800 Subject: [PATCH] added few taghelper functional tests --- .../TagHelpersTest.cs | 76 +++++++++++++++++ ...elpersWebSite.Employee.Create.Invalid.html | 83 ++++++++++++++++++ .../TagHelpersWebSite.Employee.Create.html | 81 ++++++++++++++++++ ...sWebSite.Employee.Details.AfterCreate.html | 61 +++++++++++++ .../TagHelpersWebSite.Employee.Index.html | 42 +++++++++ .../Controllers/EmployeeController.cs | 35 ++++++++ .../TagHelpersWebSite/Models/Employee.cs | 32 +++++++ .../Views/Employee/Create.cshtml | 85 +++++++++++++++++++ .../Views/Employee/Details.cshtml | 64 ++++++++++++++ test/WebSites/TagHelpersWebSite/project.json | 2 +- 10 files changed, 560 insertions(+), 1 deletion(-) create mode 100644 test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.Invalid.html create mode 100644 test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.html create mode 100644 test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Details.AfterCreate.html create mode 100644 test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Index.html create mode 100644 test/WebSites/TagHelpersWebSite/Controllers/EmployeeController.cs create mode 100644 test/WebSites/TagHelpersWebSite/Models/Employee.cs create mode 100644 test/WebSites/TagHelpersWebSite/Views/Employee/Create.cshtml create mode 100644 test/WebSites/TagHelpersWebSite/Views/Employee/Details.cshtml diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/TagHelpersTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/TagHelpersTest.cs index 7b3fde1c22..25700cc545 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/TagHelpersTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/TagHelpersTest.cs @@ -2,7 +2,9 @@ // 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.Net; +using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Threading.Tasks; @@ -72,5 +74,79 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests // Assert Assert.Equal(expected, result.Trim()); } + + [Fact] + public async Task ViewsWithModelMetadataAttributes_CanRenderForm() + { + // Arrange + var server = TestServer.Create(_provider, _app); + var client = server.CreateClient(); + var expectedContent = await _resourcesAssembly.ReadResourceAsStringAsync( + "compiler/resources/TagHelpersWebSite.Employee.Create.html"); + + // Act + var response = await client.GetAsync("http://localhost/Employee/Create"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var responseContent = await response.Content.ReadAsStringAsync(); + Assert.Equal(expectedContent, responseContent); + } + + [Fact] + public async Task ViewsWithModelMetadataAttributes_CanRenderPostedValue() + { + // Arrange + var server = TestServer.Create(_provider, _app); + var client = server.CreateClient(); + var expectedContent = await _resourcesAssembly.ReadResourceAsStringAsync( + "compiler/resources/TagHelpersWebSite.Employee.Details.AfterCreate.html"); + var validPostValues = new Dictionary + { + { "FullName", "Boo" }, + { "Gender", "M" }, + { "Age", "22" }, + { "EmployeeId", "0" }, + { "JoinDate", "2014-12-01" }, + { "Email", "a@b.com" }, + }; + var postContent = new FormUrlEncodedContent(validPostValues); + + // Act + var response = await client.PostAsync("http://localhost/Employee/Create", postContent); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var responseContent = await response.Content.ReadAsStringAsync(); + Assert.Equal(expectedContent, responseContent); + } + + [Fact] + public async Task ViewsWithModelMetadataAttributes_CanHandleInvalidData() + { + // Arrange + var server = TestServer.Create(_provider, _app); + var client = server.CreateClient(); + var expectedContent = await _resourcesAssembly.ReadResourceAsStringAsync( + "compiler/resources/TagHelpersWebSite.Employee.Create.Invalid.html"); + var validPostValues = new Dictionary + { + { "FullName", "Boo" }, + { "Gender", "M" }, + { "Age", "1000" }, + { "EmployeeId", "0" }, + { "Email", "a@b.com" }, + { "Salary", "z" }, + }; + var postContent = new FormUrlEncodedContent(validPostValues); + + // Act + var response = await client.PostAsync("http://localhost/Employee/Create", postContent); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var responseContent = await response.Content.ReadAsStringAsync(); + Assert.Equal(expectedContent, responseContent); + } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.Invalid.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.Invalid.html new file mode 100644 index 0000000000..6fb84c0bc6 --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.Invalid.html @@ -0,0 +1,83 @@ + + + + + + + + + + + Create + + + +
+ +
+

Employee

+
+
+
  • The field Age must be between 10 and 100.
  • +
  • The parameter conversion from type 'System.String' to type 'System.Int32' failed. See the inner exception for more information.
  • +
  • The JoinDate field is required.
  • +
+
+ +
+ + The field Age must be between 10 and 100. +
+
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ +
+ Male + Female + +
+
+
+ +
+ + The JoinDate field is required. +
+
+
+ +
+ + The parameter conversion from type 'System.String' to type 'System.Int32' failed. See the inner exception for more information. +
+
+ +
+
+ +
+
+
+
+ +
+ Back to List +
+ + + diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.html new file mode 100644 index 0000000000..85f318c70c --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Create.html @@ -0,0 +1,81 @@ + + + + + + + + + + + Create + + + +
+ +
+

Employee

+
+
+
  • +
+
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ +
+ Male + Female + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+
+ +
+
+
+
+ +
+ Back to List +
+ + + diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Details.AfterCreate.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Details.AfterCreate.html new file mode 100644 index 0000000000..7fce00fbb3 --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Details.AfterCreate.html @@ -0,0 +1,61 @@ + + + + + + + + + Details + + + + +
+

Employee

+
+
+
+ Age +
+
+ 22 +
+
+ Email +
+
+ a@b.com +
+
+ Full Name +
+
+ Boo +
+
+ Gender +
+
+ M +
+
+ JoinDate +
+
+ 12/1/2014 +
+
+ Salary +
+
+ Not specified +
+
+
+

+ Back to List +

+ + + diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Index.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Index.html new file mode 100644 index 0000000000..d37cc0e127 --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/compiler/resources/TagHelpersWebSite.Employee.Index.html @@ -0,0 +1,42 @@ + + + + + + + + + Index + + + + +

+ Create New +

+ + + + + + + + + + +
+ Age + + Email + + Full Name + + Gender + + JoinDate + + Salary +
+ + + diff --git a/test/WebSites/TagHelpersWebSite/Controllers/EmployeeController.cs b/test/WebSites/TagHelpersWebSite/Controllers/EmployeeController.cs new file mode 100644 index 0000000000..b6e0442ce3 --- /dev/null +++ b/test/WebSites/TagHelpersWebSite/Controllers/EmployeeController.cs @@ -0,0 +1,35 @@ +// 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.Linq; +using Microsoft.AspNet.Mvc; +using TagHelpersWebSite.Models; + +namespace TagHelpersWebSite.Controllers +{ + public class EmployeeController : Controller + { + // GET: Employee + public string Index() + { + return "Index Page"; + } + + // GET: Employee/Create + public IActionResult Create() + { + return View(); + } + + // POST: Employee/Create + [HttpPost] + public IActionResult Create(Employee employee) + { + if (ModelState.IsValid) + { + return View("Details", employee); + } + return View(employee); + } + } +} \ No newline at end of file diff --git a/test/WebSites/TagHelpersWebSite/Models/Employee.cs b/test/WebSites/TagHelpersWebSite/Models/Employee.cs new file mode 100644 index 0000000000..2774480330 --- /dev/null +++ b/test/WebSites/TagHelpersWebSite/Models/Employee.cs @@ -0,0 +1,32 @@ +// 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.ComponentModel.DataAnnotations; + +namespace TagHelpersWebSite.Models +{ + public class Employee + { + public int EmployeeId { get; set; } + + [Display(Name = "Full Name", ShortName = "FN")] + public string FullName { get; set; } + + [DisplayFormat(NullDisplayText = "Not specified")] + public string Gender { get; set; } + + [Range(10, 100)] + public int Age { get; set; } + + [Required] + [DataType(DataType.Date)] + public DateTimeOffset JoinDate { get; set; } + + [DataType(DataType.EmailAddress)] + public string Email { get; set; } + + [DisplayFormat(NullDisplayText = "Not specified")] + public int? Salary { get; set; } + } +} \ No newline at end of file diff --git a/test/WebSites/TagHelpersWebSite/Views/Employee/Create.cshtml b/test/WebSites/TagHelpersWebSite/Views/Employee/Create.cshtml new file mode 100644 index 0000000000..f1f7600819 --- /dev/null +++ b/test/WebSites/TagHelpersWebSite/Views/Employee/Create.cshtml @@ -0,0 +1,85 @@ +@model TagHelpersWebSite.Models.Employee + +@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers" + +@{ + Layout = null; + Html.Html5DateRenderingMode = Html5DateRenderingMode.Rfc3339; +} + + + + + + + + Create + + + +
+ +
+

Employee

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+ Back to List +
+ + + diff --git a/test/WebSites/TagHelpersWebSite/Views/Employee/Details.cshtml b/test/WebSites/TagHelpersWebSite/Views/Employee/Details.cshtml new file mode 100644 index 0000000000..34420f35c4 --- /dev/null +++ b/test/WebSites/TagHelpersWebSite/Views/Employee/Details.cshtml @@ -0,0 +1,64 @@ +@model TagHelpersWebSite.Models.Employee + +@{ + Layout = null; +} + + + + + + + Details + + + + +
+

Employee

+
+
+
+ @Html.DisplayNameFor(model => model.Age) +
+
+ @Html.DisplayFor(model => model.Age) +
+
+ @Html.DisplayNameFor(model => model.Email) +
+
+ @Html.DisplayFor(model => model.Email) +
+
+ @Html.DisplayNameFor(model => model.FullName) +
+
+ @Html.DisplayFor(model => model.FullName) +
+
+ @Html.DisplayNameFor(model => model.Gender) +
+
+ @Html.DisplayFor(model => model.Gender) +
+
+ @Html.DisplayNameFor(model => model.JoinDate) +
+
+ @Html.DisplayFor(model => model.JoinDate) +
+
+ @Html.DisplayNameFor(model => model.Salary) +
+
+ @Html.DisplayFor(model => model.Salary) +
+
+
+

+ @Html.ActionLink("Back to List", "Index") +

+ + + diff --git a/test/WebSites/TagHelpersWebSite/project.json b/test/WebSites/TagHelpersWebSite/project.json index ce5714d371..ee2a5897fd 100644 --- a/test/WebSites/TagHelpersWebSite/project.json +++ b/test/WebSites/TagHelpersWebSite/project.json @@ -9,7 +9,7 @@ "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-*", "Microsoft.AspNet.Mvc.TestConfiguration": "1.0.0", "Microsoft.AspNet.Server.IIS": "1.0.0-*", - "Microsoft.AspNet.Server.WebListener": "1.0.0-*", + "Microsoft.AspNet.Server.WebListener": "1.0.0-*", "Microsoft.AspNet.StaticFiles": "1.0.0-*" }, "frameworks": {