From 232deb47d069426db94320615181bbfb0ee44fd6 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Mon, 10 Nov 2014 11:55:31 -0800 Subject: [PATCH] added tests for json input formatter --- .../InputFormatterTests.cs | 59 +++++++++++++++++++ ...ntroller.cs => JsonFormatterController.cs} | 10 ++++ 2 files changed, 69 insertions(+) rename test/WebSites/FormatterWebSite/Controllers/{JsonFormattterController.cs => JsonFormatterController.cs} (72%) diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/InputFormatterTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/InputFormatterTests.cs index bae0422055..8712a11f00 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/InputFormatterTests.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/InputFormatterTests.cs @@ -104,5 +104,64 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests Assert.Equal("dummy", result.ParameterName); Assert.Equal(expectedSource, result.Source); } + + [Theory] + [InlineData("application/json", "{\"SampleInt\":10}", 10)] + [InlineData("application/json", "{}", 0)] + public async Task JsonInputFormatter_IsModelStateValid_ForValidContentType(string requestContentType, string jsonInput, int expectedSampleIntValue) + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new StringContent(jsonInput, Encoding.UTF8, requestContentType); + + // Act + var response = await client.PostAsync("http://localhost/JsonFormatter/ReturnInput/", content); + var responseBody = await response.Content.ReadAsStringAsync(); + + //Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal(expectedSampleIntValue.ToString(), responseBody); + } + + [Theory] + [InlineData("{\"SampleInt\":10}")] + [InlineData("{}")] + [InlineData("")] + public async Task JsonInputFormatter_IsModelStateInvalid_ForEmptyContentType(string jsonInput) + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new StringContent(jsonInput, Encoding.UTF8, "application/json"); + content.Headers.Clear(); + + // Act + var response = await client.PostAsync("http://localhost/JsonFormatter/ReturnInput/", content); + var responseBody = await response.Content.ReadAsStringAsync(); + + //Assert + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + + [Theory] + [InlineData("application/json", "{\"SampleInt\":10}", 10)] + [InlineData("application/json", "{}", 0)] + public async Task JsonInputFormatter_IsModelStateValid_ForTransferEncodingChunk(string requestContentType, string jsonInput, int expectedSampleIntValue) + { + // Arrange + var server = TestServer.Create(_services, _app); + var client = server.CreateClient(); + var content = new StringContent(jsonInput, Encoding.UTF8, requestContentType); + client.DefaultRequestHeaders.TransferEncodingChunked = true; + + // Act + var response = await client.PostAsync("http://localhost/JsonFormatter/ReturnInput/", content); + var responseBody = await response.Content.ReadAsStringAsync(); + + //Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal(expectedSampleIntValue.ToString(), responseBody); + } } } \ No newline at end of file diff --git a/test/WebSites/FormatterWebSite/Controllers/JsonFormattterController.cs b/test/WebSites/FormatterWebSite/Controllers/JsonFormatterController.cs similarity index 72% rename from test/WebSites/FormatterWebSite/Controllers/JsonFormattterController.cs rename to test/WebSites/FormatterWebSite/Controllers/JsonFormatterController.cs index fedc406c6c..bd01d516d6 100644 --- a/test/WebSites/FormatterWebSite/Controllers/JsonFormattterController.cs +++ b/test/WebSites/FormatterWebSite/Controllers/JsonFormatterController.cs @@ -25,5 +25,15 @@ namespace FormatterWebSite.Controllers return objectResult; } + + [HttpPost] + public IActionResult ReturnInput([FromBody]DummyClass dummyObject) + { + if (!ModelState.IsValid) + { + return new HttpStatusCodeResult(400); + } + return Content(dummyObject.SampleInt.ToString()); + } } } \ No newline at end of file