WithCallback should use also use enum HttpStatusCode (#535)

* Fix #533

* simplyfy code
This commit is contained in:
Stef Heyenrath
2020-11-10 09:20:57 +00:00
committed by GitHub
parent e107b5cfca
commit a0fdc002c8
5 changed files with 232 additions and 189 deletions

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
@@ -79,17 +80,22 @@ namespace WireMock.Owin.Mappers
break;
}
switch (responseMessage.StatusCode)
var statusCodeType = responseMessage.StatusCode?.GetType();
switch (statusCodeType)
{
case int statusCodeAsInteger:
response.StatusCode = MapStatusCode(statusCodeAsInteger);
case Type typeAsIntOrEnum when typeAsIntOrEnum == typeof(int) || typeAsIntOrEnum == typeof(int?) || typeAsIntOrEnum.GetTypeInfo().IsEnum:
response.StatusCode = MapStatusCode((int)responseMessage.StatusCode);
break;
case string statusCodeAsString:
case Type typeAsString when typeAsString == typeof(string):
// Note: this case will also match on null
int.TryParse(statusCodeAsString, out int result);
int.TryParse(responseMessage.StatusCode as string, out int result);
response.StatusCode = MapStatusCode(result);
break;
default:
break;
}
SetResponseHeaders(responseMessage, response);

View File

@@ -0,0 +1,37 @@
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using FluentAssertions;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
using Xunit;
namespace WireMock.Net.Tests
{
public partial class WireMockServerTests
{
[Theory]
[InlineData(HttpStatusCode.Conflict)]
[InlineData(409)]
[InlineData("409")]
public async Task WireMockServer_WithCallback_Should_Use_StatusCodeFromResponse(object statusCode)
{
// Arrange
var server = WireMockServer.Start();
server.Given(Request.Create().UsingPost().WithPath("/foo"))
.RespondWith(Response.Create()
.WithCallback(request => new ResponseMessage
{
StatusCode = statusCode
}));
// Act
using var httpClient = new HttpClient();
var response = await httpClient.PostAsync("http://localhost:" + server.Ports[0] + "/foo", new StringContent("dummy"));
// Assert
response.StatusCode.Should().Be(409);
}
}
}

View File

@@ -15,7 +15,7 @@ using Xunit;
namespace WireMock.Net.Tests
{
public class WireMockServerTests
public partial class WireMockServerTests
{
[Fact]
public async Task WireMockServer_Should_reset_requestlogs()