diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index c95bde84..6a9170ae 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -745,6 +745,11 @@ namespace WireMock.Server responseBuilder = responseBuilder.WithBodyFromBase64(responseModel.BodyFromBase64, ToEncoding(responseModel.BodyEncoding)); } + else if (responseModel.BodyAsFile != null) + { + responseBuilder = responseBuilder.WithBodyFromFile(responseModel.BodyAsFile); + } + if (responseModel.UseTransformer) { responseBuilder = responseBuilder.WithTransformer(); diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs index 533b852f..a3faaa43 100644 --- a/test/WireMock.Net.Tests/FluentMockServerTests.cs +++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs @@ -11,6 +11,7 @@ using WireMock.RequestBuilders; using WireMock.ResponseBuilders; using WireMock.Server; using Xunit; +using Newtonsoft.Json; namespace WireMock.Net.Tests { @@ -76,6 +77,34 @@ namespace WireMock.Net.Tests Check.That(mappings.First().Title).IsNullOrEmpty(); } + [Fact] + public void FluentMockServer_ReadStaticMapping_WithResponseBodyFromFile() + { + string guid = "00000002-ee28-4f29-ae63-1ac9b0802d87"; + + string folder = Path.Combine(GetCurrentFolder(), "__admin", "mappings", guid + ".json"); + string json = File.ReadAllText(folder); + + string responseBodyFilePath = Path.Combine(GetCurrentFolder(), "ResponseBodyFiles", "responsebody.json"); + + dynamic jsonObj = JsonConvert.DeserializeObject(json); + jsonObj["Response"]["BodyAsFile"] = responseBodyFilePath; + + string output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented); + File.WriteAllText(folder, output); + + _server = FluentMockServer.Start(); + _server.ReadStaticMappingAndAddOrUpdate(folder); + + var mappings = _server.Mappings.ToArray(); + Check.That(mappings).HasSize(1); + + Check.That(mappings.First().RequestMatcher).IsNotNull(); + Check.That(mappings.First().Provider).IsNotNull(); + Check.That(mappings.First().Guid).Equals(Guid.Parse(guid)); + Check.That(mappings.First().Title).IsNullOrEmpty(); + } + [Fact] public void FluentMockServer_ReadStaticMappings() { @@ -85,7 +114,7 @@ namespace WireMock.Net.Tests _server.ReadStaticMappings(folder); var mappings = _server.Mappings.ToArray(); - Check.That(mappings).HasSize(2); + Check.That(mappings).HasSize(3); } [Fact] diff --git a/test/WireMock.Net.Tests/ResponseBodyFiles/responsebody.json b/test/WireMock.Net.Tests/ResponseBodyFiles/responsebody.json new file mode 100644 index 00000000..9d9c3b6a --- /dev/null +++ b/test/WireMock.Net.Tests/ResponseBodyFiles/responsebody.json @@ -0,0 +1,3 @@ +{ + "test": "test" +} diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj index a9181410..df80645a 100644 --- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj +++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj @@ -31,9 +31,15 @@ + + PreserveNewest + PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/test/WireMock.Net.Tests/__admin/mappings/00000002-ee28-4f29-ae63-1ac9b0802d87.json b/test/WireMock.Net.Tests/__admin/mappings/00000002-ee28-4f29-ae63-1ac9b0802d87.json new file mode 100644 index 00000000..97999c1e --- /dev/null +++ b/test/WireMock.Net.Tests/__admin/mappings/00000002-ee28-4f29-ae63-1ac9b0802d87.json @@ -0,0 +1,24 @@ +{ + "Guid": "00000002-ee28-4f29-ae63-1ac9b0802d87", + "Priority": 0, + "Request": { + "Path": { + "Matchers": [ + { + "Name": "ExactMatcher", + "Pattern": "/response/staticfile" + } + ] + }, + "Methods": [ + "get" + ] + }, + "Response": { + "StatusCode": 200, + "BodyAsFile": "responsebody.json", + "Headers": { + "Content-Type": "application/json" + } + } +} \ No newline at end of file