mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-19 23:11:20 +02:00
@@ -358,6 +358,20 @@ namespace WireMock.Net.ConsoleApplication
|
|||||||
.WithBody("linq match !!!")
|
.WithBody("linq match !!!")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
server
|
||||||
|
.Given(Request.Create().WithPath("/myendpoint").UsingAnyMethod())
|
||||||
|
.RespondWith(Response.Create()
|
||||||
|
.WithStatusCode(500)
|
||||||
|
.WithBody(requestMessage =>
|
||||||
|
{
|
||||||
|
string returnStr = JsonConvert.SerializeObject(new
|
||||||
|
{
|
||||||
|
Message = "Test error"
|
||||||
|
});
|
||||||
|
return returnStr;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
System.Console.WriteLine("Press any key to stop the server");
|
System.Console.WriteLine("Press any key to stop the server");
|
||||||
System.Console.ReadKey();
|
System.Console.ReadKey();
|
||||||
server.Stop();
|
server.Stop();
|
||||||
|
|||||||
@@ -169,7 +169,14 @@ namespace WireMock.ResponseBuilders
|
|||||||
/// <inheritdoc cref="IBodyResponseBuilder.WithBody(Func{RequestMessage, string}, string, Encoding)"/>
|
/// <inheritdoc cref="IBodyResponseBuilder.WithBody(Func{RequestMessage, string}, string, Encoding)"/>
|
||||||
public IResponseBuilder WithBody(Func<RequestMessage, string> bodyFactory, string destination = BodyDestinationFormat.SameAsSource, Encoding encoding = null)
|
public IResponseBuilder WithBody(Func<RequestMessage, string> bodyFactory, string destination = BodyDestinationFormat.SameAsSource, Encoding encoding = null)
|
||||||
{
|
{
|
||||||
return WithCallback(req => new ResponseMessage { Body = bodyFactory(req) });
|
Check.NotNull(bodyFactory, nameof(bodyFactory));
|
||||||
|
|
||||||
|
return WithCallback(req => new ResponseMessage
|
||||||
|
{
|
||||||
|
Body = bodyFactory(req),
|
||||||
|
BodyDestination = destination,
|
||||||
|
BodyEncoding = encoding ?? Encoding.UTF8
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc cref="IBodyResponseBuilder.WithBody(byte[], string, Encoding)"/>
|
/// <inheritdoc cref="IBodyResponseBuilder.WithBody(byte[], string, Encoding)"/>
|
||||||
@@ -353,6 +360,22 @@ namespace WireMock.ResponseBuilders
|
|||||||
await Task.Delay(Delay.Value);
|
await Task.Delay(Delay.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Callback != null)
|
||||||
|
{
|
||||||
|
var callbackResponseMessage = Callback(requestMessage);
|
||||||
|
|
||||||
|
// Copy StatusCode from ResponseMessage
|
||||||
|
callbackResponseMessage.StatusCode = ResponseMessage.StatusCode;
|
||||||
|
|
||||||
|
// Copy Headers from ResponseMessage (if defined)
|
||||||
|
if (ResponseMessage.Headers != null)
|
||||||
|
{
|
||||||
|
callbackResponseMessage.Headers = ResponseMessage.Headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
return callbackResponseMessage;
|
||||||
|
}
|
||||||
|
|
||||||
if (ProxyUrl != null && _httpClientForProxy != null)
|
if (ProxyUrl != null && _httpClientForProxy != null)
|
||||||
{
|
{
|
||||||
var requestUri = new Uri(requestMessage.Url);
|
var requestUri = new Uri(requestMessage.Url);
|
||||||
@@ -367,11 +390,7 @@ namespace WireMock.ResponseBuilders
|
|||||||
return ResponseMessageTransformer.Transform(requestMessage, ResponseMessage);
|
return ResponseMessageTransformer.Transform(requestMessage, ResponseMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Callback != null)
|
// Just return normal defined ResponseMessage
|
||||||
{
|
|
||||||
return Callback(requestMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ResponseMessage;
|
return ResponseMessage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,15 +48,15 @@ namespace WireMock.Net.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void FluentMockServer_Admin_StartStop()
|
public void FluentMockServer_Admin_StartStop()
|
||||||
{
|
{
|
||||||
var server1 = FluentMockServer.Start("http://localhost:9091");
|
var server1 = FluentMockServer.Start("http://localhost:19091");
|
||||||
|
|
||||||
Check.That(server1.Urls[0]).Equals("http://localhost:9091");
|
Check.That(server1.Urls[0]).Equals("http://localhost:19091");
|
||||||
|
|
||||||
server1.Stop();
|
server1.Stop();
|
||||||
|
|
||||||
var server2 = FluentMockServer.Start("http://localhost:9091/");
|
var server2 = FluentMockServer.Start("http://localhost:19091/");
|
||||||
|
|
||||||
Check.That(server2.Urls[0]).Equals("http://localhost:9091/");
|
Check.That(server2.Urls[0]).Equals("http://localhost:19091/");
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ namespace WireMock.Net.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task FluentMockServer_Should_respond_to_request_bodyAsCallback()
|
public async Task FluentMockServer_Should_respond_to_request_bodyAsCallback()
|
||||||
{
|
{
|
||||||
// given
|
// Assign
|
||||||
var _server = FluentMockServer.Start();
|
var _server = FluentMockServer.Start();
|
||||||
|
|
||||||
_server
|
_server
|
||||||
@@ -114,14 +114,18 @@ namespace WireMock.Net.Tests
|
|||||||
.WithPath("/foo")
|
.WithPath("/foo")
|
||||||
.UsingGet())
|
.UsingGet())
|
||||||
.RespondWith(Response.Create()
|
.RespondWith(Response.Create()
|
||||||
.WithStatusCode(200)
|
.WithStatusCode(500)
|
||||||
.WithBody(req => $"{{ path: '{req.Path}' }}"));
|
.WithHeader("H1", "X1")
|
||||||
|
.WithBody(req => $"path: {req.Path}"));
|
||||||
|
|
||||||
// when
|
// Act
|
||||||
var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
|
var response = await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo");
|
||||||
|
|
||||||
// then
|
// Assert
|
||||||
Check.That(response).IsEqualTo("{ path: '/foo' }");
|
string content = await response.Content.ReadAsStringAsync();
|
||||||
|
Check.That(content).IsEqualTo("path: /foo");
|
||||||
|
Check.That((int) response.StatusCode).IsEqualTo(500);
|
||||||
|
Check.That(response.Headers.GetValues("H1")).ContainsExactly("X1");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.Text;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NFluent;
|
using NFluent;
|
||||||
using WireMock.Models;
|
using WireMock.Models;
|
||||||
@@ -150,5 +149,30 @@ namespace WireMock.Net.Tests.ResponseBuilderTests
|
|||||||
Check.That(((dynamic)responseMessage.BodyAsJson).value).Equals(42);
|
Check.That(((dynamic)responseMessage.BodyAsJson).value).Equals(42);
|
||||||
Check.That(responseMessage.BodyEncoding).Equals(Encoding.ASCII);
|
Check.That(responseMessage.BodyEncoding).Equals(Encoding.ASCII);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Response_ProvideResponse_WithBody_Func()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var request = new RequestMessage(new UrlDetails("http://localhost/test"), "GET", ClientIp);
|
||||||
|
|
||||||
|
var response = Response.Create()
|
||||||
|
.WithStatusCode(500)
|
||||||
|
.WithHeader("H1", "X1")
|
||||||
|
.WithHeader("H2", "X2")
|
||||||
|
.WithBody(req => $"path: {req.Path}");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var responseMessage = await response.ProvideResponseAsync(request);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(responseMessage.Body).IsEqualTo("path: /test");
|
||||||
|
Check.That(responseMessage.BodyAsBytes).IsNull();
|
||||||
|
Check.That(responseMessage.BodyAsJson).IsNull();
|
||||||
|
Check.That(responseMessage.BodyEncoding.CodePage).Equals(Encoding.UTF8.CodePage);
|
||||||
|
Check.That(responseMessage.StatusCode).IsEqualTo(500);
|
||||||
|
Check.That(responseMessage.Headers["H1"].ToString()).IsEqualTo("X1");
|
||||||
|
Check.That(responseMessage.Headers["H2"].ToString()).IsEqualTo("X2");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user