Add extra test for WithCallback

This commit is contained in:
Stef Heyenrath
2023-03-01 12:10:03 +01:00
parent c344b73f45
commit 61cdc13fae
2 changed files with 41 additions and 1 deletions

View File

@@ -643,6 +643,7 @@ namespace WireMock.Net.ConsoleApplication
.WithStatusCode(200) .WithStatusCode(200)
.WithHeader("Content-Type", "application/json") .WithHeader("Content-Type", "application/json")
.WithBodyAsJson(new { Id = "5bdf076c-5654-4b3e-842c-7caf1fabf8c9" })); .WithBodyAsJson(new { Id = "5bdf076c-5654-4b3e-842c-7caf1fabf8c9" }));
server server
.Given(Request.Create().WithPath("/random200or505").UsingGet()) .Given(Request.Create().WithPath("/random200or505").UsingGet())
.RespondWith(Response.Create().WithCallback(request => .RespondWith(Response.Create().WithCallback(request =>
@@ -650,7 +651,11 @@ namespace WireMock.Net.ConsoleApplication
int code = new Random().Next(1, 2) == 1 ? 505 : 200; int code = new Random().Next(1, 2) == 1 ? 505 : 200;
return new ResponseMessage return new ResponseMessage
{ {
BodyData = new BodyData { BodyAsString = "random200or505:" + code, DetectedBodyType = Types.BodyType.String }, BodyData = new BodyData
{
BodyAsString = "random200or505:" + code + ", HeadersFromRequest = " + string.Join(",", request.Headers),
DetectedBodyType = Types.BodyType.String,
},
StatusCode = code StatusCode = code
}; };
})); }));

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -279,4 +280,38 @@ public class ResponseWithCallbackTests
response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
response.Message.StatusCode.Should().Be(302); response.Message.StatusCode.Should().Be(302);
} }
// https://github.com/WireMock-Net/WireMock.Net/issues/898
[Fact]
public async Task Response_WithCallback_WithRequestHeaders_Should_BeAccessibleInCallback()
{
// Assign
var headerKey = "headerKey";
var headerValues = new[] { "abc" };
var requestHeaders = new Dictionary<string, string[]>
{
{ headerKey, headerValues }
};
var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1", null, requestHeaders);
var responseBuilder = Response.Create()
.WithCallback(request =>
{
var headersFromRequest = request!.Headers![headerKey].ToList();
headersFromRequest.Add("extra");
return new ResponseMessage
{
Headers = new Dictionary<string, WireMockList<string>>
{
{ headerKey, new WireMockList<string>(headersFromRequest) }
}
};
});
// Act
var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
// Assert
response.Message.Headers![headerKey].Should().Contain("extra");
}
} }