diff --git a/WireMock.Net Solution.sln.DotSettings b/WireMock.Net Solution.sln.DotSettings
index 5504e424..448c9dfd 100644
--- a/WireMock.Net Solution.sln.DotSettings
+++ b/WireMock.Net Solution.sln.DotSettings
@@ -30,5 +30,6 @@
True
True
True
+ True
True
\ No newline at end of file
diff --git a/examples/WireMock.Net.Console.NETCoreApp/Program.cs b/examples/WireMock.Net.Console.NETCoreApp/Program.cs
index e5f99e98..e486bf16 100644
--- a/examples/WireMock.Net.Console.NETCoreApp/Program.cs
+++ b/examples/WireMock.Net.Console.NETCoreApp/Program.cs
@@ -1,22 +1,21 @@
-using System.IO;
+using System.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using log4net.Repository;
using WireMock.Net.ConsoleApplication;
-namespace WireMock.Net.Console.NETCoreApp
+namespace WireMock.Net.Console.NETCoreApp;
+
+static class Program
{
- static class Program
+ private static readonly ILoggerRepository LogRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
+ private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
+
+ static void Main(params string[] args)
{
- private static readonly ILoggerRepository LogRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
- private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
+ XmlConfigurator.Configure(LogRepository, new FileInfo("log4net.config"));
- static void Main(params string[] args)
- {
- XmlConfigurator.Configure(LogRepository, new FileInfo("log4net.config"));
-
- MainApp.Run();
- }
+ MainApp.Run();
}
}
\ No newline at end of file
diff --git a/examples/WireMock.Net.Console.Net452.Classic/Program.cs b/examples/WireMock.Net.Console.Net452.Classic/Program.cs
index c143a0f3..b6314fc2 100644
--- a/examples/WireMock.Net.Console.Net452.Classic/Program.cs
+++ b/examples/WireMock.Net.Console.Net452.Classic/Program.cs
@@ -1,15 +1,14 @@
-using System.IO;
+using System.IO;
using log4net.Config;
-namespace WireMock.Net.ConsoleApplication
-{
- static class Program
- {
- static void Main(params string[] args)
- {
- XmlConfigurator.Configure(new FileInfo("log4net.config"));
+namespace WireMock.Net.ConsoleApplication;
- MainApp.Run();
- }
+static class Program
+{
+ static void Main(params string[] args)
+ {
+ XmlConfigurator.Configure(new FileInfo("log4net.config"));
+
+ MainApp.Run();
}
}
\ No newline at end of file
diff --git a/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj b/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj
index 5e8d72e8..c7e4e9b8 100644
--- a/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj
+++ b/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj
@@ -80,7 +80,6 @@
Designer
-
PreserveNewest
diff --git a/examples/WireMock.Net.StandAlone.Net452/Program.cs b/examples/WireMock.Net.StandAlone.Net452/Program.cs
index ff2acda3..c7d8b60f 100644
--- a/examples/WireMock.Net.StandAlone.Net452/Program.cs
+++ b/examples/WireMock.Net.StandAlone.Net452/Program.cs
@@ -1,27 +1,26 @@
-using System;
-using System.IO;
-using System.Linq;
-using log4net.Config;
-using WireMock.Server;
-using WireMock.Settings;
-
-namespace WireMock.Net.StandAlone.Net452
-{
- public class Program
- {
- static void Main(params string[] args)
- {
- XmlConfigurator.Configure(new FileInfo("log4net.config"));
-
- if (WireMockServerSettingsParser.TryParseArguments(args, out var settings))
- {
- settings.Logger.Debug("WireMock.Net server arguments [{0}]", string.Join(", ", args.Select(a => $"'{a}'")));
+using System;
+using System.IO;
+using System.Linq;
+using log4net.Config;
+using WireMock.Server;
+using WireMock.Settings;
- WireMockServer.Start(settings);
+namespace WireMock.Net.StandAlone.Net452;
- Console.WriteLine("Press any key to stop the server");
- Console.ReadKey();
- }
- }
- }
+public class Program
+{
+ static void Main(params string[] args)
+ {
+ XmlConfigurator.Configure(new FileInfo("log4net.config"));
+
+ if (WireMockServerSettingsParser.TryParseArguments(args, out var settings))
+ {
+ Console.WriteLine("WireMock.Net server arguments [{0}]", string.Join(", ", args.Select(a => $"'{a}'")));
+
+ WireMockServer.Start(settings);
+
+ Console.WriteLine("Press any key to stop the server");
+ Console.ReadKey();
+ }
+ }
}
\ No newline at end of file
diff --git a/examples/WireMock.Net.StandAlone.Net461/Program.cs b/examples/WireMock.Net.StandAlone.Net461/Program.cs
index 172aed7f..69f76045 100644
--- a/examples/WireMock.Net.StandAlone.Net461/Program.cs
+++ b/examples/WireMock.Net.StandAlone.Net461/Program.cs
@@ -1,23 +1,22 @@
-using System;
-using System.Linq;
-using WireMock.Server;
-using WireMock.Settings;
-
-namespace WireMock.Net.StandAlone.Net461
-{
- static class Program
- {
- static void Main(string[] args)
- {
- if (WireMockServerSettingsParser.TryParseArguments(args, out var settings))
- {
- settings.Logger.Debug("WireMock.Net server arguments [{0}]", string.Join(", ", args.Select(a => $"'{a}'")));
+using System;
+using System.Linq;
+using WireMock.Server;
+using WireMock.Settings;
- WireMockServer.Start(settings);
+namespace WireMock.Net.StandAlone.Net461;
- Console.WriteLine("Press any key to stop the server");
- Console.ReadKey();
- }
- }
- }
+static class Program
+{
+ static void Main(string[] args)
+ {
+ if (WireMockServerSettingsParser.TryParseArguments(args, out var settings))
+ {
+ Console.WriteLine("WireMock.Net server arguments [{0}]", string.Join(", ", args.Select(a => $"'{a}'")));
+
+ WireMockServer.Start(settings);
+
+ Console.WriteLine("Press any key to stop the server");
+ Console.ReadKey();
+ }
+ }
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Http/WebhookSender.cs b/src/WireMock.Net/Http/WebhookSender.cs
index 45a6e454..20c6a949 100644
--- a/src/WireMock.Net/Http/WebhookSender.cs
+++ b/src/WireMock.Net/Http/WebhookSender.cs
@@ -25,9 +25,10 @@ internal class WebhookSender
_settings = Guard.NotNull(settings);
}
- public Task SendAsync(HttpClient client, IWebhookRequest request, IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage)
+ public Task SendAsync(HttpClient client, IMapping mapping, IWebhookRequest request, IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage)
{
Guard.NotNull(client);
+ Guard.NotNull(mapping);
Guard.NotNull(request);
Guard.NotNull(originalRequestMessage);
Guard.NotNull(originalResponseMessage);
@@ -54,7 +55,7 @@ internal class WebhookSender
throw new NotImplementedException($"TransformerType '{request.TransformerType}' is not supported.");
}
- (bodyData, headers) = responseMessageTransformer.Transform(originalRequestMessage, originalResponseMessage, request.BodyData, request.Headers, request.TransformerReplaceNodeOptions);
+ (bodyData, headers) = responseMessageTransformer.Transform(mapping, originalRequestMessage, originalResponseMessage, request.BodyData, request.Headers, request.TransformerReplaceNodeOptions);
}
else
{
diff --git a/src/WireMock.Net/Mapping.cs b/src/WireMock.Net/Mapping.cs
index a981fa80..3c404a21 100644
--- a/src/WireMock.Net/Mapping.cs
+++ b/src/WireMock.Net/Mapping.cs
@@ -15,14 +15,14 @@ public class Mapping : IMapping
///
public Guid Guid { get; }
- ///
- public string? Title { get; }
+ ///
+ public string? Title { get; }
- ///
- public string? Description { get; }
+ ///
+ public string? Description { get; }
- ///
- public string? Path { get; set; }
+ ///
+ public string? Path { get; set; }
///
public int Priority { get; }
@@ -115,16 +115,16 @@ public class Mapping : IMapping
TimeSettings = timeSettings;
}
- ///
- public Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage)
- {
- return Provider.ProvideResponseAsync(requestMessage, Settings);
- }
+ ///
+ public Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage)
+ {
+ return Provider.ProvideResponseAsync(this, requestMessage, Settings);
+ }
- ///
- public IRequestMatchResult GetRequestMatchResult(IRequestMessage requestMessage, string? nextState)
- {
- var result = new RequestMatchResult();
+ ///
+ public IRequestMatchResult GetRequestMatchResult(IRequestMessage requestMessage, string? nextState)
+ {
+ var result = new RequestMatchResult();
RequestMatcher.GetMatchingScore(requestMessage, result);
diff --git a/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs b/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
index 2c8e97b4..1594bfcd 100644
--- a/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
+++ b/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
@@ -4,12 +4,12 @@ using WireMock.Handlers;
using WireMock.Logging;
using WireMock.Matchers;
using WireMock.Util;
-using WireMock.Types;
#if !USE_ASPNETCORE
using Owin;
#else
using IAppBuilder = Microsoft.AspNetCore.Builder.IApplicationBuilder;
using Microsoft.Extensions.DependencyInjection;
+using WireMock.Types;
#endif
namespace WireMock.Owin;
diff --git a/src/WireMock.Net/Owin/WireMockMiddleware.cs b/src/WireMock.Net/Owin/WireMockMiddleware.cs
index 5bbb9097..c00dd708 100644
--- a/src/WireMock.Net/Owin/WireMockMiddleware.cs
+++ b/src/WireMock.Net/Owin/WireMockMiddleware.cs
@@ -26,7 +26,7 @@ namespace WireMock.Owin
{
internal class WireMockMiddleware : OwinMiddleware
{
- private readonly object _lock = new object();
+ private readonly object _lock = new();
private static readonly Task CompletedTask = Task.FromResult(false);
private readonly IWireMockMiddlewareOptions _options;
private readonly IOwinRequestMapper _requestMapper;
@@ -108,10 +108,10 @@ namespace WireMock.Owin
logRequest = targetMapping.LogMapping;
- if (targetMapping.IsAdminInterface && _options.AuthenticationMatcher != null)
+ if (targetMapping.IsAdminInterface && _options.AuthenticationMatcher != null && request.Headers != null)
{
bool present = request.Headers.TryGetValue(HttpKnownHeaderNames.Authorization, out WireMockList authorization);
- if (!present || _options.AuthenticationMatcher.IsMatch(authorization.ToString()) < MatchScores.Perfect)
+ if (!present || _options.AuthenticationMatcher.IsMatch(authorization!.ToString()) < MatchScores.Perfect)
{
_options.Logger.Error("HttpStatusCode set to 401");
response = ResponseMessageBuilder.Create(null, HttpStatusCode.Unauthorized);
@@ -208,7 +208,7 @@ namespace WireMock.Owin
try
{
- await webhookSender.SendAsync(httpClientForWebhook, mapping.Webhooks[index].Request, request, response).ConfigureAwait(false);
+ await webhookSender.SendAsync(httpClientForWebhook, mapping, mapping.Webhooks[index].Request, request, response).ConfigureAwait(false);
}
catch (Exception ex)
{
diff --git a/src/WireMock.Net/ResponseBuilders/Response.cs b/src/WireMock.Net/ResponseBuilders/Response.cs
index 871e277e..194e1e69 100644
--- a/src/WireMock.Net/ResponseBuilders/Response.cs
+++ b/src/WireMock.Net/ResponseBuilders/Response.cs
@@ -244,7 +244,7 @@ public partial class Response : IResponseBuilder
}
///
- public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage, WireMockServerSettings settings)
+ public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IMapping mapping, IRequestMessage requestMessage, WireMockServerSettings settings)
{
Guard.NotNull(requestMessage);
Guard.NotNull(settings);
@@ -327,7 +327,7 @@ public partial class Response : IResponseBuilder
throw new NotImplementedException($"TransformerType '{TransformerType}' is not supported.");
}
- return (responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile, TransformerReplaceNodeOptions), null);
+ return (responseMessageTransformer.Transform(mapping, requestMessage, responseMessage, UseTransformerForBodyAsFile, TransformerReplaceNodeOptions), null);
}
if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true)
diff --git a/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs b/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs
index e2e8f949..c70a06d5 100644
--- a/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs
+++ b/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs
@@ -13,7 +13,7 @@ internal class DynamicAsyncResponseProvider : IResponseProvider
_responseMessageFunc = responseMessageFunc;
}
- public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage, WireMockServerSettings settings)
+ public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IMapping mapping, IRequestMessage requestMessage, WireMockServerSettings settings)
{
return (await _responseMessageFunc(requestMessage).ConfigureAwait(false), null);
}
diff --git a/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs b/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs
index 4d2b62ff..ecf0bda9 100644
--- a/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs
+++ b/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs
@@ -13,7 +13,7 @@ internal class DynamicResponseProvider : IResponseProvider
_responseMessageFunc = responseMessageFunc;
}
- public Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage, WireMockServerSettings settings)
+ public Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IMapping mapping, IRequestMessage requestMessage, WireMockServerSettings settings)
{
(IResponseMessage responseMessage, IMapping? mapping) result = (_responseMessageFunc(requestMessage), null);
return Task.FromResult(result);
diff --git a/src/WireMock.Net/ResponseProviders/IResponseProvider.cs b/src/WireMock.Net/ResponseProviders/IResponseProvider.cs
index 49cd6b79..61e136a5 100644
--- a/src/WireMock.Net/ResponseProviders/IResponseProvider.cs
+++ b/src/WireMock.Net/ResponseProviders/IResponseProvider.cs
@@ -13,8 +13,9 @@ public interface IResponseProvider
///
/// The provide response.
///
+ /// The used mapping.
/// The request.
/// The WireMockServerSettings.
/// The including a new (optional) .
- Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage, WireMockServerSettings settings);
+ Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IMapping mapping, IRequestMessage requestMessage, WireMockServerSettings settings);
}
\ No newline at end of file
diff --git a/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs b/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs
index d221ca74..9aab9602 100644
--- a/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs
+++ b/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs
@@ -15,7 +15,7 @@ internal class ProxyAsyncResponseProvider : IResponseProvider
_settings = settings;
}
- public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IRequestMessage requestMessage, WireMockServerSettings settings)
+ public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(IMapping mapping, IRequestMessage requestMessage, WireMockServerSettings settings)
{
return (await _responseMessageFunc(requestMessage, _settings).ConfigureAwait(false), null);
}
diff --git a/src/WireMock.Net/ScenarioState.cs b/src/WireMock.Net/ScenarioState.cs
index d4671471..2c7f57a8 100644
--- a/src/WireMock.Net/ScenarioState.cs
+++ b/src/WireMock.Net/ScenarioState.cs
@@ -1,33 +1,32 @@
-namespace WireMock
+namespace WireMock;
+
+///
+/// The ScenarioState
+///
+public class ScenarioState
{
///
- /// The ScenarioState
+ /// Gets or sets the Name (from the Scenario).
///
- public class ScenarioState
- {
- ///
- /// Gets or sets the Name (from the Scenario).
- ///
- public string Name { get; set; }
+ public string? Name { get; set; }
- ///
- /// Gets or sets the NextState.
- ///
- public string NextState { get; set; }
+ ///
+ /// Gets or sets the NextState.
+ ///
+ public string? NextState { get; set; }
- ///
- /// Gets or sets a value indicating whether this is started.
- ///
- public bool Started { get; set; }
+ ///
+ /// Gets or sets a value indicating whether this is started.
+ ///
+ public bool Started { get; set; }
- ///
- /// Gets or sets a value indicating whether this is finished.
- ///
- public bool Finished { get; set; }
+ ///
+ /// Gets or sets a value indicating whether this is finished.
+ ///
+ public bool Finished { get; set; }
- ///
- /// Gets or sets the state counter.
- ///
- public int Counter { get; set; }
- }
+ ///
+ /// Gets or sets the state counter.
+ ///
+ public int Counter { get; set; }
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
index 47e4f948..b812893a 100644
--- a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
+++ b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
@@ -21,7 +21,7 @@ public static class WireMockServerSettingsParser
[PublicAPI]
public static bool TryParseArguments(string[] args, [NotNullWhen(true)] out WireMockServerSettings? settings, IWireMockLogger? logger = null)
{
- Guard.HasNoNulls(args, nameof(args));
+ Guard.HasNoNulls(args);
var parser = new SimpleCommandLineParser();
parser.Parse(args);
@@ -68,8 +68,7 @@ public static class WireMockServerSettingsParser
{
settings.Logger = logger;
}
-
- if (parser.GetStringValue("WireMockLogger") == "WireMockConsoleLogger")
+ else if (parser.GetStringValue("WireMockLogger") == "WireMockConsoleLogger")
{
settings.Logger = new WireMockConsoleLogger();
}
diff --git a/src/WireMock.Net/Transformers/ITransformer.cs b/src/WireMock.Net/Transformers/ITransformer.cs
index 293b3562..69ecf3c9 100644
--- a/src/WireMock.Net/Transformers/ITransformer.cs
+++ b/src/WireMock.Net/Transformers/ITransformer.cs
@@ -6,7 +6,7 @@ namespace WireMock.Transformers;
interface ITransformer
{
- ResponseMessage Transform(IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options);
+ ResponseMessage Transform(IMapping mapping, IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options);
- (IBodyData? BodyData, IDictionary>? Headers) Transform(IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage, IBodyData? bodyData, IDictionary>? headers, ReplaceNodeOptions options);
+ (IBodyData? BodyData, IDictionary>? Headers) Transform(IMapping mapping, IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage, IBodyData? bodyData, IDictionary>? headers, ReplaceNodeOptions options);
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs
index cac3ca85..73e3a303 100644
--- a/src/WireMock.Net/Transformers/Transformer.cs
+++ b/src/WireMock.Net/Transformers/Transformer.cs
@@ -19,6 +19,7 @@ internal class Transformer : ITransformer
}
public (IBodyData? BodyData, IDictionary>? Headers) Transform(
+ IMapping mapping,
IRequestMessage originalRequestMessage,
IResponseMessage originalResponseMessage,
IBodyData? bodyData,
@@ -29,6 +30,7 @@ internal class Transformer : ITransformer
var model = new
{
+ mapping,
request = originalRequestMessage,
response = originalResponseMessage
};
@@ -42,7 +44,7 @@ internal class Transformer : ITransformer
return (newBodyData, TransformHeaders(transformerContext, model, headers));
}
- public ResponseMessage Transform(IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options)
+ public ResponseMessage Transform(IMapping mapping, IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options)
{
var transformerContext = _factory.Create();
@@ -50,6 +52,7 @@ internal class Transformer : ITransformer
var model = new
{
+ mapping,
request = requestMessage
};
@@ -82,22 +85,15 @@ internal class Transformer : ITransformer
return responseMessage;
}
- private static IBodyData TransformBodyData(ITransformerContext transformerContext, ReplaceNodeOptions options, object model, IBodyData original, bool useTransformerForBodyAsFile)
+ private static IBodyData? TransformBodyData(ITransformerContext transformerContext, ReplaceNodeOptions options, object model, IBodyData original, bool useTransformerForBodyAsFile)
{
- switch (original?.DetectedBodyType)
+ return original.DetectedBodyType switch
{
- case BodyType.Json:
- return TransformBodyAsJson(transformerContext, options, model, original);
-
- case BodyType.File:
- return TransformBodyAsFile(transformerContext, model, original, useTransformerForBodyAsFile);
-
- case BodyType.String:
- return TransformBodyAsString(transformerContext, model, original);
-
- default:
- return null;
- }
+ BodyType.Json => TransformBodyAsJson(transformerContext, options, model, original),
+ BodyType.File => TransformBodyAsFile(transformerContext, model, original, useTransformerForBodyAsFile),
+ BodyType.String => TransformBodyAsString(transformerContext, model, original),
+ _ => null
+ };
}
private static IDictionary> TransformHeaders(ITransformerContext transformerContext, object model, IDictionary>? original)
@@ -166,11 +162,17 @@ internal class Transformer : ITransformer
{
const string property = "_";
JObject dummy = JObject.Parse($"{{ \"{property}\": null }}");
- JToken node = dummy[property];
+ if (dummy[property] == null)
+ {
+ // TODO: check if just returning null is fine
+ return string.Empty;
+ }
+
+ JToken node = dummy[property]!;
ReplaceNodeValue(options, node, transformedString);
- return dummy[property];
+ return dummy[property]!;
}
return stringValue;
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs
index a49eae02..25fcccd3 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs
@@ -1,30 +1,31 @@
using System.Threading.Tasks;
+using Moq;
using NFluent;
using WireMock.Models;
using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseCreateTests
{
- public class ResponseCreateTests
+ private readonly WireMockServerSettings _settings = new ();
+
+ [Fact]
+ public async Task Response_Create_Func()
{
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ // Assign
+ var responseMessage = new ResponseMessage { StatusCode = 500 };
+ var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", "::1");
+ var mapping = new Mock().Object;
- [Fact]
- public async Task Response_Create_Func()
- {
- // Assign
- var responseMessage = new ResponseMessage { StatusCode = 500 };
- var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", "::1");
+ var responseBuilder = Response.Create(() => responseMessage);
- var responseBuilder = Response.Create(() => responseMessage);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(mapping, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message).Equals(responseMessage);
- }
+ // Assert
+ Check.That(response.Message).Equals(responseMessage);
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs
index 8bae514b..81b083c5 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs
@@ -19,11 +19,14 @@ public class ResponseWithBodyTests
{
private const string ClientIp = "::1";
+ private readonly Mock _mappingMock;
private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ private readonly WireMockServerSettings _settings = new ();
public ResponseWithBodyTests()
{
+ _mappingMock = new Mock();
+
_filesystemHandlerMock = new Mock(MockBehavior.Strict);
_filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
@@ -44,7 +47,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.String, Encoding.ASCII);
// act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// then
Check.That(response.Message.BodyData.BodyAsString).Equals("01");
@@ -66,7 +69,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.SameAsSource, Encoding.ASCII);
// act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// then
Check.That(response.Message.BodyData.BodyAsBytes).ContainsExactly(new byte[] { 48, 49 });
@@ -88,7 +91,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody("test", null, Encoding.ASCII);
// act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// then
Check.That(response.Message.BodyData.BodyAsString).Equals("test");
@@ -110,7 +113,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBodyAsJson(x, Encoding.ASCII);
// act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// then
Check.That(response.Message.BodyData.BodyAsJson).Equals(x);
@@ -132,7 +135,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBodyAsJson(x, true);
// act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// then
Check.That(response.Message.BodyData.BodyAsJson).Equals(x);
@@ -148,7 +151,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody("r", BodyDestinationFormat.SameAsSource, Encoding.ASCII);
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
Check.That(response.Message.BodyData.BodyAsBytes).IsNull();
@@ -166,7 +169,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody("r", BodyDestinationFormat.Bytes, Encoding.ASCII);
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
Check.That(response.Message.BodyData.BodyAsString).IsNull();
@@ -184,7 +187,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody("{ \"value\": 42 }", BodyDestinationFormat.Json, Encoding.ASCII);
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
Check.That(response.Message.BodyData.BodyAsString).IsNull();
@@ -206,7 +209,7 @@ public class ResponseWithBodyTests
.WithBody(req => $"path: {req.Path}");
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("path: /test");
@@ -235,7 +238,7 @@ public class ResponseWithBodyTests
});
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("path: /test");
@@ -263,8 +266,8 @@ public class ResponseWithBodyTests
.WithTransformer();
// Act
- var response1 = await responseBuilder.ProvideResponseAsync(request1, _settings).ConfigureAwait(false);
- var response2 = await responseBuilder.ProvideResponseAsync(request2, _settings).ConfigureAwait(false);
+ var response1 = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request1, _settings).ConfigureAwait(false);
+ var response2 = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request2, _settings).ConfigureAwait(false);
// Assert
Check.That(((JToken)response1.Message.BodyData.BodyAsJson).SelectToken("id")?.Value()).IsEqualTo(request1Id);
@@ -288,7 +291,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithStatusCode(200).WithBody(fileContents);
- var response = await responseBuilder.ProvideResponseAsync(request1, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request1, _settings).ConfigureAwait(false);
Check.That(response.Message.StatusCode).IsEqualTo(200);
Check.That(response.Message.BodyData.BodyAsString).Contains(fileContents);
@@ -304,7 +307,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithStatusCode(200).WithBody(fileContents);
- var response = await responseBuilder.ProvideResponseAsync(request1, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request1, _settings).ConfigureAwait(false);
Check.That(response.Message.StatusCode).IsEqualTo(200);
Check.That(response.Message.BodyData.BodyAsString).Contains(fileContents);
@@ -320,7 +323,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithStatusCode(200).WithBody("File deleted.");
- var response = await responseBuilder.ProvideResponseAsync(request1, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request1, _settings).ConfigureAwait(false);
Check.That(response.Message.StatusCode).IsEqualTo(200);
Check.That(response.Message.BodyData.BodyAsString).Contains("File deleted.");
@@ -341,7 +344,7 @@ public class ResponseWithBodyTests
var responseBuilder = Response.Create().WithBody(new { foo = "bar", n = 42 }, new JsonConverter.System.Text.Json.SystemTextJsonConverter());
// Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
// Assert
response.Message.BodyData!.BodyAsString.Should().Be(@"{""foo"":""bar"",""n"":42}");
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs
index cba83e86..ac1413a8 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs
@@ -11,59 +11,37 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithCallbackTests
{
- public class ResponseWithCallbackTests
+ private const string ClientIp = "::1";
+
+ private readonly Mock _mappingMock;
+ private readonly Mock _filesystemHandlerMock;
+ private readonly WireMockServerSettings _settings = new();
+
+ public ResponseWithCallbackTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ _filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithCallbackTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _settings.FileSystemHandler = _filesystemHandlerMock.Object;
+ }
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ [Fact]
+ public async Task Response_WithCallbackAsync()
+ {
+ // Assign
+ var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
+ var responseBuilder = Response.Create()
+ .WithCallback(async request =>
+ {
+ await Task.Delay(1);
- [Fact]
- public async Task Response_WithCallbackAsync()
- {
- // Assign
- var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
- var responseBuilder = Response.Create()
- .WithCallback(async request =>
- {
- await Task.Delay(1);
-
- return new ResponseMessage
- {
- BodyData = new BodyData
- {
- DetectedBodyType = BodyType.String,
- BodyAsString = request.Path + "Bar"
- },
- StatusCode = 302
- };
- });
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
- response.Message.StatusCode.Should().Be(302);
- }
-
- [Fact]
- public async Task Response_WithCallback()
- {
- // Assign
- var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
- var responseBuilder = Response.Create()
- .WithCallback(request => new ResponseMessage
+ return new ResponseMessage
{
BodyData = new BodyData
{
@@ -71,101 +49,125 @@ namespace WireMock.Net.Tests.ResponseBuilders
BodyAsString = request.Path + "Bar"
},
StatusCode = 302
- });
+ };
+ });
- // Act
- var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
- response.Message.StatusCode.Should().Be(302);
- }
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
+ response.Message.StatusCode.Should().Be(302);
+ }
- [Fact]
- public async Task Response_WithCallback_ShouldUseStatusCodeAndHeaderInTheCallback()
- {
- // Assign
- var header = "X-UserId";
- var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
- var responseBuilder = Response.Create()
- .WithCallback(request => new ResponseMessage
+ [Fact]
+ public async Task Response_WithCallback()
+ {
+ // Assign
+ var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
+ var responseBuilder = Response.Create()
+ .WithCallback(request => new ResponseMessage
+ {
+ BodyData = new BodyData
{
- BodyData = new BodyData
- {
- DetectedBodyType = BodyType.String,
- BodyAsString = request.Path + "Bar"
- },
- StatusCode = HttpStatusCode.Accepted,
- Headers = new Dictionary>
- {
- { header, new WireMockList("Stef") }
- }
- });
+ DetectedBodyType = BodyType.String,
+ BodyAsString = request.Path + "Bar"
+ },
+ StatusCode = 302
+ });
- // Act
- var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
- response.Message.StatusCode.Should().Be(HttpStatusCode.Accepted);
- response.Message.Headers[header].Should().ContainSingle("Stef");
- }
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
+ response.Message.StatusCode.Should().Be(302);
+ }
- [Fact]
- public async Task Response_WithCallback_And_Additional_WithStatusCode_And_WithHeader_ShouldUseAdditional()
- {
- // Assign
- var header = "X-UserId";
- var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
- var responseBuilder = Response.Create()
- .WithCallback(request => new ResponseMessage
+ [Fact]
+ public async Task Response_WithCallback_ShouldUseStatusCodeAndHeaderInTheCallback()
+ {
+ // Assign
+ var header = "X-UserId";
+ var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
+ var responseBuilder = Response.Create()
+ .WithCallback(request => new ResponseMessage
+ {
+ BodyData = new BodyData
{
- BodyData = new BodyData
- {
- DetectedBodyType = BodyType.String,
- BodyAsString = request.Path + "Bar"
- },
- StatusCode = HttpStatusCode.NotFound,
- Headers = new Dictionary>
- {
- { header, new WireMockList("NA") }
- }
- })
- .WithStatusCode(HttpStatusCode.Accepted)
- .WithHeader(header, "Stef");
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
- response.Message.StatusCode.Should().Be((int) HttpStatusCode.Accepted);
- response.Message.Headers[header].Should().ContainSingle("Stef");
- }
-
- [Fact]
- public async Task Response_WithCallback_And_UseTransformer_Is_True()
- {
- // Assign
- var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
- var responseBuilder = Response.Create()
- .WithCallback(request => new ResponseMessage
+ DetectedBodyType = BodyType.String,
+ BodyAsString = request.Path + "Bar"
+ },
+ StatusCode = HttpStatusCode.Accepted,
+ Headers = new Dictionary>
{
- BodyData = new BodyData
- {
- DetectedBodyType = BodyType.String,
- BodyAsString = "{{request.Path}}Bar"
- },
- StatusCode = 302
- })
- .WithTransformer();
+ { header, new WireMockList("Stef") }
+ }
+ });
- // Act
- var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
- response.Message.StatusCode.Should().Be(302);
- }
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
+ response.Message.StatusCode.Should().Be(HttpStatusCode.Accepted);
+ response.Message.Headers[header].Should().ContainSingle("Stef");
+ }
+
+ [Fact]
+ public async Task Response_WithCallback_And_Additional_WithStatusCode_And_WithHeader_ShouldUseAdditional()
+ {
+ // Assign
+ var header = "X-UserId";
+ var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
+ var responseBuilder = Response.Create()
+ .WithCallback(request => new ResponseMessage
+ {
+ BodyData = new BodyData
+ {
+ DetectedBodyType = BodyType.String,
+ BodyAsString = request.Path + "Bar"
+ },
+ StatusCode = HttpStatusCode.NotFound,
+ Headers = new Dictionary>
+ {
+ { header, new WireMockList("NA") }
+ }
+ })
+ .WithStatusCode(HttpStatusCode.Accepted)
+ .WithHeader(header, "Stef");
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
+ response.Message.StatusCode.Should().Be((int)HttpStatusCode.Accepted);
+ response.Message.Headers[header].Should().ContainSingle("Stef");
+ }
+
+ [Fact]
+ public async Task Response_WithCallback_And_UseTransformer_Is_True()
+ {
+ // Assign
+ var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1");
+ var responseBuilder = Response.Create()
+ .WithCallback(request => new ResponseMessage
+ {
+ BodyData = new BodyData
+ {
+ DetectedBodyType = BodyType.String,
+ BodyAsString = "{{request.Path}}Bar"
+ },
+ StatusCode = 302
+ })
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be("/fooBar");
+ response.Message.StatusCode.Should().Be(302);
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs
index 119b4949..f7491517 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs
@@ -1,48 +1,55 @@
using System.Threading.Tasks;
using FluentAssertions;
+using Moq;
using WireMock.Models;
using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithFaultTests
{
- public class ResponseWithFaultTests
+ private readonly WireMockServerSettings _settings = new();
+ private const string ClientIp = "::1";
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithFaultTests()
{
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
- private const string ClientIp = "::1";
-
- [Theory]
- [InlineData(FaultType.EMPTY_RESPONSE)]
- [InlineData(FaultType.MALFORMED_RESPONSE_CHUNK)]
- public async Task Response_ProvideResponse_WithFault(FaultType faultType)
- {
- // Arrange
- var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
-
- // Act
- var responseBuilder = Response.Create().WithFault(faultType);
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.FaultType.Should().Be(faultType);
- response.Message.FaultPercentage.Should().BeNull();
- }
-
- [Theory]
- [InlineData(FaultType.EMPTY_RESPONSE, 0.5)]
- public async Task Response_ProvideResponse_WithFault_IncludingPercentage(FaultType faultType, double percentage)
- {
- // Arrange
- var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
-
- // Act
- var responseBuilder = Response.Create().WithFault(faultType, percentage);
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.FaultType.Should().Be(faultType);
- response.Message.FaultPercentage.Should().Be(percentage);
- }
+ _mappingMock = new Mock();
}
-}
+
+ [Theory]
+ [InlineData(FaultType.EMPTY_RESPONSE)]
+ [InlineData(FaultType.MALFORMED_RESPONSE_CHUNK)]
+ public async Task Response_ProvideResponse_WithFault(FaultType faultType)
+ {
+ // Arrange
+ var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
+
+ // Act
+ var responseBuilder = Response.Create().WithFault(faultType);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.FaultType.Should().Be(faultType);
+ response.Message.FaultPercentage.Should().BeNull();
+ }
+
+ [Theory]
+ [InlineData(FaultType.EMPTY_RESPONSE, 0.5)]
+ public async Task Response_ProvideResponse_WithFault_IncludingPercentage(FaultType faultType, double percentage)
+ {
+ // Arrange
+ var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
+
+ // Act
+ var responseBuilder = Response.Create().WithFault(faultType, percentage);
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.FaultType.Should().Be(faultType);
+ response.Message.FaultPercentage.Should().Be(percentage);
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs
index dc067f7a..38a82ca2 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs
@@ -9,91 +9,94 @@ using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsFileTests
{
- public class ResponseWithHandlebarsFileTests
+ private readonly WireMockServerSettings _settings = new();
+ private const string ClientIp = "::1";
+
+ private readonly Mock _mappingMock;
+ private readonly Mock _filesystemHandlerMock;
+
+ public ResponseWithHandlebarsFileTests()
{
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- public ResponseWithHandlebarsFileTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ _settings.FileSystemHandler = _filesystemHandlerMock.Object;
+ }
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_File()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_File()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Data = "{{File \"x.json\"}}"
- })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Data = "{{File \"x.json\"}}"
+ })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Data"].Value()).Equals("abc");
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Data"].Value()).Equals("abc");
- // Verify
- _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once);
- _filesystemHandlerMock.VerifyNoOtherCalls();
- }
+ // Verify
+ _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once);
+ _filesystemHandlerMock.VerifyNoOtherCalls();
+ }
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_File_Replace()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234?id=x"), "GET", ClientIp);
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_File_Replace()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234?id=x"), "GET", ClientIp);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Data = "{{File \"{{request.query.id}}.json\"}}"
- })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Data = "{{File \"{{request.query.id}}.json\"}}"
+ })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Data"].Value()).Equals("abc");
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Data"].Value()).Equals("abc");
- // Verify
- _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once);
- _filesystemHandlerMock.VerifyNoOtherCalls();
- }
+ // Verify
+ _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once);
+ _filesystemHandlerMock.VerifyNoOtherCalls();
+ }
- [Fact]
- public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Throws_HandlebarsException()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ [Fact]
+ public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Throws_HandlebarsException()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Data = "{{File}}"
- })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Data = "{{File}}"
+ })
+ .WithTransformer();
- // Act
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
+ // Act
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings)).Throws();
- // Verify
- _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString(It.IsAny()), Times.Never);
- _filesystemHandlerMock.VerifyNoOtherCalls();
- }
+ // Verify
+ _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString(It.IsAny()), Times.Never);
+ _filesystemHandlerMock.VerifyNoOtherCalls();
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs
index 9d1f91ce..8015aa26 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs
@@ -9,40 +9,38 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsHelpersTests
{
- public class ResponseWithHandlebarsHelpersTests
+ private const string ClientIp = "::1";
+
+ private readonly WireMockServerSettings _settings = new();
+
+ public ResponseWithHandlebarsHelpersTests()
{
- private const string ClientIp = "::1";
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
- public ResponseWithHandlebarsHelpersTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ [Fact]
+ public async Task Response_ProvideResponseAsync_HandlebarsHelpers_String_Uppercase()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- [Fact]
- public async Task Response_ProvideResponseAsync_HandlebarsHelpers_String_Uppercase()
- {
- // Assign
- var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
+ var responseBuilder = Response.Create()
+ .WithBody("{{String.Uppercase request.body}}")
+ .WithTransformer();
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(new Mock().Object, request, _settings).ConfigureAwait(false);
- var responseBuilder = Response.Create()
- .WithBody("{{String.Uppercase request.body}}")
- .WithTransformer();
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("ABC");
- }
+ // assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("ABC");
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHumanizerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHumanizerTests.cs
index fa06ee04..bd718384 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHumanizerTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHumanizerTests.cs
@@ -9,42 +9,43 @@ using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsHumanizerTests
{
- public class ResponseWithHandlebarsHumanizerTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsHumanizerTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsHumanizerTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Humanizer()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Humanizer()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Text = string.Format("{{{{[Humanizer.Humanize] \"{0}\" }}}}", "PascalCaseInputStringIsTurnedIntoSentence")
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Text = string.Format("{{{{[Humanizer.Humanize] \"{0}\" }}}}", "PascalCaseInputStringIsTurnedIntoSentence")
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Text"].Value()).IsEqualTo("Pascal case input string is turned into sentence");
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Text"].Value()).IsEqualTo("Pascal case input string is turned into sentence");
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs
index 207f74c0..2409df88 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs
@@ -13,30 +13,32 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsJsonPathTests
{
- public class ResponseWithHandlebarsJsonPathTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsJsonPathTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsJsonPathTests()
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Object_ResponseBodyAsJson()
+ {
+ // Assign
+ var body = new BodyData
{
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
-
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Object_ResponseBodyAsJson()
- {
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"{
+ BodyAsString = @"{
""Stores"": [
""Lambton Quay"",
""Willis Street""
@@ -66,57 +68,57 @@ namespace WireMock.Net.Tests.ResponseBuilders
}
]
}",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}" })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"]).IsNotNull();
- Check.That(j["x"]["Name"].ToString()).Equals("Acme Co");
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"]).IsNotNull();
+ Check.That(j["x"]["Name"].ToString()).Equals("Acme Co");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Number_ResponseBodyAsJson()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Number_ResponseBodyAsJson()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "{ \"Price\": 99 }",
- DetectedBodyType = BodyType.String
- };
+ BodyAsString = "{ \"Price\": 99 }",
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"..Price\"}}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"..Price\"}}" })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"].Value()).Equals(99);
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"].Value()).Equals(99);
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Request_BodyAsString()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"{
+ BodyAsString = @"{
""Stores"": [
""Lambton Quay"",
""Willis Street""
@@ -146,30 +148,30 @@ namespace WireMock.Net.Tests.ResponseBuilders
}
]
}",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBody("{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBody("{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Request_BodyAsJObject()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectToken_Request_BodyAsJObject()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsJson = JObject.Parse(@"{
+ BodyAsJson = JObject.Parse(@"{
'Stores': [
'Lambton Quay',
'Willis Street'
@@ -199,30 +201,30 @@ namespace WireMock.Net.Tests.ResponseBuilders
}
]
}"),
- DetectedBodyType = BodyType.Json
- };
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBody("{{JsonPath.SelectToken request.bodyAsJson \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBody("{{JsonPath.SelectToken request.bodyAsJson \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Request_BodyAsString()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"{
+ BodyAsString = @"{
""Stores"": [
""Lambton Quay"",
""Willis Street""
@@ -252,30 +254,30 @@ namespace WireMock.Net.Tests.ResponseBuilders
}
]
}",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Request_BodyAsJObject()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Request_BodyAsJObject()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsJson = JObject.Parse(@"{
+ BodyAsJson = JObject.Parse(@"{
'Stores': [
'Lambton Quay',
'Willis Street'
@@ -305,74 +307,73 @@ namespace WireMock.Net.Tests.ResponseBuilders
}
]
}"),
- DetectedBodyType = BodyType.Json
- };
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBody("{{#JsonPath.SelectTokens request.bodyAsJson \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBody("{{#JsonPath.SelectTokens request.bodyAsJson \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%");
+ }
- [Fact]
- public void Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Throws()
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_JsonPath_SelectTokens_Throws()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsJson = JObject.Parse(@"{
+ BodyAsJson = JObject.Parse(@"{
'Stores': [
'Lambton Quay',
'Willis Street'
]
}"),
- DetectedBodyType = BodyType.Json
- };
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{id}} {{value}},{{/JsonPath.SelectTokens}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{id}} {{value}},{{/JsonPath.SelectTokens}}")
+ .WithTransformer();
- // Act
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
+ // Act
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings)).Throws();
+ }
- [Fact]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsFile_JsonPath()
+ [Fact]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsFile_JsonPath()
+ {
+ // Assign
+ string jsonString = "{ \"MyUniqueNumber\": \"1\" }";
+ var bodyData = new BodyData
{
- // Assign
- string jsonString = "{ \"MyUniqueNumber\": \"1\" }";
- var bodyData = new BodyData
- {
- BodyAsString = jsonString,
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- DetectedBodyTypeFromContentType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, bodyData);
+ BodyAsString = jsonString,
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ DetectedBodyTypeFromContentType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, bodyData);
- string jsonPath = "\"$.MyUniqueNumber\"";
- var responseBuilder = Response.Create()
- .WithTransformer()
- .WithBodyFromFile(@"c:\\{{JsonPath.SelectToken request.body " + jsonPath + "}}\\test.json"); // why use a \\ here ?
+ string jsonPath = "\"$.MyUniqueNumber\"";
+ var responseBuilder = Response.Create()
+ .WithTransformer()
+ .WithBodyFromFile(@"c:\\{{JsonPath.SelectToken request.body " + jsonPath + "}}\\test.json"); // why use a \\ here ?
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.json");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.json");
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs
index 427ed442..51d794df 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs
@@ -13,237 +13,239 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsLinqTests
{
- public class ResponseWithHandlebarsLinqTests
+ private readonly WireMockServerSettings _settings = new();
+
+ private Mock mappingMock;
+
+ public ResponseWithHandlebarsLinqTests()
{
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ mappingMock = new Mock();
- public ResponseWithHandlebarsLinqTests()
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Linq1_String0()
+ {
+ // Assign
+ var body = new BodyData();
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234/pathtest"), "POST", "::1", body);
+
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{Linq request.Path 'it'}}" })
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"]).IsNotNull();
+ Check.That(j["x"].ToString()).Equals("/pathtest");
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Linq1_String1()
+ {
+ // Assign
+ var body = new BodyData
{
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
-
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Linq1_String0()
- {
- // Assign
- var body = new BodyData();
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234/pathtest"), "POST", "::1", body);
-
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{Linq request.Path 'it'}}" })
- .WithTransformer();
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"]).IsNotNull();
- Check.That(j["x"].ToString()).Equals("/pathtest");
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Linq1_String1()
- {
- // Assign
- var body = new BodyData
+ BodyAsJson = new JObject
{
- BodyAsJson = new JObject
- {
- { "Id", new JValue(9) },
- { "Name", new JValue("Test") }
- },
- DetectedBodyType = BodyType.Json
- };
+ { "Id", new JValue(9) },
+ { "Name", new JValue("Test") }
+ },
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'it.Name + \"_123\"' }}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'it.Name + \"_123\"' }}" })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"]).IsNotNull();
- Check.That(j["x"].ToString()).Equals("Test_123");
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"]).IsNotNull();
+ Check.That(j["x"].ToString()).Equals("Test_123");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Linq1_String2()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Linq1_String2()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
+ BodyAsJson = new JObject
{
- BodyAsJson = new JObject
- {
- { "Id", new JValue(9) },
- { "Name", new JValue("Test") }
- },
- DetectedBodyType = BodyType.Json
- };
+ { "Id", new JValue(9) },
+ { "Name", new JValue("Test") }
+ },
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}" })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"]).IsNotNull();
- Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }");
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"]).IsNotNull();
+ Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Linq2_Object()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Linq2_Object()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
+ BodyAsJson = new JObject
{
- BodyAsJson = new JObject
- {
- { "Id", new JValue(9) },
- { "Name", new JValue("Test") }
- },
- DetectedBodyType = BodyType.Json
- };
+ { "Id", new JValue(9) },
+ { "Name", new JValue("Test") }
+ },
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/json")
- .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}{{this}}{{/Linq}}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/json")
+ .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}{{this}}{{/Linq}}" })
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["x"]).IsNotNull();
- Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }");
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["x"]).IsNotNull();
+ Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }");
+ }
- [Fact]
- public void Response_ProvideResponse_Handlebars_Linq_Throws_ArgumentException()
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_Linq_Throws_ArgumentException()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
+ BodyAsJson = new { x = "x" },
+ DetectedBodyType = BodyType.Json
+ };
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 1}}" })
+ .WithTransformer();
+
+ // Act
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings)).Throws();
+ }
+
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentNullException()
+ {
+ // Assign
+ var body = new BodyData();
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "{{Linq request.body 'Name'}}" })
+ .WithTransformer();
+
+ // Act
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings)).Throws();
+ }
+
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException()
+ {
+ // Assign
+ var body = new BodyData();
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson}} ''" })
+ .WithTransformer();
+
+ // Act
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings)).Throws();
+ }
+
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_Linq1_ParseError_Throws_ExceptionMessage()
+ {
+ // Assign
+ var body = new BodyData
+ {
+ BodyAsJson = new JObject
{
- BodyAsJson = new { x = "x" },
- DetectedBodyType = BodyType.Json
- };
+ { "Id", new JValue(9) },
+ { "Name", new JValue("Test") }
+ },
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 1}}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson '---' }}" })
+ .WithTransformer();
- // Act
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
+ // Act
+ Func a = async () => await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
- [Fact]
- public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentNullException()
+ // Assert
+ a.Should().ThrowAsync();
+ }
+
+ [Fact]
+ public void Response_ProvideResponse_Handlebars_Linq2_ParseError_Throws_ExceptionMessage()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData();
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "{{Linq request.body 'Name'}}" })
- .WithTransformer();
-
- // Act
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
-
- [Fact]
- public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException()
- {
- // Assign
- var body = new BodyData();
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson}} ''" })
- .WithTransformer();
-
- // Act
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
-
- [Fact]
- public void Response_ProvideResponse_Handlebars_Linq1_ParseError_Throws_ExceptionMessage()
- {
- // Assign
- var body = new BodyData
+ BodyAsJson = new JObject
{
- BodyAsJson = new JObject
- {
- { "Id", new JValue(9) },
- { "Name", new JValue("Test") }
- },
- DetectedBodyType = BodyType.Json
- };
+ { "Id", new JValue(9) },
+ { "Name", new JValue("Test") }
+ },
+ DetectedBodyType = BodyType.Json
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson '---' }}" })
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson '---' }}{{this}}{{/Linq}}" })
+ .WithTransformer();
- // Act
- Func a = async () => await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ Func a = async () => await responseBuilder.ProvideResponseAsync(mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- a.Should().ThrowAsync();
- }
-
- [Fact]
- public void Response_ProvideResponse_Handlebars_Linq2_ParseError_Throws_ExceptionMessage()
- {
- // Assign
- var body = new BodyData
- {
- BodyAsJson = new JObject
- {
- { "Id", new JValue(9) },
- { "Name", new JValue("Test") }
- },
- DetectedBodyType = BodyType.Json
- };
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson '---' }}{{this}}{{/Linq}}" })
- .WithTransformer();
-
- // Act
- Func a = async () => await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- a.Should().ThrowAsync();
- }
+ // Assert
+ a.Should().ThrowAsync();
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
index 728ab790..df434d0c 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
@@ -10,160 +10,162 @@ using WireMock.Settings;
using WireMock.Types;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsRandomTests
{
- public class ResponseWithHandlebarsRandomTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsRandomTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsRandomTests()
- {
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
- _settings.FileSystemHandler = filesystemHandlerMock.Object;
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random1()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Text = "{{Random Type=\"Text\" Min=8 Max=20}}",
+ DateTime = "{{Random Type=\"DateTime\"}}",
+ Integer = "{{Random Type=\"Integer\" Min=1000 Max=1000}}",
+ Long = "{{Random Type=\"Long\" Min=77777777 Max=99999999}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Text = "{{Random Type=\"Text\" Min=8 Max=20}}",
- DateTime = "{{Random Type=\"DateTime\"}}",
- Integer = "{{Random Type=\"Integer\" Min=1000 Max=1000}}",
- Long = "{{Random Type=\"Long\" Min=77777777 Max=99999999}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Text"].Value()).IsNotEmpty();
+ Check.That(j["Integer"].Value()).IsEqualTo(1000);
+ Check.That(j["Long"].Value()).IsStrictlyGreaterThan(77777777).And.IsStrictlyLessThan(99999999);
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Text"].Value()).IsNotEmpty();
- Check.That(j["Integer"].Value()).IsEqualTo(1000);
- Check.That(j["Long"].Value()).IsStrictlyGreaterThan(77777777).And.IsStrictlyLessThan(99999999);
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Boolean()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1_Boolean()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Value = "{{Random Type=\"Boolean\"}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Value = "{{Random Type=\"Boolean\"}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Value"].Type).IsEqualTo(JTokenType.Boolean);
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Value"].Type).IsEqualTo(JTokenType.Boolean);
- }
+ [Theory]
+ [InlineData(ReplaceNodeOptions.None, JTokenType.Integer)]
+ //[InlineData(ReplaceNodeOptions.Bool, JTokenType.String)]
+ //[InlineData(ReplaceNodeOptions.Integer, JTokenType.Integer)]
+ //[InlineData(ReplaceNodeOptions.Bool | ReplaceNodeOptions.Integer, JTokenType.Integer)]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(ReplaceNodeOptions options, JTokenType expected)
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Theory]
- [InlineData(ReplaceNodeOptions.None, JTokenType.Integer)]
- //[InlineData(ReplaceNodeOptions.Bool, JTokenType.String)]
- //[InlineData(ReplaceNodeOptions.Integer, JTokenType.Integer)]
- //[InlineData(ReplaceNodeOptions.Bool | ReplaceNodeOptions.Integer, JTokenType.Integer)]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(ReplaceNodeOptions options, JTokenType expected)
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Value = "{{Random Type=\"Integer\"}}"
+ })
+ .WithTransformer(options);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Value = "{{Random Type=\"Integer\"}}"
- })
- .WithTransformer(options);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Value"].Type).IsEqualTo(expected);
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Value"].Type).IsEqualTo(expected);
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Guid1 = "{{Random Type=\"Guid\" Uppercase=false}}",
+ Guid2 = "{{Random Type=\"Guid\"}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Guid1 = "{{Random Type=\"Guid\" Uppercase=false}}",
- Guid2 = "{{Random Type=\"Guid\"}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ string guid1 = j["Guid1"].Value();
+ Check.That(guid1.ToUpper()).IsNotEqualTo(guid1);
+ string guid2 = j["Guid2"].Value();
+ Check.That(guid2.ToUpper()).IsEqualTo(guid2);
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- string guid1 = j["Guid1"].Value();
- Check.That(guid1.ToUpper()).IsNotEqualTo(guid1);
- string guid2 = j["Guid2"].Value();
- Check.That(guid2.ToUpper()).IsEqualTo(guid2);
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random1_StringList()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1_StringList()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ StringValue = "{{Random Type=\"StringList\" Values=[\"a\", \"b\", \"c\"]}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- StringValue = "{{Random Type=\"StringList\" Values=[\"a\", \"b\", \"c\"]}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ string value = j["StringValue"].Value();
+ Check.That(new[] { "a", "b", "c" }.Contains(value)).IsTrue();
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- string value = j["StringValue"].Value();
- Check.That(new[] { "a", "b", "c" }.Contains(value)).IsTrue();
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random2()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Random2()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Integer = "{{#Random Type=\"Integer\" Min=10000000 Max=99999999}}{{this}}{{/Random}}",
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Integer = "{{#Random Type=\"Integer\" Min=10000000 Max=99999999}}{{this}}{{/Random}}",
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Integer"].Value()).IsStrictlyGreaterThan(10000000).And.IsStrictlyLessThan(99999999);
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Integer"].Value()).IsStrictlyGreaterThan(10000000).And.IsStrictlyLessThan(99999999);
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs
index 534fec42..e9969d90 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs
@@ -10,113 +10,114 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsRegexTests
{
- public class ResponseWithHandlebarsRegexTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsRegexTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsRegexTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch()
- {
- // Assign
- var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var responseBuilder = Response.Create()
+ .WithBody("{{Regex.Match request.body \"^(\\w+)$\"}}")
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBody("{{Regex.Match request.body \"^(\\w+)$\"}}")
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("abc");
+ }
- // assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("abc");
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch_NoMatch()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch_NoMatch()
- {
- // Assign
- var body = new BodyData { BodyAsString = "abc", DetectedBodyType = BodyType.String };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var responseBuilder = Response.Create()
+ .WithBody("{{Regex.Match request.body \"^?0$\"}}")
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBody("{{Regex.Match request.body \"^?0$\"}}")
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("");
+ }
- // assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("");
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch2()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "https://localhost:5000/", DetectedBodyType = BodyType.String };
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch2()
- {
- // Assign
- var body = new BodyData { BodyAsString = "https://localhost:5000/", DetectedBodyType = BodyType.String };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var responseBuilder = Response.Create()
+ .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this.port}}-{{this.proto}}{{/Regex.Match}}")
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this.port}}-{{this.proto}}{{/Regex.Match}}")
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("5000-https");
+ }
- // assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("5000-https");
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch2_NoMatch()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "{{\\test", DetectedBodyType = BodyType.String };
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch2_NoMatch()
- {
- // Assign
- var body = new BodyData { BodyAsString = "{{\\test", DetectedBodyType = BodyType.String };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var responseBuilder = Response.Create()
+ .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this}}{{/Regex.Match}}")
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this}}{{/Regex.Match}}")
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("");
+ }
- // assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("");
- }
+ [Fact]
+ public void Response_ProvideResponseAsync_Handlebars_RegexMatch2_Throws()
+ {
+ // Assign
+ var body = new BodyData { BodyAsString = "{{\\test", DetectedBodyType = BodyType.String };
- [Fact]
- public void Response_ProvideResponseAsync_Handlebars_RegexMatch2_Throws()
- {
- // Assign
- var body = new BodyData { BodyAsString = "{{\\test", DetectedBodyType = BodyType.String };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var responseBuilder = Response.Create()
+ .WithBody("{{#Regex.Match request.bodyAsJson \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{/Regex.Match}}")
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBody("{{#Regex.Match request.bodyAsJson \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{/Regex.Match}}")
- .WithTransformer();
-
- // Act and Assert
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
+ // Act and Assert
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings)).Throws();
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs
index 8b14c04e..062b0bac 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs
@@ -14,117 +14,119 @@ using FluentAssertions;
using Wmhelp.XPath2;
#endif
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsXPathTests
{
- public class ResponseWithHandlebarsXPathTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsXPathTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsXPathTests()
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
{
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
-
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Request_BodyAsString()
- {
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"
+ BodyAsString = @"
abc
def
xyz
",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator();
- var node = nav.XPath2SelectSingleNode("/response/todo-item");
- Check.That(node.Value).Equals("abc");
- Check.That(node.GetAttribute("id", "")).Equals("a1");
- }
+ // Assert
+ var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator();
+ var node = nav.XPath2SelectSingleNode("/response/todo-item");
+ Check.That(node.Value).Equals("abc");
+ Check.That(node.GetAttribute("id", "")).Equals("a1");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Text_Request_BodyAsString()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Text_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"
+ BodyAsString = @"
abc
def
xyz
",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]/text()\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]/text()\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("abc");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("abc");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_SelectNodes_Request_BodyAsString()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_SelectNodes_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"
+ BodyAsString = @"
abc
def
xyz
",
- DetectedBodyType = BodyType.String
- };
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.SelectNodes request.body \"/todo-list/todo-item\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.SelectNodes request.body \"/todo-list/todo-item\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator();
- var nodes = nav.XPath2SelectNodes("/response/todo-item");
- Check.That(nodes.Count + 1).IsEqualTo(3);
- }
+ // Assert
+ var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator();
+ var nodes = nav.XPath2SelectNodes("/response/todo-item");
+ Check.That(nodes.Count + 1).IsEqualTo(3);
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Request_SoapXML_BodyAsString()
- {
- // Assign
- string soap = @"
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_SelectSingleNode_Request_SoapXML_BodyAsString()
+ {
+ // Assign
+ string soap = @"
@@ -156,80 +158,79 @@ namespace WireMock.Net.Tests.ResponseBuilders
";
- var body = new BodyData
- {
- BodyAsString = soap,
- DetectedBodyType = BodyType.String
- };
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
-
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.SelectSingleNode request.body \"//*[local-name()='TokenIdLijst']\"}}")
- .WithTransformer();
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.BodyData.BodyAsString.Should().Contain("TokenIdLijst").And.Contain("0000083256").And.Contain("0000083259");
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_Evaluate_Request_BodyAsString()
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"
- abc
- def
- xyz
- ",
- DetectedBodyType = BodyType.String
- };
+ BodyAsString = soap,
+ DetectedBodyType = BodyType.String
+ };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.Evaluate request.body \"boolean(/todo-list[count(todo-item) = 3])\"}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.SelectSingleNode request.body \"//*[local-name()='TokenIdLijst']\"}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).IsEqualIgnoringCase("True");
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_XPath_Evaluate_Attribute_Request_BodyAsString()
- {
- // Assign
- var body = new BodyData
- {
- BodyAsString = @"
- abc
- def
- xyz
- ",
- DetectedBodyType = BodyType.String
- };
-
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
-
- var responseBuilder = Response.Create()
- .WithHeader("Content-Type", "application/xml")
- .WithBody("{{XPath.Evaluate request.body \"string(/todo-list/todo-item[1]/@id)\"}}")
- .WithTransformer();
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("a1");
- }
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Contain("TokenIdLijst").And.Contain("0000083256").And.Contain("0000083259");
}
-}
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_Evaluate_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
+ {
+ BodyAsString = @"
+ abc
+ def
+ xyz
+ ",
+ DetectedBodyType = BodyType.String
+ };
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.Evaluate request.body \"boolean(/todo-list[count(todo-item) = 3])\"}}")
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).IsEqualIgnoringCase("True");
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_XPath_Evaluate_Attribute_Request_BodyAsString()
+ {
+ // Assign
+ var body = new BodyData
+ {
+ BodyAsString = @"
+ abc
+ def
+ xyz
+ ",
+ DetectedBodyType = BodyType.String
+ };
+
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+
+ var responseBuilder = Response.Create()
+ .WithHeader("Content-Type", "application/xml")
+ .WithBody("{{XPath.Evaluate request.body \"string(/todo-list/todo-item[1]/@id)\"}}")
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("a1");
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs
index c0a87f7c..24cf6177 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Moq;
using Newtonsoft.Json.Linq;
using NFluent;
using System.Threading.Tasks;
@@ -8,67 +8,68 @@ using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHandlebarsXegerTests
{
- public class ResponseWithHandlebarsXegerTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHandlebarsXegerTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithHandlebarsXegerTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Xeger1()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Xeger1()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Number = "{{Xeger.Generate \"[1-9]{1}\\d{3}\"}}",
+ Postcode = "{{Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Number = "{{Xeger.Generate \"[1-9]{1}\\d{3}\"}}",
- Postcode = "{{Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings);
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999);
+ Check.That(j["Postcode"].Value()).IsNotEmpty();
+ }
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999);
- Check.That(j["Postcode"].Value()).IsNotEmpty();
- }
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Xeger2()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
- [Fact]
- public async Task Response_ProvideResponseAsync_Handlebars_Xeger2()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ Number = "{{#Xeger.Generate \"[1-9]{1}\\d{3}\"}}{{this}}{{/Xeger.Generate}}",
+ Postcode = "{{#Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}{{this}}{{/Xeger.Generate}}"
+ })
+ .WithTransformer();
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new
- {
- Number = "{{#Xeger.Generate \"[1-9]{1}\\d{3}\"}}{{this}}{{/Xeger.Generate}}",
- Postcode = "{{#Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}{{this}}{{/Xeger.Generate}}"
- })
- .WithTransformer();
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings);
-
- // Assert
- JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
- Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999);
- Check.That(j["Postcode"].Value()).IsNotEmpty();
- }
+ // Assert
+ JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson);
+ Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999);
+ Check.That(j["Postcode"].Value()).IsNotEmpty();
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs
index da9ed079..9428dc45 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
+using Moq;
using NFluent;
using WireMock.Models;
using WireMock.ResponseBuilders;
@@ -7,89 +8,95 @@ using WireMock.Settings;
using WireMock.Types;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithHeadersTests
{
- public class ResponseWithHeadersTests
+ private readonly WireMockServerSettings _settings = new();
+ private const string ClientIp = "::1";
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithHeadersTests()
{
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
+ }
- [Theory]
- [InlineData("Content-Length", "1024")]
- [InlineData("Transfer-Encoding", "identity")]
- [InlineData("Location", "http://test")]
- public async Task Response_ProvideResponse_WithHeader_SingleValue(string headerName, string headerValue)
- {
- // Assign
- var requestMock = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp);
- IResponseBuilder builder = Response.Create().WithHeader(headerName, headerValue);
+ [Theory]
+ [InlineData("Content-Length", "1024")]
+ [InlineData("Transfer-Encoding", "identity")]
+ [InlineData("Location", "http://test")]
+ public async Task Response_ProvideResponse_WithHeader_SingleValue(string headerName, string headerValue)
+ {
+ // Assign
+ var requestMock = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp);
+ IResponseBuilder builder = Response.Create().WithHeader(headerName, headerValue);
- // Act
- var response = await builder.ProvideResponseAsync(requestMock, _settings).ConfigureAwait(false);
+ // Act
+ var response = await builder.ProvideResponseAsync(_mappingMock.Object, requestMock, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.Headers[headerName].ToString()).Equals(headerValue);
- }
+ // Assert
+ Check.That(response.Message.Headers[headerName].ToString()).Equals(headerValue);
+ }
- [Theory]
- [InlineData("Test", new[] { "one" })]
- [InlineData("Test", new[] { "a", "b" })]
- public async Task Response_ProvideResponse_WithHeader_MultipleValues(string headerName, string[] headerValues)
- {
- // Assign
- var requestMock = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp);
- IResponseBuilder builder = Response.Create().WithHeader(headerName, headerValues);
+ [Theory]
+ [InlineData("Test", new[] { "one" })]
+ [InlineData("Test", new[] { "a", "b" })]
+ public async Task Response_ProvideResponse_WithHeader_MultipleValues(string headerName, string[] headerValues)
+ {
+ // Assign
+ var requestMock = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp);
+ IResponseBuilder builder = Response.Create().WithHeader(headerName, headerValues);
- // Act
- var response = await builder.ProvideResponseAsync(requestMock, _settings).ConfigureAwait(false);
+ // Act
+ var response = await builder.ProvideResponseAsync(_mappingMock.Object, requestMock, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.Headers[headerName].ToArray()).Equals(headerValues);
- }
+ // Assert
+ Check.That(response.Message.Headers[headerName].ToArray()).Equals(headerValues);
+ }
- [Fact]
- public async Task Response_ProvideResponse_WithHeaders_SingleValue()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
- var headers = new Dictionary { { "h", "x" } };
- var response = Response.Create().WithHeaders(headers);
+ [Fact]
+ public async Task Response_ProvideResponse_WithHeaders_SingleValue()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
+ var headers = new Dictionary { { "h", "x" } };
+ var response = Response.Create().WithHeaders(headers);
- // Act
- var responseMessage = await response.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var responseMessage = await response.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(responseMessage.Message.Headers["h"]).ContainsExactly("x");
- }
+ // Assert
+ Check.That(responseMessage.Message.Headers["h"]).ContainsExactly("x");
+ }
- [Fact]
- public async Task Response_ProvideResponse_WithHeaders_MultipleValues()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
- var headers = new Dictionary { { "h", new[] { "x" } } };
- var responseBuilder = Response.Create().WithHeaders(headers);
+ [Fact]
+ public async Task Response_ProvideResponse_WithHeaders_MultipleValues()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
+ var headers = new Dictionary { { "h", new[] { "x" } } };
+ var responseBuilder = Response.Create().WithHeaders(headers);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.Headers["h"]).ContainsExactly("x");
- }
+ // Assert
+ Check.That(response.Message.Headers["h"]).ContainsExactly("x");
+ }
- [Fact]
- public async Task Response_ProvideResponse_WithHeaders_WiremockList()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
- var headers = new Dictionary> { { "h", new WireMockList("x") } };
- var builder = Response.Create().WithHeaders(headers);
+ [Fact]
+ public async Task Response_ProvideResponse_WithHeaders_WiremockList()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp);
+ var headers = new Dictionary> { { "h", new WireMockList("x") } };
+ var builder = Response.Create().WithHeaders(headers);
- // Act
- var response = await builder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await builder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.Headers["h"]).ContainsExactly("x");
- }
+ // Assert
+ Check.That(response.Message.Headers["h"]).ContainsExactly("x");
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs
index a1e7c32e..8a26171a 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
+using Moq;
using NFluent;
using WireMock.Models;
using WireMock.RequestBuilders;
@@ -12,78 +13,81 @@ using WireMock.Types;
using WireMock.Util;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithProxyTests : IDisposable
{
- public class ResponseWithProxyTests : IDisposable
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+ private readonly WireMockServer _server;
+ private readonly Guid _guid;
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithProxyTests()
{
- private const string ClientIp = "::1";
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
- private readonly WireMockServer _server;
- private readonly Guid _guid;
+ _mappingMock = new Mock();
- public ResponseWithProxyTests()
+ _guid = Guid.NewGuid();
+
+ _server = WireMockServer.Start();
+ _server.Given(Request.Create().UsingPost().WithPath($"/{_guid}"))
+ .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 42 }).WithHeader("Content-Type", "application/json"));
+ _server.Given(Request.Create().UsingPost().WithPath($"/{_guid}/append"))
+ .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 10 }).WithHeader("Content-Type", "application/json"));
+ _server.Given(Request.Create().UsingPost().WithPath($"/prepend/{_guid}"))
+ .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 11 }).WithHeader("Content-Type", "application/json"));
+ _server.Given(Request.Create().UsingPost().WithPath($"/prepend/{_guid}/append"))
+ .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 12 }).WithHeader("Content-Type", "application/json"));
+ }
+
+ [Theory]
+ [InlineData("", "", "{\"p\":42}")]
+ [InlineData("", "/append", "{\"p\":10}")]
+ [InlineData("/prepend", "", "{\"p\":11}")]
+ [InlineData("/prepend", "/append", "{\"p\":12}")]
+ public async Task Response_WithProxy(string prepend, string append, string expectedBody)
+ {
+ // Assign
+ var headers = new Dictionary { { "Content-Type", new[] { "application/xml" } } };
+ var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}{prepend}/{_guid}{append}"), "POST", ClientIp, new BodyData { DetectedBodyType = BodyType.Json, BodyAsJson = new { a = 1 } }, headers);
+ var responseBuilder = Response.Create().WithProxy(_server.Urls[0]);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(request.ProxyUrl).IsNotNull();
+ Check.That(response.Message.BodyData.BodyAsString).IsEqualTo(expectedBody);
+ Check.That(response.Message.StatusCode).IsEqualTo(201);
+ Check.That(response.Message.Headers["Content-Type"].ToString()).IsEqualTo("application/json");
+ }
+
+ [Fact]
+ public void Response_WithProxy_WebProxySettings()
+ {
+ // Assign
+ var settings = new ProxyAndRecordSettings
{
- _guid = Guid.NewGuid();
-
- _server = WireMockServer.Start();
- _server.Given(Request.Create().UsingPost().WithPath($"/{_guid}"))
- .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 42 }).WithHeader("Content-Type", "application/json"));
- _server.Given(Request.Create().UsingPost().WithPath($"/{_guid}/append"))
- .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 10 }).WithHeader("Content-Type", "application/json"));
- _server.Given(Request.Create().UsingPost().WithPath($"/prepend/{_guid}"))
- .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 11 }).WithHeader("Content-Type", "application/json"));
- _server.Given(Request.Create().UsingPost().WithPath($"/prepend/{_guid}/append"))
- .RespondWith(Response.Create().WithStatusCode(201).WithBodyAsJson(new { p = 12 }).WithHeader("Content-Type", "application/json"));
- }
-
- [Theory]
- [InlineData("", "", "{\"p\":42}")]
- [InlineData("", "/append", "{\"p\":10}")]
- [InlineData("/prepend", "", "{\"p\":11}")]
- [InlineData("/prepend", "/append", "{\"p\":12}")]
- public async Task Response_WithProxy(string prepend, string append, string expectedBody)
- {
- // Assign
- var headers = new Dictionary { { "Content-Type", new[] { "application/xml" } } };
- var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}{prepend}/{_guid}{append}"), "POST", ClientIp, new BodyData { DetectedBodyType = BodyType.Json, BodyAsJson = new { a = 1 } }, headers);
- var responseBuilder = Response.Create().WithProxy(_server.Urls[0]);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(request.ProxyUrl).IsNotNull();
- Check.That(response.Message.BodyData.BodyAsString).IsEqualTo(expectedBody);
- Check.That(response.Message.StatusCode).IsEqualTo(201);
- Check.That(response.Message.Headers["Content-Type"].ToString()).IsEqualTo("application/json");
- }
-
- [Fact]
- public void Response_WithProxy_WebProxySettings()
- {
- // Assign
- var settings = new ProxyAndRecordSettings
+ Url = "http://test.nl",
+ WebProxySettings = new WebProxySettings
{
- Url = "http://test.nl",
- WebProxySettings = new WebProxySettings
- {
- Address = "http://company",
- UserName = "x",
- Password = "y"
- }
- };
- var responseBuilder = Response.Create().WithProxy(settings);
+ Address = "http://company",
+ UserName = "x",
+ Password = "y"
+ }
+ };
+ var responseBuilder = Response.Create().WithProxy(settings);
- // Act
- var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}/{_guid}"), "GET", ClientIp);
+ // Act
+ var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}/{_guid}"), "GET", ClientIp);
- Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws();
- }
+ Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings)).Throws();
+ }
- public void Dispose()
- {
- _server?.Stop();
- _server?.Dispose();
- }
+ public void Dispose()
+ {
+ _server?.Stop();
+ _server?.Dispose();
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs
index d7dbc146..d0e8db92 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs
@@ -16,59 +16,60 @@ using Microsoft.Owin;
using Microsoft.AspNetCore.Http;
#endif
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithScribanTests
{
- public class ResponseWithScribanTests
+ private const string ClientIp = "::1";
+ private readonly WireMockServerSettings _settings = new();
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithScribanTests()
{
- private const string ClientIp = "::1";
+ _mappingMock = new Mock();
- private readonly Mock _filesystemHandlerMock;
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithScribanTests()
- {
- _filesystemHandlerMock = new Mock(MockBehavior.Strict);
- _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
-
- _settings.FileSystemHandler = _filesystemHandlerMock.Object;
- }
-
- [Fact]
- public async Task Response_ProvideResponse_DotLiquid_WithNullBody_ShouldNotThrowException()
- {
- // Assign
- var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
- var request = new RequestMessage(urlDetails, "GET", ClientIp);
-
- var responseBuilder = Response.Create().WithTransformer(TransformerType.ScribanDotLiquid);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.BodyData.Should().BeNull();
- }
-
- [Fact]
- public async Task Response_ProvideResponse_DotLiquid_UrlPathVerb()
- {
- // Assign
- var body = new BodyData
- {
- BodyAsString = "whatever",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body);
-
- var responseBuilder = Response.Create()
- .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}")
- .WithTransformer(TransformerType.Scriban);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt");
- }
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
}
-}
\ No newline at end of file
+
+ [Fact]
+ public async Task Response_ProvideResponse_DotLiquid_WithNullBody_ShouldNotThrowException()
+ {
+ // Assign
+ var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
+ var request = new RequestMessage(urlDetails, "GET", ClientIp);
+
+ var responseBuilder = Response.Create().WithTransformer(TransformerType.ScribanDotLiquid);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.BodyData.Should().BeNull();
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_DotLiquid_UrlPathVerb()
+ {
+ // Assign
+ var body = new BodyData
+ {
+ BodyAsString = "whatever",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body);
+
+ var responseBuilder = Response.Create()
+ .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}")
+ .WithTransformer(TransformerType.Scriban);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt");
+ }
+}
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs
index 7707a44f..8a37faf9 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs
@@ -7,43 +7,42 @@ using WireMock.ResponseBuilders;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithStatusCodeTests
{
- public class ResponseWithStatusCodeTests
+ private readonly Mock _settingsMock = new();
+ private const string ClientIp = "::1";
+
+ [Theory]
+ [InlineData("201", "201")]
+ [InlineData(201, 201)]
+ [InlineData(HttpStatusCode.Created, 201)]
+ public async Task Response_ProvideResponse_WithStatusCode(object statusCode, object expectedStatusCode)
{
- private readonly Mock _settingsMock = new Mock();
- private const string ClientIp = "::1";
+ // Arrange
+ var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
- [Theory]
- [InlineData("201", "201")]
- [InlineData(201, 201)]
- [InlineData(HttpStatusCode.Created, 201)]
- public async Task Response_ProvideResponse_WithStatusCode(object statusCode, object expectedStatusCode)
+ // Act
+ var responseBuilder = Response.Create();
+ switch (statusCode)
{
- // Arrange
- var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp);
+ case string statusCodeAsString:
+ responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString);
+ break;
- // Act
- var responseBuilder = Response.Create();
- switch (statusCode)
- {
- case string statusCodeAsString:
- responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString);
- break;
+ case int statusCodeAInteger:
+ responseBuilder = responseBuilder.WithStatusCode(statusCodeAInteger);
+ break;
- case int statusCodeAInteger:
- responseBuilder = responseBuilder.WithStatusCode(statusCodeAInteger);
- break;
-
- case HttpStatusCode statusCodeAsEnum:
- responseBuilder = responseBuilder.WithStatusCode(statusCodeAsEnum);
- break;
- }
-
- var response = await responseBuilder.ProvideResponseAsync(request, _settingsMock.Object).ConfigureAwait(false);
-
- // Assert
- response.Message.StatusCode.Should().Be(expectedStatusCode);
+ case HttpStatusCode statusCodeAsEnum:
+ responseBuilder = responseBuilder.WithStatusCode(statusCodeAsEnum);
+ break;
}
+
+ var response = await responseBuilder.ProvideResponseAsync(new Mock().Object, request, _settingsMock.Object).ConfigureAwait(false);
+
+ // Assert
+ response.Message.StatusCode.Should().Be(expectedStatusCode);
}
-}
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs
index 7b08773d..3cf177e3 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs
@@ -20,709 +20,736 @@ using Microsoft.Owin;
using Microsoft.AspNetCore.Http;
#endif
-namespace WireMock.Net.Tests.ResponseBuilders
+namespace WireMock.Net.Tests.ResponseBuilders;
+
+public class ResponseWithTransformerTests
{
- public class ResponseWithTransformerTests
+ private readonly WireMockServerSettings _settings = new();
+ private const string ClientIp = "::1";
+
+ private readonly Mock _mappingMock;
+
+ public ResponseWithTransformerTests()
{
- private readonly WireMockServerSettings _settings = new WireMockServerSettings();
+ _mappingMock = new Mock();
- private const string ClientIp = "::1";
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
- public ResponseWithTransformerTests()
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithNullBody_ShouldNotThrowException(TransformerType transformerType)
+ {
+ // Assign
+ var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
+ var request = new RequestMessage(urlDetails, "GET", ClientIp);
+
+ var responseBuilder = Response.Create().WithTransformer(transformerType);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ response.Message.BodyData.Should().BeNull();
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_UrlPathVerb(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc");
+ BodyAsString = "whatever",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body);
- _settings.FileSystemHandler = filesystemHandlerMock.Object;
- }
+ var responseBuilder = Response.Create()
+ .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}")
+ .WithTransformer(transformerType);
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithNullBody_ShouldNotThrowException(TransformerType transformerType)
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt");
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars, "Get")]
+ [InlineData(TransformerType.Handlebars, "Post")]
+ [InlineData(TransformerType.Scriban, "Get")]
+ [InlineData(TransformerType.Scriban, "Post")]
+ [InlineData(TransformerType.ScribanDotLiquid, "Get")]
+ [InlineData(TransformerType.ScribanDotLiquid, "Post")]
+ public async Task Response_ProvideResponse_Transformer_UrlPath(TransformerType transformerType, string httpMethod)
+ {
+ // Assign
+ var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
+ var request = new RequestMessage(urlDetails, httpMethod, ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithBody("url={{request.Url}} absoluteurl={{request.AbsoluteUrl}} path={{request.Path}} absolutepath={{request.AbsolutePath}}")
+ .WithTransformer(transformerType);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("url=http://localhost/a/b absoluteurl=http://localhost/wiremock/a/b path=/a/b absolutepath=/wiremock/a/b");
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_PathSegments()
+ {
+ // Assign
+ var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
+ var request = new RequestMessage(urlDetails, "POST", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}")
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock");
+ }
+
+ [Theory(Skip = "Invalid token `OpenBracket`")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_PathSegments(TransformerType transformerType)
+ {
+ // Assign
+ var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
+ var request = new RequestMessage(urlDetails, "POST", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}")
+ .WithTransformer(transformerType);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock");
+ }
+
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Query()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
- var request = new RequestMessage(urlDetails, "GET", ClientIp);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body);
- var responseBuilder = Response.Create().WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- response.Message.BodyData.Should().BeNull();
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1,2 idx=1 idx=2 keyb=5");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_UrlPathVerb(TransformerType transformerType)
+ [Theory(Skip = "Invalid token `OpenBracket`")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_Query(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "whatever",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars, "Get")]
- [InlineData(TransformerType.Handlebars, "Post")]
- [InlineData(TransformerType.Scriban, "Get")]
- [InlineData(TransformerType.Scriban, "Post")]
- [InlineData(TransformerType.ScribanDotLiquid, "Get")]
- [InlineData(TransformerType.ScribanDotLiquid, "Post")]
- public async Task Response_ProvideResponse_Transformer_UrlPath(TransformerType transformerType, string httpMethod)
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_StatusCode()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
- var request = new RequestMessage(urlDetails, httpMethod, ClientIp);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("url={{request.Url}} absoluteurl={{request.AbsoluteUrl}} path={{request.Path}} absolutepath={{request.AbsolutePath}}")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithStatusCode("{{request.query.a}}")
+ .WithBody("test")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("url=http://localhost/a/b absoluteurl=http://localhost/wiremock/a/b path=/a/b absolutepath=/wiremock/a/b");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test");
+ Check.That(response.Message.StatusCode).Equals("400");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_PathSegments()
+ [Theory(Skip = "WireMockList is not supported by Scriban")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_StatusCode(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
- var request = new RequestMessage(urlDetails, "POST", ClientIp);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}")
- .WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithStatusCode("{{request.Query.a}}")
+ .WithBody("test")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test");
+ Check.That(response.Message.StatusCode).Equals("400");
+ }
- [Theory(Skip = "Invalid token `OpenBracket`")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_PathSegments(TransformerType transformerType)
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_StatusCodeIsNull(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock"));
- var request = new RequestMessage(urlDetails, "POST", ClientIp);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBody("test")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test");
+ Check.That(response.Message.StatusCode).Equals(null);
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Query()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Header()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
- var responseBuilder = Response.Create()
- .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}")
- .WithTransformer();
+ var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}").WithBody("test").WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1,2 idx=1 idx=2 keyb=5");
- }
+ // Assert
+ Check.That(response.Message.BodyData!.BodyAsString).Equals("test");
+ Check.That(response.Message.Headers).ContainsKey("x");
+ Check.That(response.Message.Headers!["x"]).ContainsExactly("text/plain");
+ }
- [Theory(Skip = "Invalid token `OpenBracket`")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_Query(TransformerType transformerType)
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Header_TransformMapping()
+ {
+ // Assign
+ var guid = Guid.NewGuid();
+ _mappingMock.SetupGet(m => m.Guid).Returns(guid);
+
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create().WithHeader("x", "{{mapping.Guid}}").WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5");
- }
+ // Assert
+ response.Message.Headers.Should().NotBeNull();
+ Check.That(response.Message.Headers).ContainsKey("x");
+ Check.That(response.Message.Headers!["x"]).ContainsExactly(guid.ToString());
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_StatusCode()
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_Headers()
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
- var responseBuilder = Response.Create()
- .WithStatusCode("{{request.query.a}}")
- .WithBody("test")
- .WithTransformer();
+ var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}", "{{request.url}}").WithBody("test").WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.StatusCode).Equals("400");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test");
+ Check.That(response.Message.Headers).ContainsKey("x");
+ Check.That(response.Message.Headers["x"]).Contains("text/plain");
+ Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo");
+ }
- [Theory(Skip = "WireMockList is not supported by Scriban")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_StatusCode(TransformerType transformerType)
+ [Theory(Skip = "WireMockList is not supported by Scriban")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_Headers(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
- var responseBuilder = Response.Create()
- .WithStatusCode("{{request.Query.a}}")
- .WithBody("test")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create().WithHeader("x", "{{request.Headers[\"Content-Type\"]}}", "{{request.Url}}").WithBody("test").WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.StatusCode).Equals("400");
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test");
+ Check.That(response.Message.Headers).ContainsKey("x");
+ Check.That(response.Message.Headers["x"]).Contains("text/plain");
+ Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_StatusCodeIsNull(TransformerType transformerType)
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_Origin_Port_Protocol_Host(TransformerType transformerType)
+ {
+ // Assign
+ var body = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body);
+ BodyAsString = "abc",
+ DetectedBodyType = BodyType.String
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
- var responseBuilder = Response.Create()
- .WithBody("test")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBody("test {{request.Origin}} {{request.Port}} {{request.Protocol}} {{request.Host}}")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.StatusCode).Equals(null);
- }
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost:1234 1234 http localhost");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Header()
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsObject(TransformerType transformerType)
+ {
+ // Assign
+ string jsonString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"WireMock\" } ] }";
+ var bodyData = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}").WithBody("test").WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { x = "test {{request.Path}}" })
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.Headers).ContainsKey("x");
- Check.That(response.Message.Headers["x"]).ContainsExactly("text/plain");
- }
+ // Assert
+ Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"x\":\"test /foo_object\"}");
+ }
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_Headers()
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_ResultAsArray(TransformerType transformerType)
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "GET", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new[] { new { x = "test" } })
+ .WithTransformer(transformerType);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be("[{\"x\":\"test\"}]");
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_ResultAsJArray(TransformerType transformerType)
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "GET", ClientIp);
+
+ var array = JArray.Parse("[{\"x\":\"test\"}]");
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(array)
+ .WithTransformer(transformerType);
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be("[{\"x\":\"test\"}]");
+ }
+
+ //[Theory]
+ //[InlineData(TransformerType.Handlebars, "a")]
+ //[InlineData(TransformerType.Handlebars, "42")]
+ //[InlineData(TransformerType.Handlebars, "{")]
+ //[InlineData(TransformerType.Handlebars, "]")]
+ //[InlineData(TransformerType.Handlebars, " ")]
+ //public async Task Response_ProvideResponse_Transformer_WithBodyAsJsonWithExtraQuotes_AndSpecialOption_MakesAString_ResultAsObject(TransformerType transformerType, string text)
+ //{
+ // string jsonString = $"{{ \"x\": \"{text}\" }}";
+ // var bodyData = new BodyData
+ // {
+ // BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ // DetectedBodyType = BodyType.Json,
+ // Encoding = Encoding.UTF8
+ // };
+ // var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
+
+ // var responseBuilder = Response.Create()
+ // .WithBodyAsJson(new { text = "\"{{request.bodyAsJson.x}}\"" })
+ // .WithTransformer(transformerType, false, ReplaceNodeOptions.Default);
+
+ // // Act
+ // var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // // Assert
+ // JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":\"{text}\"}}");
+ //}
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars, "\"\"", "\"\"")]
+ [InlineData(TransformerType.Handlebars, "\"a\"", "\"a\"")]
+ [InlineData(TransformerType.Handlebars, "\" \"", "\" \"")]
+ [InlineData(TransformerType.Handlebars, "\"'\"", "\"'\"")]
+ [InlineData(TransformerType.Handlebars, "\"false\"", "false")] // bool is special
+ [InlineData(TransformerType.Handlebars, "false", "false")]
+ [InlineData(TransformerType.Handlebars, "\"true\"", "true")] // bool is special
+ [InlineData(TransformerType.Handlebars, "true", "true")]
+ [InlineData(TransformerType.Handlebars, "\"-42\"", "-42")] // todo
+ [InlineData(TransformerType.Handlebars, "-42", "-42")]
+ [InlineData(TransformerType.Handlebars, "\"2147483647\"", "2147483647")] // todo
+ [InlineData(TransformerType.Handlebars, "2147483647", "2147483647")]
+ [InlineData(TransformerType.Handlebars, "\"9223372036854775807\"", "9223372036854775807")] // todo
+ [InlineData(TransformerType.Handlebars, "9223372036854775807", "9223372036854775807")]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_ReplaceNodeOptionsKeep(TransformerType transformerType, string value, string expected)
+ {
+ string jsonString = $"{{ \"x\": {value} }}";
+ var bodyData = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}", "{{request.url}}").WithBody("test").WithTransformer();
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { text = "{{request.bodyAsJson.x}}" })
+ .WithTransformer(transformerType, false, ReplaceNodeOptions.None);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.Headers).ContainsKey("x");
- Check.That(response.Message.Headers["x"]).Contains("text/plain");
- Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo");
- }
+ // Assert
+ JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":{expected}}}");
+ }
- [Theory(Skip = "WireMockList is not supported by Scriban")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_Headers(TransformerType transformerType)
+ [Theory]
+ [InlineData(TransformerType.Handlebars, "\"\"", "\"\"")]
+ [InlineData(TransformerType.Handlebars, "\"a\"", "\"a\"")]
+ [InlineData(TransformerType.Handlebars, "\" \"", "\" \"")]
+ [InlineData(TransformerType.Handlebars, "\"'\"", "\"'\"")]
+ [InlineData(TransformerType.Handlebars, "\"false\"", "false")] // bool is special
+ [InlineData(TransformerType.Handlebars, "false", "false")]
+ [InlineData(TransformerType.Handlebars, "\"true\"", "true")] // bool is special
+ [InlineData(TransformerType.Handlebars, "true", "true")]
+ [InlineData(TransformerType.Handlebars, "\"-42\"", "\"-42\"")]
+ [InlineData(TransformerType.Handlebars, "-42", "\"-42\"")]
+ [InlineData(TransformerType.Handlebars, "\"2147483647\"", "\"2147483647\"")]
+ [InlineData(TransformerType.Handlebars, "2147483647", "\"2147483647\"")]
+ [InlineData(TransformerType.Handlebars, "\"9223372036854775807\"", "\"9223372036854775807\"")]
+ [InlineData(TransformerType.Handlebars, "9223372036854775807", "\"9223372036854775807\"")]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsJsonWithExtraQuotes_AlwaysMakesString(TransformerType transformerType, string value, string expected)
+ {
+ string jsonString = $"{{ \"x\": {value} }}";
+ var bodyData = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } });
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create().WithHeader("x", "{{request.Headers[\"Content-Type\"]}}", "{{request.Url}}").WithBody("test").WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new { text = "\"{{request.bodyAsJson.x}}\"" })
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test");
- Check.That(response.Message.Headers).ContainsKey("x");
- Check.That(response.Message.Headers["x"]).Contains("text/plain");
- Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo");
- }
+ // Assert
+ JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":{expected}}}");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_Origin_Port_Protocol_Host(TransformerType transformerType)
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ //[InlineData(TransformerType.Scriban)] Scriban cannot access dynamic Json Objects
+ //[InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsArray(TransformerType transformerType)
+ {
+ // Assign
+ string jsonString = "{ \"a\": \"test 1\", \"b\": \"test 2\" }";
+ var bodyData = new BodyData
{
- // Assign
- var body = new BodyData
- {
- BodyAsString = "abc",
- DetectedBodyType = BodyType.String
- };
- var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body);
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_array"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create()
- .WithBody("test {{request.Origin}} {{request.Port}} {{request.Protocol}} {{request.Host}}")
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new[] { "first", "{{request.path}}", "{{request.bodyAsJson.a}}", "{{request.bodyAsJson.b}}", "last" })
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost:1234 1234 http localhost");
- }
+ // Assert
+ Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("[\"first\",\"/foo_array\",\"test 1\",\"test 2\",\"last\"]");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsObject(TransformerType transformerType)
+ [Fact]
+ public async Task Response_ProvideResponse_Handlebars_WithBodyAsFile()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithTransformer()
+ .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
+ }
+
+ [Theory(Skip = @"Does not work in Scriban --> c:\\[""1""]\\test.xml")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_WithBodyAsFile(TransformerType transformerType)
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithTransformer(transformerType)
+ .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ //[InlineData(TransformerType.Scriban)] ["c:\\["1"]\\test.xml"]
+ //[InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsFile_And_TransformContentFromBodyAsFile(TransformerType transformerType)
+ {
+ // Assign
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("");
+
+ _settings.FileSystemHandler = filesystemHandlerMock.Object;
+
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithTransformer(transformerType, true)
+ .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
+ Check.That(response.Message.BodyData.DetectedBodyType).Equals(BodyType.String);
+ Check.That(response.Message.BodyData.BodyAsString).Equals("");
+ }
+
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsNormalString(TransformerType transformerType)
+ {
+ // Assign
+ string jsonString = "{ \"name\": \"WireMock\" }";
+ var bodyData = new BodyData
{
- // Assign
- string jsonString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"WireMock\" } ] }";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { x = "test {{request.Path}}" })
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson("test")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"x\":\"test /foo_object\"}");
- }
+ // Assert
+ Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("\"test\"");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_ResultAsArray(TransformerType transformerType)
+ [Fact(Skip = "todo...")]
+ public async Task Response_ProvideResponse_Handlebars_WithBodyAsJson_ResultAsTemplatedString()
+ {
+ // Assign
+ string jsonString = "{ \"name\": \"WireMock\" }";
+ var bodyData = new BodyData
{
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "GET", ClientIp);
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new [] { new { x = "test" }})
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson("{{{request.BodyAsJson}}}")
+ .WithTransformer();
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be("[{\"x\":\"test\"}]");
- }
+ // Assert
+ Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}");
+ }
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_ResultAsJArray(TransformerType transformerType)
+ [Theory(Skip = "{{{ }}} Does not work in Scriban")]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Scriban_WithBodyAsJson_ResultAsTemplatedString(TransformerType transformerType)
+ {
+ // Assign
+ string jsonString = "{ \"name\": \"WireMock\" }";
+ var bodyData = new BodyData
{
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "GET", ClientIp);
+ BodyAsJson = JsonConvert.DeserializeObject(jsonString),
+ DetectedBodyType = BodyType.Json,
+ Encoding = Encoding.UTF8
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var array = JArray.Parse("[{\"x\":\"test\"}]");
- var responseBuilder = Response.Create()
- .WithBodyAsJson(array)
- .WithTransformer(transformerType);
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson("{{{request.BodyAsJson}}}")
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be("[{\"x\":\"test\"}]");
- }
+ // Assert
+ Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}");
+ }
- //[Theory]
- //[InlineData(TransformerType.Handlebars, "a")]
- //[InlineData(TransformerType.Handlebars, "42")]
- //[InlineData(TransformerType.Handlebars, "{")]
- //[InlineData(TransformerType.Handlebars, "]")]
- //[InlineData(TransformerType.Handlebars, " ")]
- //public async Task Response_ProvideResponse_Transformer_WithBodyAsJsonWithExtraQuotes_AndSpecialOption_MakesAString_ResultAsObject(TransformerType transformerType, string text)
- //{
- // string jsonString = $"{{ \"x\": \"{text}\" }}";
- // var bodyData = new BodyData
- // {
- // BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- // DetectedBodyType = BodyType.Json,
- // Encoding = Encoding.UTF8
- // };
- // var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- // var responseBuilder = Response.Create()
- // .WithBodyAsJson(new { text = "\"{{request.bodyAsJson.x}}\"" })
- // .WithTransformer(transformerType, false, ReplaceNodeOptions.Default);
-
- // // Act
- // var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // // Assert
- // JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":\"{text}\"}}");
- //}
-
- [Theory]
- [InlineData(TransformerType.Handlebars, "\"\"", "\"\"")]
- [InlineData(TransformerType.Handlebars, "\"a\"", "\"a\"")]
- [InlineData(TransformerType.Handlebars, "\" \"", "\" \"")]
- [InlineData(TransformerType.Handlebars, "\"'\"", "\"'\"")]
- [InlineData(TransformerType.Handlebars, "\"false\"", "false")] // bool is special
- [InlineData(TransformerType.Handlebars, "false", "false")]
- [InlineData(TransformerType.Handlebars, "\"true\"", "true")] // bool is special
- [InlineData(TransformerType.Handlebars, "true", "true")]
- [InlineData(TransformerType.Handlebars, "\"-42\"", "-42")] // todo
- [InlineData(TransformerType.Handlebars, "-42", "-42")]
- [InlineData(TransformerType.Handlebars, "\"2147483647\"", "2147483647")] // todo
- [InlineData(TransformerType.Handlebars, "2147483647", "2147483647")]
- [InlineData(TransformerType.Handlebars, "\"9223372036854775807\"", "9223372036854775807")] // todo
- [InlineData(TransformerType.Handlebars, "9223372036854775807", "9223372036854775807")]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_ReplaceNodeOptionsKeep(TransformerType transformerType, string value, string expected)
+ [Theory]
+ [InlineData(TransformerType.Handlebars)]
+ [InlineData(TransformerType.Scriban)]
+ [InlineData(TransformerType.ScribanDotLiquid)]
+ public async Task Response_ProvideResponse_Transformer_WithBodyAsString_KeepsEncoding(TransformerType transformerType)
+ {
+ // Assign
+ const string text = "my-text";
+ Encoding enc = Encoding.Unicode;
+ var bodyData = new BodyData
{
- string jsonString = $"{{ \"x\": {value} }}";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
+ BodyAsString = text,
+ DetectedBodyType = BodyType.String,
+ Encoding = enc
+ };
+ var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { text = "{{request.bodyAsJson.x}}" })
- .WithTransformer(transformerType, false, ReplaceNodeOptions.None);
+ var responseBuilder = Response.Create()
+ .WithBody("{{request.Body}}", BodyDestinationFormat.SameAsSource, enc)
+ .WithTransformer(transformerType);
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
- // Assert
- JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":{expected}}}");
- }
-
- [Theory]
- [InlineData(TransformerType.Handlebars, "\"\"", "\"\"")]
- [InlineData(TransformerType.Handlebars, "\"a\"", "\"a\"")]
- [InlineData(TransformerType.Handlebars, "\" \"", "\" \"")]
- [InlineData(TransformerType.Handlebars, "\"'\"", "\"'\"")]
- [InlineData(TransformerType.Handlebars, "\"false\"", "false")] // bool is special
- [InlineData(TransformerType.Handlebars, "false", "false")]
- [InlineData(TransformerType.Handlebars, "\"true\"", "true")] // bool is special
- [InlineData(TransformerType.Handlebars, "true", "true")]
- [InlineData(TransformerType.Handlebars, "\"-42\"", "\"-42\"")]
- [InlineData(TransformerType.Handlebars, "-42", "\"-42\"")]
- [InlineData(TransformerType.Handlebars, "\"2147483647\"", "\"2147483647\"")]
- [InlineData(TransformerType.Handlebars, "2147483647", "\"2147483647\"")]
- [InlineData(TransformerType.Handlebars, "\"9223372036854775807\"", "\"9223372036854775807\"")]
- [InlineData(TransformerType.Handlebars, "9223372036854775807", "\"9223372036854775807\"")]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsJsonWithExtraQuotes_AlwaysMakesString(TransformerType transformerType, string value, string expected)
- {
- string jsonString = $"{{ \"x\": {value} }}";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new { text = "\"{{request.bodyAsJson.x}}\"" })
- .WithTransformer(transformerType);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be($"{{\"text\":{expected}}}");
- }
-
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- //[InlineData(TransformerType.Scriban)] Scriban cannot access dynamic Json Objects
- //[InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsArray(TransformerType transformerType)
- {
- // Assign
- string jsonString = "{ \"a\": \"test 1\", \"b\": \"test 2\" }";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_array"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson(new[] { "first", "{{request.path}}", "{{request.bodyAsJson.a}}", "{{request.bodyAsJson.b}}", "last" })
- .WithTransformer(transformerType);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("[\"first\",\"/foo_array\",\"test 1\",\"test 2\",\"last\"]");
- }
-
- [Fact]
- public async Task Response_ProvideResponse_Handlebars_WithBodyAsFile()
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
-
- var responseBuilder = Response.Create()
- .WithTransformer()
- .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
- }
-
- [Theory(Skip = @"Does not work in Scriban --> c:\\[""1""]\\test.xml")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_WithBodyAsFile(TransformerType transformerType)
- {
- // Assign
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
-
- var responseBuilder = Response.Create()
- .WithTransformer(transformerType)
- .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
- }
-
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- //[InlineData(TransformerType.Scriban)] ["c:\\["1"]\\test.xml"]
- //[InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsFile_And_TransformContentFromBodyAsFile(TransformerType transformerType)
- {
- // Assign
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("");
-
- _settings.FileSystemHandler = filesystemHandlerMock.Object;
-
- var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp);
-
- var responseBuilder = Response.Create()
- .WithTransformer(transformerType, true)
- .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml");
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml");
- Check.That(response.Message.BodyData.DetectedBodyType).Equals(BodyType.String);
- Check.That(response.Message.BodyData.BodyAsString).Equals("");
- }
-
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsNormalString(TransformerType transformerType)
- {
- // Assign
- string jsonString = "{ \"name\": \"WireMock\" }";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson("test")
- .WithTransformer(transformerType);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("\"test\"");
- }
-
- [Fact(Skip = "todo...")]
- public async Task Response_ProvideResponse_Handlebars_WithBodyAsJson_ResultAsTemplatedString()
- {
- // Assign
- string jsonString = "{ \"name\": \"WireMock\" }";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson("{{{request.BodyAsJson}}}")
- .WithTransformer();
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}");
- }
-
- [Theory(Skip = "{{{ }}} Does not work in Scriban")]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Scriban_WithBodyAsJson_ResultAsTemplatedString(TransformerType transformerType)
- {
- // Assign
- string jsonString = "{ \"name\": \"WireMock\" }";
- var bodyData = new BodyData
- {
- BodyAsJson = JsonConvert.DeserializeObject(jsonString),
- DetectedBodyType = BodyType.Json,
- Encoding = Encoding.UTF8
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBodyAsJson("{{{request.BodyAsJson}}}")
- .WithTransformer(transformerType);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}");
- }
-
- [Theory]
- [InlineData(TransformerType.Handlebars)]
- [InlineData(TransformerType.Scriban)]
- [InlineData(TransformerType.ScribanDotLiquid)]
- public async Task Response_ProvideResponse_Transformer_WithBodyAsString_KeepsEncoding(TransformerType transformerType)
- {
- // Assign
- const string text = "my-text";
- Encoding enc = Encoding.Unicode;
- var bodyData = new BodyData
- {
- BodyAsString = text,
- DetectedBodyType = BodyType.String,
- Encoding = enc
- };
- var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData);
-
- var responseBuilder = Response.Create()
- .WithBody("{{request.Body}}", BodyDestinationFormat.SameAsSource, enc)
- .WithTransformer(transformerType);
-
- // Act
- var response = await responseBuilder.ProvideResponseAsync(request, _settings).ConfigureAwait(false);
-
- // Assert
- response.Message.BodyData.BodyAsString.Should().Be(text);
- response.Message.BodyData.Encoding.Should().Be(enc);
- }
+ // Assert
+ response.Message.BodyData.BodyAsString.Should().Be(text);
+ response.Message.BodyData.Encoding.Should().Be(enc);
}
}
\ No newline at end of file