diff --git a/src/WireMock.Net.Abstractions/WireMock.Net.Abstractions.csproj b/src/WireMock.Net.Abstractions/WireMock.Net.Abstractions.csproj index 625aba68..0066314e 100644 --- a/src/WireMock.Net.Abstractions/WireMock.Net.Abstractions.csproj +++ b/src/WireMock.Net.Abstractions/WireMock.Net.Abstractions.csproj @@ -4,11 +4,9 @@ Commonly used models, enumerations and types. WireMock.Net.Abstractions Stef Heyenrath - net45;netstandard1.0;netstandard2.0;netstandard2.1 - + net45;net451;netstandard1.0;netstandard2.0;netstandard2.1 true $(NoWarn);1591;8603 - WireMock.Net.Abstractions WireMock.Net.Abstractions wiremock;wiremock.org;interfaces;models;classes;enumerations;types diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index afb90b99..04aa2600 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -124,6 +124,11 @@ namespace WireMock.Transformers WalkNode(handlebarsContext, options, jToken, model); break; + case JArray bodyAsJArray: + jToken = bodyAsJArray.DeepClone(); + WalkNode(handlebarsContext, options, jToken, model); + break; + case Array bodyAsArray: jToken = JArray.FromObject(bodyAsArray); WalkNode(handlebarsContext, options, jToken, model); diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs index e8f36677..7b08773d 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using Moq; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using NFluent; using WireMock.Handlers; using WireMock.Models; @@ -385,6 +386,47 @@ namespace WireMock.Net.Tests.ResponseBuilders Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"x\":\"test /foo_object\"}"); } + [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(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(request, _settings).ConfigureAwait(false); + + // Assert + JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson).Should().Be("[{\"x\":\"test\"}]"); + } + //[Theory] //[InlineData(TransformerType.Handlebars, "a")] //[InlineData(TransformerType.Handlebars, "42")]