From 4aaed2a6caf6d293943a68d64457d46a9a168bfb Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 22 Nov 2024 07:58:23 +0100 Subject: [PATCH] Fix HandlebarsContext ParseAndEvaluate method (#1213) * Fix HandlebarsContext ParseAndEvaluate method * test * xxx --- WireMock.Net Solution.sln | 3 +++ .../Handlebars/HandlebarsContext.cs | 4 +++- test/Directory.Build.props | 8 +++++++ .../ResponseWithTransformerTests.cs | 23 +++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 test/Directory.Build.props diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index ea1480ff..168771e8 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -6,6 +6,9 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8F890C6F-9ACC-438D-928A-AD61CDA862F2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0BB8B634-407A-4610-A91F-11586990767A}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net", "src\WireMock.Net\WireMock.Net.csproj", "{D3804228-91F4-4502-9595-39584E5A01AD}" EndProject diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs index cfc998f9..5907e188 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs @@ -27,7 +27,9 @@ internal class HandlebarsContext : IHandlebarsContext public object? ParseAndEvaluate(string text, object model) { - if (Handlebars.TryEvaluate(text, model, out var result) && result is not UndefinedBindingResult) + if (text.StartsWith("{{") && text.EndsWith("}}") && + Handlebars.TryEvaluate(text, model, out var result) && + result is not UndefinedBindingResult) { return result; } diff --git a/test/Directory.Build.props b/test/Directory.Build.props new file mode 100644 index 00000000..c6070279 --- /dev/null +++ b/test/Directory.Build.props @@ -0,0 +1,8 @@ + + + + + + + + \ 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 278d4615..d6727acd 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -130,6 +130,29 @@ public class ResponseWithTransformerTests Check.That(response.Message.BodyData!.BodyAsString).Equals("a wiremock"); } + [Theory] + [InlineData("{{request.PathSegments.[0]}}", "a")] + [InlineData("prefix_{{request.PathSegments.[0]}}", "prefix_a")] + [InlineData("{{request.PathSegments.[0]}}_postfix", "a_postfix")] + [InlineData("prefix_{{request.PathSegments.[0]}}_postfix", "prefix_a_postfix")] + public async Task Response_ProvideResponse_Handlebars_BodyAsJson_PathSegments(string field, string expected) + { + // 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() + .WithBodyAsJson(new { field }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); + + // Assert + var json = (JObject)response.Message.BodyData!.BodyAsJson!; + Check.That(json["field"]!.Value()).Equals(expected); + } + [Theory(Skip = "Invalid token `OpenBracket`")] [InlineData(TransformerType.Scriban)] [InlineData(TransformerType.ScribanDotLiquid)]