From 22298114d7d9d08cf10f0c64f2119b23fc0b20e0 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Wed, 28 Feb 2018 18:05:10 +0100 Subject: [PATCH] Fix ResponseMessageTransformer --- .../ResponseMessageTransformer.cs | 20 +++++++++------ .../ResponseWithBodyHandlebarsTests.cs | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/WireMock.Net/Transformers/ResponseMessageTransformer.cs b/src/WireMock.Net/Transformers/ResponseMessageTransformer.cs index 509c8ab2..9dd58d8d 100644 --- a/src/WireMock.Net/Transformers/ResponseMessageTransformer.cs +++ b/src/WireMock.Net/Transformers/ResponseMessageTransformer.cs @@ -21,15 +21,19 @@ namespace WireMock.Transformers var template = new { request = requestMessage }; // Body - var templateBody = Handlebars.Compile(bodyIsJson ? JsonConvert.SerializeObject(original.BodyAsJson) : original.Body); + string body = bodyIsJson ? JsonConvert.SerializeObject(original.BodyAsJson) : original.Body; + if (body != null) + { + var templateBody = Handlebars.Compile(body); - if (!bodyIsJson) - { - responseMessage.Body = templateBody(template); - } - else - { - responseMessage.BodyAsJson = JsonConvert.DeserializeObject(templateBody(template)); + if (!bodyIsJson) + { + responseMessage.Body = templateBody(template); + } + else + { + responseMessage.BodyAsJson = JsonConvert.DeserializeObject(templateBody(template)); + } } // Headers diff --git a/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs b/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs index 0e987c5c..70840fe0 100644 --- a/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs +++ b/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs @@ -2,8 +2,10 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using Newtonsoft.Json; using NFluent; using WireMock.ResponseBuilders; +using WireMock.Util; using Xunit; namespace WireMock.Net.Tests @@ -12,6 +14,29 @@ namespace WireMock.Net.Tests { private const string ClientIp = "::1"; + [Fact] + public async Task Response_ProvideResponse_Handlebars_WithBodyAsJson() + { + // given + string jsonString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }"; + var bodyData = new BodyData + { + BodyAsJson = JsonConvert.DeserializeObject(jsonString), + Encoding = Encoding.UTF8 + }; + var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, bodyData); + + var response = Response.Create() + .WithBodyAsJson(new { x = "test {{request.url}}" }) + .WithTransformer(); + + // act + var responseMessage = await response.ProvideResponseAsync(request); + + // then + Check.That(JsonConvert.SerializeObject(responseMessage.BodyAsJson)).Equals("{\"x\":\"test http://localhost/foo\"}"); + } + [Fact] public async Task Response_ProvideResponse_Handlebars_UrlPathVerb() {