From c0efb0ea307fc9499b02acb02a6b00ad9d8010c0 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 25 Jan 2020 17:16:28 +0100 Subject: [PATCH 1/4] . --- .../Serialization/MappingConverter.cs | 3 +- .../Server/WireMockServer.Admin.cs | 11 +++-- .../ResponseWithHandlebarsTests.cs | 47 +++++++++++++++++++ .../WireMockAdminApiTests.cs | 16 +++++-- 4 files changed, 68 insertions(+), 9 deletions(-) diff --git a/src/WireMock.Net/Serialization/MappingConverter.cs b/src/WireMock.Net/Serialization/MappingConverter.cs index b88b0d849..cdc322246 100644 --- a/src/WireMock.Net/Serialization/MappingConverter.cs +++ b/src/WireMock.Net/Serialization/MappingConverter.cs @@ -5,9 +5,8 @@ using WireMock.RequestBuilders; using WireMock.ResponseBuilders; using WireMock.Settings; -using WireMock.Util; -using WireMock.Validation; using WireMock.Types; +using WireMock.Validation; namespace WireMock.Serialization { diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs index 8ad49169c..835a63f2a 100644 --- a/src/WireMock.Net/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; @@ -808,13 +809,17 @@ private IResponseBuilder InitResponseBuilder(ResponseModel responseModel) return responseBuilder.WithProxy(proxyAndRecordSettings); } - if (responseModel.StatusCode is string) + if (responseModel.StatusCode is string statusCodeAsString) { - responseBuilder = responseBuilder.WithStatusCode((string) responseModel.StatusCode); + responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString); + } + else if (responseModel.StatusCode is int statusCodeAsInt) + { + responseBuilder = responseBuilder.WithStatusCode(statusCodeAsInt); } else { - responseBuilder = responseBuilder.WithStatusCode(Convert.ToInt32(responseModel.StatusCode)); + responseBuilder = responseBuilder.WithStatusCode(HttpStatusCode.OK); } if (responseModel.Headers != null) diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs index bca4e544a..abbdea9e0 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs @@ -105,6 +105,53 @@ public async Task Response_ProvideResponse_Handlebars_Query() Check.That(responseMessage.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5"); } + [Fact] + public async Task Response_ProvideResponse_Handlebars_StatusCode() + { + // Assign + var body = new BodyData + { + BodyAsString = "abc", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body); + + var response = Response.Create() + .WithStatusCode("{{request.query.a}}") + .WithBody("test") + .WithTransformer(); + + // Act + var responseMessage = await response.ProvideResponseAsync(request, _settings); + + // Assert + Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); + Check.That(responseMessage.StatusCode).Equals(400); + } + + [Fact] + public async Task Response_ProvideResponse_Handlebars_StatusCodeIsNull() + { + // Assign + var body = new BodyData + { + BodyAsString = "abc", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body); + + var response = Response.Create() + .WithBody("test") + .WithTransformer(); + + // Act + var responseMessage = await response.ProvideResponseAsync(request, _settings); + + // Assert + Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); + Check.That(responseMessage.StatusCode).Equals(200); + } + [Fact] public async Task Response_ProvideResponse_Handlebars_Header() { diff --git a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs index e921dddf1..5bfada5f3 100644 --- a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs +++ b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs @@ -12,6 +12,8 @@ using WireMock.Client; using WireMock.Handlers; using WireMock.Logging; +using WireMock.Matchers; +using WireMock.Models; using WireMock.Server; using WireMock.Settings; using Xunit; @@ -88,8 +90,11 @@ public async Task IWireMockAdminApi_PutMappingAsync() server.Stop(); } - [Fact] - public async Task IWireMockAdminApi_PostMappingAsync() + [Theory] + [InlineData(null, 200)] + [InlineData(200, 200)] + [InlineData("200", 200)] + public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, int expectedStatusCode) { // Arrange var server = WireMockServer.StartWithAdminInterface(); @@ -98,8 +103,8 @@ public async Task IWireMockAdminApi_PostMappingAsync() // Act var model = new MappingModel { - Request = new RequestModel { Path = "/1" }, - Response = new ResponseModel { Body = "txt", StatusCode = 200 }, + Request = new RequestModel { Path = new WildcardMatcher("*") }, + Response = new ResponseModel { Body = "txt", StatusCode = statusCode }, Priority = 500, Title = "test" }; @@ -114,6 +119,9 @@ public async Task IWireMockAdminApi_PostMappingAsync() Check.That(mapping).IsNotNull(); Check.That(mapping.Title).Equals("test"); + var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("/1"), "GET", "")); + Check.That(response.StatusCode).Equals(expectedStatusCode); + server.Stop(); } From a41f49ac3984d30408a845092ffc1a767e2ca15d Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 25 Jan 2020 17:38:34 +0100 Subject: [PATCH 2/4] fix tests --- .../RequestMatchers/RequestMessageBodyMatcherTests.cs | 2 -- .../ResponseBuilders/ResponseWithHandlebarsTests.cs | 2 +- test/WireMock.Net.Tests/WireMockAdminApiTests.cs | 8 ++++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageBodyMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageBodyMatcherTests.cs index 6921847df..ab64189d0 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageBodyMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageBodyMatcherTests.cs @@ -4,9 +4,7 @@ using System.Text; using System.Threading.Tasks; using Moq; -using Newtonsoft.Json; using NFluent; -using System.Linq; using WireMock.Matchers; using WireMock.Matchers.Request; using WireMock.Models; diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs index abbdea9e0..698a6a96e 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsTests.cs @@ -126,7 +126,7 @@ public async Task Response_ProvideResponse_Handlebars_StatusCode() // Assert Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.StatusCode).Equals(400); + Check.That(responseMessage.StatusCode).Equals("400"); } [Fact] diff --git a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs index 5bfada5f3..0743d5edd 100644 --- a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs +++ b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs @@ -93,8 +93,8 @@ public async Task IWireMockAdminApi_PutMappingAsync() [Theory] [InlineData(null, 200)] [InlineData(200, 200)] - [InlineData("200", 200)] - public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, int expectedStatusCode) + [InlineData("200", "200")] + public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, object expectedStatusCode) { // Arrange var server = WireMockServer.StartWithAdminInterface(); @@ -103,7 +103,7 @@ public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, int expe // Act var model = new MappingModel { - Request = new RequestModel { Path = new WildcardMatcher("*") }, + Request = new RequestModel { Path = "/1" }, Response = new ResponseModel { Body = "txt", StatusCode = statusCode }, Priority = 500, Title = "test" @@ -119,7 +119,7 @@ public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, int expe Check.That(mapping).IsNotNull(); Check.That(mapping.Title).Equals("test"); - var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("/1"), "GET", "")); + var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("http://localhost/1"), "GET", "")); Check.That(response.StatusCode).Equals(expectedStatusCode); server.Stop(); From edfe898c8b32f6c947e9f74dcdc1432670d9e03e Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 25 Jan 2020 17:43:55 +0100 Subject: [PATCH 3/4] responseModel.StatusCode is int statusCodeAsInt && statusCodeAsInt > 0 --- src/WireMock.Net/Server/WireMockServer.Admin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs index 835a63f2a..d9fe06f5f 100644 --- a/src/WireMock.Net/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs @@ -813,7 +813,7 @@ private IResponseBuilder InitResponseBuilder(ResponseModel responseModel) { responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString); } - else if (responseModel.StatusCode is int statusCodeAsInt) + else if (responseModel.StatusCode is int statusCodeAsInt && statusCodeAsInt > 0) { responseBuilder = responseBuilder.WithStatusCode(statusCodeAsInt); } From 89b33fe7707598ecfb50ce97cf97b541ca200849 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 25 Jan 2020 17:46:39 +0100 Subject: [PATCH 4/4] < 0 --- test/WireMock.Net.Tests/WireMockAdminApiTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs index 0743d5edd..9711fd296 100644 --- a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs +++ b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs @@ -92,6 +92,8 @@ public async Task IWireMockAdminApi_PutMappingAsync() [Theory] [InlineData(null, 200)] + [InlineData(-1, 200)] + [InlineData(0, 200)] [InlineData(200, 200)] [InlineData("200", "200")] public async Task IWireMockAdminApi_PostMappingAsync(object statusCode, object expectedStatusCode)