From e4d360d737861f49e3f7a0a44074a327f0f219ed Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 9 Dec 2023 16:20:13 +0100 Subject: [PATCH 01/11] Update Handlebars Transformer logic (ReplaceNodeOptions) --- .../Types/ReplaceNodeOptions.cs | 14 ++--- .../ITransformResponseBuilder.cs | 2 +- src/WireMock.Net/ResponseBuilders/Response.cs | 2 +- .../Serialization/WebhookMapper.cs | 2 +- .../Server/WireMockServer.ConvertMapping.cs | 8 ++- src/WireMock.Net/Transformers/Transformer.cs | 46 +++++++++----- .../ResponseWithHandlebarsDateTimeTests.cs | 60 +++++++++++++++++-- .../ResponseWithHandlebarsRandomTests.cs | 26 ++++---- .../ResponseWithTransformerTests.cs | 2 +- 9 files changed, 111 insertions(+), 51 deletions(-) diff --git a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs index 3f8cb3186..0b1803c86 100644 --- a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs +++ b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs @@ -7,19 +7,15 @@ public enum ReplaceNodeOptions { /// /// Try to evaluate a templated value. - /// In case this is valid, return the value and if the value can be converted to a primitive type, use that value. + /// In case this is valid, return the value and if the value can be converted to a supported (primitive) type, use that value. + /// + /// [Default behaviour] /// EvaluateAndTryToConvert = 0, - /// - /// Try to evaluate a templated value. - /// In case this is valid, return the value, else fallback to the parse behavior. - /// - Evaluate = 1, - /// /// Parse templated string to a templated string. - /// (keep a templated string value as string value). + /// For example: keep a templated string value (which is always the case) as a string value. /// - Parse = 2 + EvaluateAndKeep = 1 } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseBuilders/ITransformResponseBuilder.cs b/src/WireMock.Net/ResponseBuilders/ITransformResponseBuilder.cs index 729f8894f..6e7a8ed81 100644 --- a/src/WireMock.Net/ResponseBuilders/ITransformResponseBuilder.cs +++ b/src/WireMock.Net/ResponseBuilders/ITransformResponseBuilder.cs @@ -29,5 +29,5 @@ public interface ITransformResponseBuilder : IDelayResponseBuilder /// /// The . /// - IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate); + IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.EvaluateAndTryToConvert); } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseBuilders/Response.cs b/src/WireMock.Net/ResponseBuilders/Response.cs index 00e2de48d..9540aa621 100644 --- a/src/WireMock.Net/ResponseBuilders/Response.cs +++ b/src/WireMock.Net/ResponseBuilders/Response.cs @@ -205,7 +205,7 @@ public IResponseBuilder WithTransformer(ReplaceNodeOptions options) } /// - public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate) + public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.EvaluateAndTryToConvert) { UseTransformer = true; TransformerType = transformerType; diff --git a/src/WireMock.Net/Serialization/WebhookMapper.cs b/src/WireMock.Net/Serialization/WebhookMapper.cs index bcd45c9fb..9575bc31c 100644 --- a/src/WireMock.Net/Serialization/WebhookMapper.cs +++ b/src/WireMock.Net/Serialization/WebhookMapper.cs @@ -39,7 +39,7 @@ public static IWebhook Map(WebhookModel model) if (!Enum.TryParse(model.Request.TransformerReplaceNodeOptions, out var option)) { - option = ReplaceNodeOptions.Evaluate; + option = ReplaceNodeOptions.EvaluateAndKeep; } webhook.Request.TransformerReplaceNodeOptions = option; } diff --git a/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs b/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs index 8b5e97e9e..2d0199adb 100644 --- a/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs +++ b/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs @@ -264,14 +264,16 @@ private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel) transformerType = TransformerType.Handlebars; } - if (!Enum.TryParse(responseModel.TransformerReplaceNodeOptions, out var option)) + if (!Enum.TryParse(responseModel.TransformerReplaceNodeOptions, out var replaceNodeOptions)) { - option = ReplaceNodeOptions.Evaluate; + replaceNodeOptions = ReplaceNodeOptions.EvaluateAndTryToConvert; } + responseBuilder = responseBuilder.WithTransformer( transformerType, responseModel.UseTransformerForBodyAsFile == true, - option); + replaceNodeOptions + ); } if (!string.IsNullOrEmpty(responseModel.ProxyUrl)) diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index c6943629d..207acd899 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -13,7 +12,17 @@ namespace WireMock.Transformers; internal class Transformer : ITransformer { - private static readonly Type[] SupportedTypes = { typeof(bool), typeof(long), typeof(int), typeof(double), typeof(Guid), typeof(DateTime), typeof(TimeSpan), typeof(Uri) }; + private static readonly Func[] ConversionsFunctions = + { + s => bool.TryParse(s, out var result) ? (true, result) : (false, s), + s => int.TryParse(s, out var result) ? (true, result) : (false, s), + s => long.TryParse(s, out var result) ? (true, result) : (false, s), + s => double.TryParse(s, out var result) ? (true, result) : (false, s), + s => Guid.TryParse(s, out var result) ? (true, result) : (false, s), + s => DateTime.TryParse(s, out var result) ? (true, result) : (false, s), + s => TimeSpan.TryParse(s, out var result) ? (true, result) : (false, s), + s => Uri.TryCreate(s, UriKind.Absolute, out var result) ? (true, result) : (false, s) + }; private readonly JsonSerializer _jsonSerializer; private readonly ITransformerContextFactory _factory; @@ -268,9 +277,10 @@ private void ReplaceNodeValue(ReplaceNodeOptions options, JToken node, object? t return; case string transformedString: - if (TryConvert(transformedString, out var convertedFromStringValue)) + var (isConvertedFromString, convertedValueFromString) = TryConvert(options, transformedString); + if (isConvertedFromString) { - node.Replace(JToken.FromObject(convertedFromStringValue, _jsonSerializer)); + node.Replace(JToken.FromObject(convertedValueFromString, _jsonSerializer)); } else { @@ -292,7 +302,8 @@ private void ReplaceNodeValue(ReplaceNodeOptions options, JToken node, object? t break; case { }: - if (TryConvert(transformedValue, out var convertedValue)) + var (isConverted, convertedValue) = TryConvert(options, transformedValue); + if (isConverted) { node.Replace(JToken.FromObject(convertedValue, _jsonSerializer)); } @@ -308,23 +319,26 @@ private static JToken ParseAsJObject(string stringValue) return JsonUtils.TryParseAsJObject(stringValue, out var parsedAsjObject) ? parsedAsjObject : stringValue; } - private static bool TryConvert(object? transformedValue, [NotNullWhen(true)] out object? convertedValue) + private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeOptions options, object value) { - foreach (var supportedType in SupportedTypes) + if (options == ReplaceNodeOptions.EvaluateAndKeep) { - try - { - convertedValue = Convert.ChangeType(transformedValue, supportedType); - return convertedValue is not null; - } - catch + return (false, value); + } + + if (value is string transformedString) + { + foreach (var func in ConversionsFunctions) { - // Ignore + var (isConverted, convertedValue) = func(transformedString); + if (isConverted) + { + return (true, convertedValue); + } } } - convertedValue = null; - return false; + return (false, value); } private static IBodyData TransformBodyAsString(ITransformerContext transformerContext, object model, IBodyData original) diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs index e9b106af8..3ee06bc1c 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs @@ -7,6 +7,7 @@ using WireMock.Models; using WireMock.ResponseBuilders; using WireMock.Settings; +using WireMock.Types; using Xunit; namespace WireMock.Net.Tests.ResponseBuilders; @@ -28,8 +29,10 @@ public ResponseWithHandlebarsDateTimeTests() _settings.FileSystemHandler = filesystemHandlerMock.Object; } - [Fact] - public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTime() + [Theory] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] + [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeYear(ReplaceNodeOptions options, JTokenType expected) { // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); @@ -39,14 +42,61 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi { DateTimeYear = "{{ DateTime.UtcNow \"yyyy\" }}" }) - .WithTransformer(); + .WithTransformer(options); + + // Act + var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); + + // Assert + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["DateTimeYear"]!.Type.Should().Be(expected); + jObject["DateTimeYear"]!.Value().Should().Be(DateTime.Now.Year.ToString()); + } + + [Theory] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Date)] + [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTime(ReplaceNodeOptions options, JTokenType expected) + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + DateTime = "{{ DateTime.UtcNow }}" + }) + .WithTransformer(options); + + // Act + var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); + + // Assert + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["DateTime"]!.Type.Should().Be(expected); + } + + [Theory] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] + [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeWithStringFormat(ReplaceNodeOptions options, JTokenType expected) + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + StringFormatDateTime = "{{ String.Format (DateTime.UtcNow) \"yyMMddhhmmss\" }}" + }) + .WithTransformer(options); // Act var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); // Assert - var j = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); - j["DateTimeYear"]!.Value().Should().Be(DateTime.Now.Year.ToString()); + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["StringFormatDateTime"]!.Type.Should().Be(expected); } [Fact] diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs index 8f6c7dcf2..a07e42c54 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs @@ -78,10 +78,8 @@ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Boolean() } [Theory] - [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.Integer)] - //[InlineData(ReplaceNodeOptions.Bool, JTokenType.String)] - //[InlineData(ReplaceNodeOptions.Integer, JTokenType.Integer)] - //[InlineData(ReplaceNodeOptions.Bool | ReplaceNodeOptions.Integer, JTokenType.Integer)] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] + [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(ReplaceNodeOptions options, JTokenType expected) { // Assign @@ -98,12 +96,14 @@ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(Repla var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); // Assert - JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); - Check.That(j["Value"].Type).IsEqualTo(expected); + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["Value"]!.Type.Should().Be(expected); } - [Fact] - public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid() + [Theory] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Guid)] + [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid(ReplaceNodeOptions options, JTokenType expected) { // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); @@ -114,17 +114,15 @@ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid() Guid1 = "{{Random Type=\"Guid\" Uppercase=false}}", Guid2 = "{{Random Type=\"Guid\"}}" }) - .WithTransformer(); + .WithTransformer(options); // Act var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, 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); + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["Guid1"]!.Type.Should().Be(expected); + jObject["Guid2"]!.Type.Should().Be(expected); } [Fact] diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs index e520df3e5..10e80bede 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -556,7 +556,7 @@ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_Replac var responseBuilder = Response.Create() .WithBodyAsJson(new { text = "{{request.bodyAsJson.x}}" }) - .WithTransformer(transformerType, false, ReplaceNodeOptions.Evaluate); + .WithTransformer(transformerType, false, ReplaceNodeOptions.EvaluateAndTryToConvert); // Act var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); From bff194e51574950e3fdf7e708ac5c5e909b42350 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 9 Dec 2023 16:57:24 +0100 Subject: [PATCH 02/11] okeee --- WireMock.Net Solution.sln | 35 +- .../WireMock.Net.Console.NET5.csproj | 1 - ...ireMock.Net.Console.NET7.UsingNuGet.csproj | 2 +- .../WireMock.Net.Console.NETCoreApp.csproj | 12 +- .../Program.cs | 28 - .../WireMock.Net.Console.NETCoreApp2.csproj | 65 -- .../__admin/mappings/1.cs | 1 - .../11111110-a633-40e8-a244-5cb80bc0ab66.json | 22 - .../791a3f31-6946-4ce7-8e6f-0237c7443275.json | 29 - .../873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json | 19 - .../__admin/mappings/BodyAsFileExample.json | 22 - .../__admin/mappings/MyXmlResponse.xml | 3 - .../__admin/mappings/array.json | 46 -- .../mappings/wiremock-petstore-openapi3.json | 602 ------------------ .../WireMock.Net.Console.NETCoreApp3.csproj | 4 +- .../MainApp.cs | 2 +- .../App.config | 6 +- ...WireMock.Net.Console.Net472.Classic.csproj | 40 +- .../packages.config | 20 +- .../Program.cs | 44 -- .../Properties/launchSettings.json | 27 - ...eMock.Net.Console.Proxy.NETCoreApp2.csproj | 17 - ...WireMock.Net.Console.RequestLogTest.csproj | 2 +- .../WireMock.Net.Service.csproj | 4 +- examples/WireMock.Net.Service/packages.config | 2 +- .../App.cs | 22 - .../IWireMockService.cs | 7 - .../Program.cs | 57 -- .../Properties/launchSettings.json | 34 - ...ireMock.Net.WebApplication.NETCore2.csproj | 35 - .../WireMockService.cs | 83 --- .../appsettings.json | 20 - .../libman.json | 5 - .../readme.md | 21 - .../resources/iis-apppool.png | Bin 8063 -> 0 bytes .../resources/iis-debug.png | Bin 37367 -> 0 bytes .../resources/iis-wiremock1and2.png | Bin 14103 -> 0 bytes .../web.config | 12 - .../Types/ReplaceNodeOptions.cs | 4 +- .../Serialization/WebhookMapper.cs | 2 +- src/WireMock.Net/Transformers/Transformer.cs | 2 +- .../ResponseWithHandlebarsDateTimeTests.cs | 6 +- .../ResponseWithHandlebarsRandomTests.cs | 4 +- .../ResponseWithTransformerTests.cs | 32 +- ..._WithPriority_ReturnsPriority.verified.txt | 2 +- ...ring_And_UseTransformerIsTrue.verified.txt | 3 +- 46 files changed, 67 insertions(+), 1339 deletions(-) delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/Program.cs delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/1.cs delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/11111110-a633-40e8-a244-5cb80bc0ab66.json delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/791a3f31-6946-4ce7-8e6f-0237c7443275.json delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/BodyAsFileExample.json delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/MyXmlResponse.xml delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/array.json delete mode 100644 examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/wiremock-petstore-openapi3.json delete mode 100644 examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs delete mode 100644 examples/WireMock.Net.Console.Proxy.NETCoreApp2/Properties/launchSettings.json delete mode 100644 examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/App.cs delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/IWireMockService.cs delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/Program.cs delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/Properties/launchSettings.json delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/WireMock.Net.WebApplication.NETCore2.csproj delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/WireMockService.cs delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/appsettings.json delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/libman.json delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/readme.md delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/resources/iis-apppool.png delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/resources/iis-debug.png delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/resources/iis-wiremock1and2.png delete mode 100644 examples/WireMock.Net.WebApplication.NETCore2/web.config diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index 0692eae1b..8fabcff04 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -36,8 +36,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NETCoreApp3", "examples\WireMock.Net.Console.NETCoreApp3\WireMock.Net.Console.NETCoreApp3.csproj", "{8C424EAF-8269-46A2-9FF1-F6D4EADB5CD5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.Proxy.NETCoreApp2", "examples\WireMock.Net.Console.Proxy.NETCoreApp2\WireMock.Net.Console.Proxy.NETCoreApp2.csproj", "{41C19451-E980-4ED4-A011-DA7A1C23FC05}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Client", "examples\WireMock.Net.Client\WireMock.Net.Client.csproj", "{74D91AD0-D96D-4FD2-AEC5-CC49D38346C0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NETCoreApp", "examples\WireMock.Net.Console.NETCoreApp\WireMock.Net.Console.NETCoreApp.csproj", "{FE281639-B014-4C8A-96FA-141164A74713}" @@ -50,8 +48,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Console.Net461 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Console.Net452.Classic", "examples\WireMock.Net.Console.Net452.Classic\WireMock.Net.Console.Net452.Classic.csproj", "{668F689E-57B4-422E-8846-C0FF643CA268}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NETCoreApp2", "examples\WireMock.Net.Console.NETCoreApp2\WireMock.Net.Console.NETCoreApp2.csproj", "{83645809-9E01-4E81-8733-BA9497554ABF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.RequestLogTest", "examples\WireMock.Net.Console.RequestLogTest\WireMock.Net.Console.RequestLogTest.csproj", "{A9D039B9-7509-4CF1-9EFD-87EB82998575}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.OpenApiParser", "src\WireMock.Net.OpenApiParser\WireMock.Net.OpenApiParser.csproj", "{D3804228-91F4-4502-9595-39584E5AADAD}" @@ -60,8 +56,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.OpenApiParser. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.FluentAssertions", "src\WireMock.Net.FluentAssertions\WireMock.Net.FluentAssertions.csproj", "{B6269AAC-170A-4346-8B9A-579DED3D9A95}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.WebApplication.NETCore2", "examples\WireMock.Net.WebApplication.NETCore2\WireMock.Net.WebApplication.NETCore2.csproj", "{6F38CB3A-6DA1-408A-AECD-E434523C2838}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.WebApplication.NETCore3", "examples\WireMock.Net.WebApplication.NETCore3\WireMock.Net.WebApplication.NETCore3.csproj", "{E1C56967-3DC7-46CB-A1DF-B13167A0D9D4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NETCoreApp3WithCertificate", "examples\WireMock.Net.Console.NETCoreApp3WithCertificate\WireMock.Net.Console.NETCoreApp3WithCertificate.csproj", "{925E421A-1B3F-4202-B48F-734743573A4B}" @@ -104,8 +98,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NET6.W EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMockAzureQueueExample", "examples\WireMockAzureQueueExample\WireMockAzureQueueExample.csproj", "{BAA9EC2A-874B-45CE-8E51-A73622DC7F3D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMockAzureQueueProxy", "examples\WireMockAzureQueueProxy\WireMockAzureQueueProxy.csproj", "{ADB557D8-D66B-4387-912B-3F73E290B478}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Testcontainers", "src\WireMock.Net.Testcontainers\WireMock.Net.Testcontainers.csproj", "{12B016A5-9D8B-4EFE-96C2-CA51BE43367D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.TestcontainersExample", "examples\WireMock.Net.TestcontainersExample\WireMock.Net.TestcontainersExample.csproj", "{56A38798-C48B-4A4A-B805-071E05C02CE1}" @@ -118,6 +110,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Console.NET7.U EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NET8", "examples\WireMock.Net.Console.NET8\WireMock.Net.Console.NET8.csproj", "{1EA72C0F-92E9-486B-8FFE-53F992BFC4AA}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMockAzureQueueProxy", "examples\WireMockAzureQueueProxy\WireMockAzureQueueProxy.csproj", "{7FC0B409-2682-40EE-B3B9-3930D6769D01}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -148,10 +142,6 @@ Global {8C424EAF-8269-46A2-9FF1-F6D4EADB5CD5}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C424EAF-8269-46A2-9FF1-F6D4EADB5CD5}.Release|Any CPU.ActiveCfg = Release|Any CPU {8C424EAF-8269-46A2-9FF1-F6D4EADB5CD5}.Release|Any CPU.Build.0 = Release|Any CPU - {41C19451-E980-4ED4-A011-DA7A1C23FC05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41C19451-E980-4ED4-A011-DA7A1C23FC05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41C19451-E980-4ED4-A011-DA7A1C23FC05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41C19451-E980-4ED4-A011-DA7A1C23FC05}.Release|Any CPU.Build.0 = Release|Any CPU {74D91AD0-D96D-4FD2-AEC5-CC49D38346C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {74D91AD0-D96D-4FD2-AEC5-CC49D38346C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {74D91AD0-D96D-4FD2-AEC5-CC49D38346C0}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -176,10 +166,6 @@ Global {668F689E-57B4-422E-8846-C0FF643CA268}.Debug|Any CPU.Build.0 = Debug|Any CPU {668F689E-57B4-422E-8846-C0FF643CA268}.Release|Any CPU.ActiveCfg = Release|Any CPU {668F689E-57B4-422E-8846-C0FF643CA268}.Release|Any CPU.Build.0 = Release|Any CPU - {83645809-9E01-4E81-8733-BA9497554ABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83645809-9E01-4E81-8733-BA9497554ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83645809-9E01-4E81-8733-BA9497554ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83645809-9E01-4E81-8733-BA9497554ABF}.Release|Any CPU.Build.0 = Release|Any CPU {A9D039B9-7509-4CF1-9EFD-87EB82998575}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A9D039B9-7509-4CF1-9EFD-87EB82998575}.Debug|Any CPU.Build.0 = Debug|Any CPU {A9D039B9-7509-4CF1-9EFD-87EB82998575}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -196,10 +182,6 @@ Global {B6269AAC-170A-4346-8B9A-579DED3D9A95}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6269AAC-170A-4346-8B9A-579DED3D9A95}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6269AAC-170A-4346-8B9A-579DED3D9A95}.Release|Any CPU.Build.0 = Release|Any CPU - {6F38CB3A-6DA1-408A-AECD-E434523C2838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F38CB3A-6DA1-408A-AECD-E434523C2838}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F38CB3A-6DA1-408A-AECD-E434523C2838}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F38CB3A-6DA1-408A-AECD-E434523C2838}.Release|Any CPU.Build.0 = Release|Any CPU {E1C56967-3DC7-46CB-A1DF-B13167A0D9D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E1C56967-3DC7-46CB-A1DF-B13167A0D9D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {E1C56967-3DC7-46CB-A1DF-B13167A0D9D4}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -256,10 +238,6 @@ Global {BAA9EC2A-874B-45CE-8E51-A73622DC7F3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {BAA9EC2A-874B-45CE-8E51-A73622DC7F3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BAA9EC2A-874B-45CE-8E51-A73622DC7F3D}.Release|Any CPU.Build.0 = Release|Any CPU - {ADB557D8-D66B-4387-912B-3F73E290B478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADB557D8-D66B-4387-912B-3F73E290B478}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADB557D8-D66B-4387-912B-3F73E290B478}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADB557D8-D66B-4387-912B-3F73E290B478}.Release|Any CPU.Build.0 = Release|Any CPU {12B016A5-9D8B-4EFE-96C2-CA51BE43367D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {12B016A5-9D8B-4EFE-96C2-CA51BE43367D}.Debug|Any CPU.Build.0 = Debug|Any CPU {12B016A5-9D8B-4EFE-96C2-CA51BE43367D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -280,6 +258,10 @@ Global {1EA72C0F-92E9-486B-8FFE-53F992BFC4AA}.Debug|Any CPU.Build.0 = Debug|Any CPU {1EA72C0F-92E9-486B-8FFE-53F992BFC4AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {1EA72C0F-92E9-486B-8FFE-53F992BFC4AA}.Release|Any CPU.Build.0 = Release|Any CPU + {7FC0B409-2682-40EE-B3B9-3930D6769D01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7FC0B409-2682-40EE-B3B9-3930D6769D01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7FC0B409-2682-40EE-B3B9-3930D6769D01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7FC0B409-2682-40EE-B3B9-3930D6769D01}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -291,19 +273,16 @@ Global {B6269AAC-170A-43D5-8B9A-579DED3D9A95} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {31DC2EF8-C3FE-467D-84BE-FB5D956E612E} = {0BB8B634-407A-4610-A91F-11586990767A} {8C424EAF-8269-46A2-9FF1-F6D4EADB5CD5} = {985E0ADB-D4B4-473A-AA40-567E279B7946} - {41C19451-E980-4ED4-A011-DA7A1C23FC05} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {74D91AD0-D96D-4FD2-AEC5-CC49D38346C0} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {FE281639-B014-4C8A-96FA-141164A74713} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {26433A8F-BF01-4962-97EB-81BFFBB61096} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {7F0B2446-0363-4720-AF46-F47F83B557DC} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {1261BB9B-A7D4-456C-8985-3CE560361B8E} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {668F689E-57B4-422E-8846-C0FF643CA268} = {985E0ADB-D4B4-473A-AA40-567E279B7946} - {83645809-9E01-4E81-8733-BA9497554ABF} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {A9D039B9-7509-4CF1-9EFD-87EB82998575} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {D3804228-91F4-4502-9595-39584E5AADAD} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {5C09FB93-1535-4F92-AF26-21E8A061EE4A} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {B6269AAC-170A-4346-8B9A-579DED3D9A95} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {6F38CB3A-6DA1-408A-AECD-E434523C2838} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {E1C56967-3DC7-46CB-A1DF-B13167A0D9D4} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {925E421A-1B3F-4202-B48F-734743573A4B} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {40BF24B5-12E6-4610-9489-138798632E28} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} @@ -320,12 +299,12 @@ Global {0DE0954F-8C00-4E8D-B94A-4361FC1CBE44} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {7C2A9DE8-C89F-4841-9058-6B9BF81E5E34} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {BAA9EC2A-874B-45CE-8E51-A73622DC7F3D} = {985E0ADB-D4B4-473A-AA40-567E279B7946} - {ADB557D8-D66B-4387-912B-3F73E290B478} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {12B016A5-9D8B-4EFE-96C2-CA51BE43367D} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {56A38798-C48B-4A4A-B805-071E05C02CE1} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {07C30227-ADEC-4BDE-8CDC-849D85A690BB} = {0147029F-FA4A-44B3-B79A-3C3574054EE4} {941229D6-191B-4B5E-AC81-0905EBF4F19D} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {1EA72C0F-92E9-486B-8FFE-53F992BFC4AA} = {985E0ADB-D4B4-473A-AA40-567E279B7946} + {7FC0B409-2682-40EE-B3B9-3930D6769D01} = {985E0ADB-D4B4-473A-AA40-567E279B7946} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458} diff --git a/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj b/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj index 600bcdc7f..bf5ea660b 100644 --- a/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj +++ b/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj @@ -28,7 +28,6 @@ - diff --git a/examples/WireMock.Net.Console.NET7.UsingNuGet/WireMock.Net.Console.NET7.UsingNuGet.csproj b/examples/WireMock.Net.Console.NET7.UsingNuGet/WireMock.Net.Console.NET7.UsingNuGet.csproj index f18680d9e..092f1b035 100644 --- a/examples/WireMock.Net.Console.NET7.UsingNuGet/WireMock.Net.Console.NET7.UsingNuGet.csproj +++ b/examples/WireMock.Net.Console.NET7.UsingNuGet/WireMock.Net.Console.NET7.UsingNuGet.csproj @@ -9,7 +9,7 @@ - + diff --git a/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj b/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj index 2267f5cf6..fdba0459d 100644 --- a/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj +++ b/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj @@ -19,12 +19,12 @@ - - - - - - + diff --git a/examples/WireMock.Net.Console.NETCoreApp2/Program.cs b/examples/WireMock.Net.Console.NETCoreApp2/Program.cs deleted file mode 100644 index 36f574708..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/Program.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.IO; -using System.Linq; -using System.Reflection; -using log4net; -using log4net.Config; -using log4net.Repository; -using WireMock.Net.ConsoleApplication; - -namespace WireMock.Net.Console.NETCoreApp2 -{ - 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) - { - XmlConfigurator.Configure(LogRepository, new FileInfo("log4net.config")); - - foreach (var file in Directory.GetFiles("__admin").Where(f => !f.StartsWith("wiremock"))) - { - File.Delete(file); - } - - MainApp.Run(); - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj b/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj deleted file mode 100644 index 7e86155b6..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - Exe - netcoreapp2.1 - ../../resources/WireMock.Net-Logo.ico - - - - - - - - - - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Never - - - PreserveNewest - - - PreserveNewest - - - - \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/1.cs b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/1.cs deleted file mode 100644 index c8143e099..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/1.cs +++ /dev/null @@ -1 +0,0 @@ -// C# Hello \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/11111110-a633-40e8-a244-5cb80bc0ab66.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/11111110-a633-40e8-a244-5cb80bc0ab66.json deleted file mode 100644 index 9c761369d..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/11111110-a633-40e8-a244-5cb80bc0ab66.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "Request": { - "Path": { - "Matchers": [ - { - "Name": "WildcardMatcher", - "Pattern": "/static/mapping" - } - ] - }, - "Methods": [ - "get" - ] - }, - "Response": { - "BodyAsJson": { "body": "static mapping" }, - "Headers": { - "Content-Type": "application/json", - "Test-X": [ "test 1", "test 2" ] - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/791a3f31-6946-4ce7-8e6f-0237c7443275.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/791a3f31-6946-4ce7-8e6f-0237c7443275.json deleted file mode 100644 index d7a6cbdd7..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/791a3f31-6946-4ce7-8e6f-0237c7443275.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "Guid": "791a3f31-6946-4ce7-8e6f-0237c7443275", - "Title": "", - "Priority": 0, - "Request": { - "Path": "/proxy-google-test-post", - "Methods": [ - "post" - ], - "Body": {} - }, - "Response": { - "StatusCode": 404, - "Body": "\n\n \n \n Error 404 (Not Found)!!1\n \n \n

404. That’s an error.\n

The requested URL /proxy-google-test-post was not found on this server. That’s all we know.\n", - "BodyAsBytes": "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CiAgPG1ldGEgY2hhcnNldD11dGYtOD4KICA8bWV0YSBuYW1lPXZpZXdwb3J0IGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgbWluaW11bS1zY2FsZT0xLCB3aWR0aD1kZXZpY2Utd2lkdGgiPgogIDx0aXRsZT5FcnJvciA0MDQgKE5vdCBGb3VuZCkhITE8L3RpdGxlPgogIDxzdHlsZT4KICAgICp7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsY29kZXtmb250OjE1cHgvMjJweCBhcmlhbCxzYW5zLXNlcmlmfWh0bWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMjI7cGFkZGluZzoxNXB4fWJvZHl7bWFyZ2luOjclIGF1dG8gMDttYXgtd2lkdGg6MzkwcHg7bWluLWhlaWdodDoxODBweDtwYWRkaW5nOjMwcHggMCAxNXB4fSogPiBib2R5e2JhY2tncm91bmQ6dXJsKC8vd3d3Lmdvb2dsZS5jb20vaW1hZ2VzL2Vycm9ycy9yb2JvdC5wbmcpIDEwMCUgNXB4IG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjIwNXB4fXB7bWFyZ2luOjExcHggMCAyMnB4O292ZXJmbG93OmhpZGRlbn1pbnN7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9uZX1hIGltZ3tib3JkZXI6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc3MnB4KXtib2R5e2JhY2tncm91bmQ6bm9uZTttYXJnaW4tdG9wOjA7bWF4LXdpZHRoOm5vbmU7cGFkZGluZy1yaWdodDowfX0jbG9nb3tiYWNrZ3JvdW5kOnVybCgvL3d3dy5nb29nbGUuY29tL2ltYWdlcy9icmFuZGluZy9nb29nbGVsb2dvLzF4L2dvb2dsZWxvZ29fY29sb3JfMTUweDU0ZHAucG5nKSBuby1yZXBlYXQ7bWFyZ2luLWxlZnQ6LTVweH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjoxOTJkcGkpeyNsb2dve2JhY2tncm91bmQ6dXJsKC8vd3d3Lmdvb2dsZS5jb20vaW1hZ2VzL2JyYW5kaW5nL2dvb2dsZWxvZ28vMngvZ29vZ2xlbG9nb19jb2xvcl8xNTB4NTRkcC5wbmcpIG5vLXJlcGVhdCAwJSAwJS8xMDAlIDEwMCU7LW1vei1ib3JkZXItaW1hZ2U6dXJsKC8vd3d3Lmdvb2dsZS5jb20vaW1hZ2VzL2JyYW5kaW5nL2dvb2dsZWxvZ28vMngvZ29vZ2xlbG9nb19jb2xvcl8xNTB4NTRkcC5wbmcpIDB9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKXsjbG9nb3tiYWNrZ3JvdW5kOnVybCgvL3d3dy5nb29nbGUuY29tL2ltYWdlcy9icmFuZGluZy9nb29nbGVsb2dvLzJ4L2dvb2dsZWxvZ29fY29sb3JfMTUweDU0ZHAucG5nKSBuby1yZXBlYXQ7LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfX0jbG9nb3tkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NTRweDt3aWR0aDoxNTBweH0KICA8L3N0eWxlPgogIDxhIGhyZWY9Ly93d3cuZ29vZ2xlLmNvbS8+PHNwYW4gaWQ9bG9nbyBhcmlhLWxhYmVsPUdvb2dsZT48L3NwYW4+PC9hPgogIDxwPjxiPjQwNC48L2I+IDxpbnM+VGhhdOKAmXMgYW4gZXJyb3IuPC9pbnM+CiAgPHA+VGhlIHJlcXVlc3RlZCBVUkwgPGNvZGU+L3Byb3h5LWdvb2dsZS10ZXN0LXBvc3Q8L2NvZGU+IHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuICA8aW5zPlRoYXTigJlzIGFsbCB3ZSBrbm93LjwvaW5zPgo=", - "BodyEncoding": { - "CodePage": 65001, - "EncodingName": "Unicode (UTF-8)", - "WebName": "utf-8" - }, - "UseTransformer": false, - "Headers": { - "Date": "Wed, 27 Oct 2017 18:57:40 GMT", - "Alt-Svc": "quic=\":443\"; ma=2592000; v=\"39,38,37,35\"", - "Referrer-Policy": "no-referrer", - "Connection": "close" - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json deleted file mode 100644 index dd5018000..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "Guid": "873d495f-940e-4b86-a1f4-4f0fc7be8b8b", - "Priority": 4, - "Request": { - "Path": {}, - "Methods": [ - "get" - ] - }, - "Response": { - "StatusCode": 200, - "BodyDestination": "SameAsSource", - "Body": "NO PATH OR URL", - "UseTransformer": false, - "Headers": { - "Content-Type": "application/json" - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/BodyAsFileExample.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/BodyAsFileExample.json deleted file mode 100644 index 633db99eb..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/BodyAsFileExample.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "Request": { - "Path": { - "Matchers": [ - { - "Name": "WildcardMatcher", - "Pattern": "/bodyasfilexmltest", - "IgnoreCase": false - } - ] - }, - "Methods": [ - "get" - ] - }, - "Response": { - "StatusCode": 200, - "Headers": {"Content-Type": "application/xml"}, - "BodyAsFile": "MyXmlResponse.xml", - "UseTransformer": false - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/MyXmlResponse.xml b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/MyXmlResponse.xml deleted file mode 100644 index 24fd28d33..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/MyXmlResponse.xml +++ /dev/null @@ -1,3 +0,0 @@ - -world - \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/array.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/array.json deleted file mode 100644 index 79f338ae7..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/array.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "Title": "1", - "Request": { - "Path": { - "Matchers": [ - { - "Name": "WildcardMatcher", - "Pattern": "/mappings_static_1" - } - ] - }, - "Methods": [ - "get" - ] - }, - "Response": { - "BodyAsJson": { "result": "mappings static_1" }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Title": "2", - "Request": { - "Path": { - "Matchers": [ - { - "Name": "WildcardMatcher", - "Pattern": "/mappings_static_2" - } - ] - }, - "Methods": [ - "get" - ] - }, - "Response": { - "BodyAsJson": { "result": "mappings static_2" }, - "Headers": { - "Content-Type": "application/json" - } - } - } -] \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/wiremock-petstore-openapi3.json b/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/wiremock-petstore-openapi3.json deleted file mode 100644 index e80050758..000000000 --- a/examples/WireMock.Net.Console.NETCoreApp2/__admin/mappings/wiremock-petstore-openapi3.json +++ /dev/null @@ -1,602 +0,0 @@ -[ - { - "Guid": "9d2fde55-e420-4724-bf40-616e8aeaf53e", - "Request": { - "Path": "/pet", - "Methods": [ - "PUT" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": "example-string", - "tags": "example-string", - "status": "example-string" - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "1f7acffa-05f4-4640-bda4-4c71c8d5e6e3", - "Request": { - "Path": "/pet", - "Methods": [ - "POST" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": "example-string", - "tags": "example-string", - "status": "example-string" - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "a04ed51d-ad5b-4c69-b22f-d0eaeea18bc1", - "Request": { - "Path": "/pet/findByStatus", - "Methods": [ - "GET" - ], - "Params": [ - { - "Name": "status", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - } - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": [ - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - }, - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - }, - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - } - ], - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "8d5df48a-05fb-4861-816f-3f77adf5562f", - "Request": { - "Path": "/pet/findByTags", - "Methods": [ - "GET" - ], - "Params": [ - { - "Name": "tags", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - } - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": [ - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - }, - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - }, - { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": [ - "example-string", - "example-string", - "example-string" - ], - "tags": [ - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - }, - { - "id": 42, - "name": "example-string" - } - ], - "status": "example-string" - } - ], - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "065f790b-125c-419e-8fbd-3616bf09b142", - "Request": { - "Path": "/pet/42", - "Methods": [ - "GET" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "name": "example-string", - "category": { - "id": 42, - "name": "example-string" - }, - "photoUrls": "example-string", - "tags": "example-string", - "status": "example-string" - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "737aaddd-5bab-489d-914b-deb4ba773539", - "Request": { - "Path": "/pet/42", - "Methods": [ - "POST" - ], - "Params": [ - { - "Name": "name", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - }, - { - "Name": "status", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - } - ] - }, - "Response": { - "StatusCode": 200 - } - }, - { - "Guid": "0619896c-c3b3-4a30-903e-59792134898c", - "Request": { - "Path": "/pet/42", - "Methods": [ - "DELETE" - ] - }, - "Response": { - "StatusCode": 200 - } - }, - { - "Guid": "9aaa6a6d-ca4b-4da3-8a9a-844e3af02272", - "Request": { - "Path": "/pet/42/uploadImage", - "Methods": [ - "POST" - ], - "Params": [ - { - "Name": "additionalMetadata", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - } - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "code": 42, - "type": "example-string", - "message": "example-string" - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "085ef9c2-425d-45c2-9311-d3e4697c407f", - "Request": { - "Path": "/store/inventory", - "Methods": [ - "GET" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": {}, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "a68c50e9-418c-45e7-8340-c0426cf5b87c", - "Request": { - "Path": "/store/order", - "Methods": [ - "POST" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "petId": 42, - "quantity": 42, - "shipDate": "2020-06-16T12:54:18.885+00:00", - "status": "example-string", - "complete": true - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "16061ffc-97a5-4419-874f-66d857998f76", - "Request": { - "Path": "/store/order/42", - "Methods": [ - "GET" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "petId": 42, - "quantity": 42, - "shipDate": "2020-06-16T12:54:18.887+00:00", - "status": "example-string", - "complete": true - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "55c071d3-eeb5-4a9c-8692-486585e45e2e", - "Request": { - "Path": "/store/order/42", - "Methods": [ - "DELETE" - ] - }, - "Response": { - "StatusCode": 200 - } - }, - { - "Guid": "2d9d895d-58e9-4734-92f4-903e2b364dda", - "Request": { - "Path": "/user", - "Methods": [ - "POST" - ] - }, - "Response": { - "StatusCode": 0, - "BodyAsJson": { - "id": 42, - "username": "example-string", - "firstName": "example-string", - "lastName": "example-string", - "email": "example-string", - "password": "example-string", - "phone": "example-string", - "userStatus": 42 - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "c17eeba0-da58-4128-9ae6-33a6a31971e2", - "Request": { - "Path": "/user/createWithList", - "Methods": [ - "POST" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "username": "example-string", - "firstName": "example-string", - "lastName": "example-string", - "email": "example-string", - "password": "example-string", - "phone": "example-string", - "userStatus": 42 - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "c95da645-9449-438e-a8c8-0278ea514558", - "Request": { - "Path": "/user/login", - "Methods": [ - "GET" - ], - "Params": [ - { - "Name": "username", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - }, - { - "Name": "password", - "Matchers": [ - { - "Name": "ExactMatcher", - "Pattern": "example-string" - } - ] - } - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": "example-string", - "Headers": { - "X-Rate-Limit": "example-string", - "X-Expires-After": "example-string", - "Content-Type": "application/json" - } - } - }, - { - "Guid": "bd05033f-1189-4d89-8cdc-f681399a46b3", - "Request": { - "Path": "/user/logout", - "Methods": [ - "GET" - ] - }, - "Response": { - "StatusCode": 0 - } - }, - { - "Guid": "7c1d49d4-e9f0-49b9-b898-f8c7d55ae472", - "Request": { - "Path": "/user/example-string", - "Methods": [ - "GET" - ] - }, - "Response": { - "StatusCode": 200, - "BodyAsJson": { - "id": 42, - "username": "example-string", - "firstName": "example-string", - "lastName": "example-string", - "email": "example-string", - "password": "example-string", - "phone": "example-string", - "userStatus": 42 - }, - "Headers": { - "Content-Type": "application/json" - } - } - }, - { - "Guid": "1b7c4cd8-b251-480a-982e-c42d40dbfd4e", - "Request": { - "Path": "/user/example-string", - "Methods": [ - "PUT" - ] - }, - "Response": { - "StatusCode": 0 - } - }, - { - "Guid": "8a86e775-4bf9-490d-a52f-641458c256f7", - "Request": { - "Path": "/user/example-string", - "Methods": [ - "DELETE" - ] - }, - "Response": { - "StatusCode": 200 - } - } -] \ No newline at end of file diff --git a/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj b/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj index cf7d2988d..043a83f89 100644 --- a/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj +++ b/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj @@ -28,12 +28,12 @@ - + diff --git a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs index 5076cc2ea..52cdf45bb 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs +++ b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs @@ -533,7 +533,7 @@ public static void Run() .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") .WithHeader("xyz_{{request.headers.Postman-Token}}", "token is {{request.headers.Postman-Token}}") .WithBody(@"{""msg"": ""Hello world CATCH-ALL on /*, {{request.path}}, add={{Math.Add request.query.start.[0] 42}} bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") - .WithTransformer(TransformerType.Handlebars, true, ReplaceNodeOptions.EvaluateAndTryToConvert) + .WithTransformer(TransformerType.Handlebars, true, ReplaceNodeOptions.EvaluateAndTryToConvertShouldBeDefault) .WithDelay(TimeSpan.FromMilliseconds(100)) ); diff --git a/examples/WireMock.Net.Console.Net472.Classic/App.config b/examples/WireMock.Net.Console.Net472.Classic/App.config index f4ed63852..b52d4e9c7 100644 --- a/examples/WireMock.Net.Console.Net472.Classic/App.config +++ b/examples/WireMock.Net.Console.Net472.Classic/App.config @@ -55,11 +55,11 @@ - + - + @@ -67,7 +67,7 @@ - + diff --git a/examples/WireMock.Net.Console.Net472.Classic/WireMock.Net.Console.Net472.Classic.csproj b/examples/WireMock.Net.Console.Net472.Classic/WireMock.Net.Console.Net472.Classic.csproj index f4451462b..76191168d 100644 --- a/examples/WireMock.Net.Console.Net472.Classic/WireMock.Net.Console.Net472.Classic.csproj +++ b/examples/WireMock.Net.Console.Net472.Classic/WireMock.Net.Console.Net472.Classic.csproj @@ -49,29 +49,29 @@ ..\..\packages\Handlebars.Net.2.1.4\lib\net46\Handlebars.dll - - ..\..\packages\Handlebars.Net.Helpers.2.4.0\lib\net46\Handlebars.Net.Helpers.dll + + ..\..\packages\Handlebars.Net.Helpers.2.4.1.2\lib\net46\Handlebars.Net.Helpers.dll - - ..\..\packages\Handlebars.Net.Helpers.Core.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Core.dll + + ..\..\packages\Handlebars.Net.Helpers.Core.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Core.dll - - ..\..\packages\Handlebars.Net.Helpers.DynamicLinq.2.4.0\lib\net46\HandlebarsDotNet.Helpers.DynamicLinq.dll + + ..\..\packages\Handlebars.Net.Helpers.DynamicLinq.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.DynamicLinq.dll - - ..\..\packages\Handlebars.Net.Helpers.Humanizer.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Humanizer.dll + + ..\..\packages\Handlebars.Net.Helpers.Humanizer.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Humanizer.dll - - ..\..\packages\Handlebars.Net.Helpers.Json.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Json.dll + + ..\..\packages\Handlebars.Net.Helpers.Json.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Json.dll - - ..\..\packages\Handlebars.Net.Helpers.Random.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Random.dll + + ..\..\packages\Handlebars.Net.Helpers.Random.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Random.dll - - ..\..\packages\Handlebars.Net.Helpers.Xeger.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Xeger.dll + + ..\..\packages\Handlebars.Net.Helpers.Xeger.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Xeger.dll - - ..\..\packages\Handlebars.Net.Helpers.XPath.2.4.0\lib\net46\HandlebarsDotNet.Helpers.XPath.dll + + ..\..\packages\Handlebars.Net.Helpers.XPath.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.XPath.dll ..\..\packages\Humanizer.Core.2.14.1\lib\netstandard2.0\Humanizer.dll @@ -352,11 +352,11 @@ ..\..\packages\TinyMapper.3.0.3\lib\net40\TinyMapper.dll - - ..\..\packages\XPath2.1.1.3\lib\net452\XPath2.dll + + ..\..\packages\XPath2.1.1.4\lib\net452\XPath2.dll - - ..\..\packages\XPath2.Extensions.1.1.3\lib\net452\XPath2.Extensions.dll + + ..\..\packages\XPath2.Extensions.1.1.4\lib\net452\XPath2.Extensions.dll diff --git a/examples/WireMock.Net.Console.Net472.Classic/packages.config b/examples/WireMock.Net.Console.Net472.Classic/packages.config index ce6d332f9..cf523e010 100644 --- a/examples/WireMock.Net.Console.Net472.Classic/packages.config +++ b/examples/WireMock.Net.Console.Net472.Classic/packages.config @@ -3,14 +3,14 @@ - - - - - - - - + + + + + + + + @@ -151,6 +151,6 @@ - - + + \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs deleted file mode 100644 index 73c9e3403..000000000 --- a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Newtonsoft.Json; -using WireMock.Logging; -using WireMock.RequestBuilders; -using WireMock.ResponseBuilders; -using WireMock.Server; -using WireMock.Settings; - -namespace WireMock.Net.Console.Proxy.NETCoreApp2 -{ - class Program - { - static void Main(string[] args) - { - var server = WireMockServer.Start(new WireMockServerSettings - { - Urls = new[] { "http://localhost:9091", "https://localhost:9443" }, - StartAdminInterface = true, - ReadStaticMappings = false, - ProxyAndRecordSettings = new ProxyAndRecordSettings - { - Url = "http://postman-echo.com/post", - //ClientX509Certificate2ThumbprintOrSubjectName = "www.yourclientcertname.com OR yourcertificatethumbprint (only if the service you're proxying to requires it)", - SaveMapping = true, - SaveMappingToFile = false, - ExcludedHeaders = new[] { "dnt", "Content-Length" } - }, - Logger= new WireMockConsoleLogger() - }); - - //server.LogEntriesChanged += (sender, eventRecordArgs) => - //{ - // System.Console.WriteLine(JsonConvert.SerializeObject(eventRecordArgs.NewItems, Formatting.Indented)); - //}; - - System.Console.WriteLine("Press any key to stop the server"); - System.Console.ReadKey(); - server.Stop(); - } - } -} diff --git a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Properties/launchSettings.json b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Properties/launchSettings.json deleted file mode 100644 index 616b68b05..000000000 --- a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:63377/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "WireMock.Net.Console.Proxy.NETCoreApp2": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:63378/" - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj deleted file mode 100644 index a3a3be3cc..000000000 --- a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - Exe - netcoreapp2.1;netcoreapp3.1;net5.0 - ../../resources/WireMock.Net-Logo.ico - - - - - - - - - - - diff --git a/examples/WireMock.Net.Console.RequestLogTest/WireMock.Net.Console.RequestLogTest.csproj b/examples/WireMock.Net.Console.RequestLogTest/WireMock.Net.Console.RequestLogTest.csproj index c11086051..5bc07bc82 100644 --- a/examples/WireMock.Net.Console.RequestLogTest/WireMock.Net.Console.RequestLogTest.csproj +++ b/examples/WireMock.Net.Console.RequestLogTest/WireMock.Net.Console.RequestLogTest.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.2 + net8.0 diff --git a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj index fd80b1e16..96e8eafb5 100644 --- a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj +++ b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj @@ -79,8 +79,8 @@ - - ..\..\packages\XPath2.1.1.3\lib\net452\XPath2.dll + + ..\..\packages\XPath2.1.1.4\lib\net452\XPath2.dll diff --git a/examples/WireMock.Net.Service/packages.config b/examples/WireMock.Net.Service/packages.config index cac759f21..eed78af08 100644 --- a/examples/WireMock.Net.Service/packages.config +++ b/examples/WireMock.Net.Service/packages.config @@ -12,5 +12,5 @@ - + \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/App.cs b/examples/WireMock.Net.WebApplication.NETCore2/App.cs deleted file mode 100644 index 2575335bb..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/App.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.Extensions.Logging; - -namespace WireMock.Net.WebApplication -{ - public class App - { - private readonly IWireMockService _service; - private readonly ILogger _logger; - - public App(IWireMockService service, ILogger logger) - { - _service = service; - _logger = logger; - } - - public void Run() - { - _logger.LogInformation("WireMock.Net App running"); - _service.Run(); - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/IWireMockService.cs b/examples/WireMock.Net.WebApplication.NETCore2/IWireMockService.cs deleted file mode 100644 index de3ac175f..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/IWireMockService.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace WireMock.Net.WebApplication -{ - public interface IWireMockService - { - void Run(); - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/Program.cs b/examples/WireMock.Net.WebApplication.NETCore2/Program.cs deleted file mode 100644 index ad5f0b2f6..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/Program.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using WireMock.Settings; - -namespace WireMock.Net.WebApplication -{ - public class Program - { - public static void Main(string[] args) - { - // Create service collection - var serviceCollection = new ServiceCollection(); - ConfigureServices(serviceCollection); - - // Create service provider - var serviceProvider = serviceCollection.BuildServiceProvider(); - - // Run app - serviceProvider.GetService().Run(); - } - - private static void ConfigureServices(IServiceCollection serviceCollection) - { - // Build configuration - var configuration = new ConfigurationBuilder() - .SetBasePath(AppContext.BaseDirectory) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables() // <-- this is needed to to override settings via the Azure Portal App Settings - .Build(); - - // Add LoggerFactory - var factory = new LoggerFactory(); - serviceCollection.AddSingleton(factory - .AddConsole(configuration.GetSection("Logging")) - .AddDebug() - .AddAzureWebAppDiagnostics() - ); - - serviceCollection.AddSingleton(factory.CreateLogger("WireMock.Net Logger")); - - // Add access to generic IConfigurationRoot - serviceCollection.AddSingleton(configuration); - - // Add access to WireMockServerSettings - var settings = configuration.GetSection("WireMockServerSettings").Get(); - serviceCollection.AddSingleton(settings); - - // Add services - serviceCollection.AddTransient(); - - // Add app - serviceCollection.AddTransient(); - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/Properties/launchSettings.json b/examples/WireMock.Net.WebApplication.NETCore2/Properties/launchSettings.json deleted file mode 100644 index 1ff6dab6a..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/Properties/launchSettings.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:60097/", - "sslPort": 44321 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchUrl": "__admin/settings", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "WireMock.Net.WebApplication": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "__admin/settings", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:56514/" - }, - "IIS": { - "commandName": "IIS", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "development" - } - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/WireMock.Net.WebApplication.NETCore2.csproj b/examples/WireMock.Net.WebApplication.NETCore2/WireMock.Net.WebApplication.NETCore2.csproj deleted file mode 100644 index 2379ea6fb..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/WireMock.Net.WebApplication.NETCore2.csproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - netcoreapp2.1 - win10-x64 - WireMock.Net.WebApplication.Program - WireMock.Net.WebApplication - WireMock.Net.WebApplication - efcf4a18-fd7c-4622-825d-336d65290599 - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - - \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/WireMockService.cs b/examples/WireMock.Net.WebApplication.NETCore2/WireMockService.cs deleted file mode 100644 index 4aa28e142..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/WireMockService.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Threading; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using WireMock.Admin.Requests; -using WireMock.Logging; -using WireMock.Server; -using WireMock.Settings; - -namespace WireMock.Net.WebApplication -{ - public class WireMockService : IWireMockService - { - private static int sleepTime = 30000; - - private readonly ILogger _logger; - private readonly WireMockServerSettings _settings; - - private class Logger : IWireMockLogger - { - private readonly ILogger _logger; - - public Logger(ILogger logger) - { - _logger = logger; - } - - public void Debug(string formatString, params object[] args) - { - _logger.LogDebug(formatString, args); - } - - public void Info(string formatString, params object[] args) - { - _logger.LogInformation(formatString, args); - } - - public void Warn(string formatString, params object[] args) - { - _logger.LogWarning(formatString, args); - } - - public void Error(string formatString, params object[] args) - { - _logger.LogError(formatString, args); - } - - public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminrequest) - { - string message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented); - _logger.LogDebug("Admin[{0}] {1}", isAdminrequest, message); - } - - public void Error(string formatString, Exception exception) - { - _logger.LogError(formatString, exception.Message); - } - } - - public WireMockService(ILogger logger, WireMockServerSettings settings) - { - _logger = logger; - _settings = settings; - - _settings.Logger = new Logger(logger); - } - - public void Run() - { - _logger.LogInformation("WireMock.Net server starting"); - - WireMockServer.Start(_settings); - - _logger.LogInformation($"WireMock.Net server settings {JsonConvert.SerializeObject(_settings)}"); - - while (true) - { - _logger.LogInformation("WireMock.Net server running"); - Thread.Sleep(sleepTime); - } - } - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/appsettings.json b/examples/WireMock.Net.WebApplication.NETCore2/appsettings.json deleted file mode 100644 index 4b33bb6af..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/appsettings.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "Debug": { - "LogLevel": { - "Default": "Debug" - } - }, - "Console": { - "LogLevel": { - "Default": "Debug" - } - } - }, - "WireMockServerSettings": { - "AdminUsername": "a", - "AdminPassword": "b", - "StartAdminInterface": true - } -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/libman.json b/examples/WireMock.Net.WebApplication.NETCore2/libman.json deleted file mode 100644 index b0b3b9a4e..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/libman.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0", - "defaultProvider": "cdnjs", - "libraries": [] -} \ No newline at end of file diff --git a/examples/WireMock.Net.WebApplication.NETCore2/readme.md b/examples/WireMock.Net.WebApplication.NETCore2/readme.md deleted file mode 100644 index 00ebec628..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# Running in IIS - -Follow these links / steps: -* https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS -* https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/development-time-iis-support?view=aspnetcore-2.1 -* Create a `web.config` file - -## IIS Sites -![IIS Multiple](resources/iis-wiremock1and2.png) - -## App Pool settings -![IIS Multiple](resources/iis-apppool.png) - -## Publish Profiles -Two example publish profiles are created: -* [IIS Localhost 1](./Properties/PublishProfiles/IIS%20Localhost%201.pubxml) -* [IIS Localhost 2](./Properties/PublishProfiles/IIS%20Localhost%202.pubxml) - -## Debugging -Select the debug "IIS" if you want to debug in IIS. -![IIS Debug](resources/iis-debug.png) diff --git a/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-apppool.png b/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-apppool.png deleted file mode 100644 index 119df1950067844e4e04019790b555397a3403ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8063 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 diff --git a/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-debug.png b/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-debug.png deleted file mode 100644 index 0aa1936f2634c22cc7307827e1e4f957fd10cc4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37367 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 MX96zOy?W<=0XQ!%ssI20 diff --git a/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-wiremock1and2.png b/examples/WireMock.Net.WebApplication.NETCore2/resources/iis-wiremock1and2.png deleted file mode 100644 index 6d50b12ddc0c45aa1398678b0c1c4ab440cacef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14103 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 diff --git a/examples/WireMock.Net.WebApplication.NETCore2/web.config b/examples/WireMock.Net.WebApplication.NETCore2/web.config deleted file mode 100644 index d2f21cf22..000000000 --- a/examples/WireMock.Net.WebApplication.NETCore2/web.config +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs index 0b1803c86..f87495783 100644 --- a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs +++ b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs @@ -8,7 +8,7 @@ public enum ReplaceNodeOptions ///

/// Try to evaluate a templated value. /// In case this is valid, return the value and if the value can be converted to a supported (primitive) type, use that value. - /// + /// /// [Default behaviour] /// EvaluateAndTryToConvert = 0, @@ -17,5 +17,5 @@ public enum ReplaceNodeOptions /// Parse templated string to a templated string. /// For example: keep a templated string value (which is always the case) as a string value. /// - EvaluateAndKeep = 1 + Evaluate = 1 } \ No newline at end of file diff --git a/src/WireMock.Net/Serialization/WebhookMapper.cs b/src/WireMock.Net/Serialization/WebhookMapper.cs index 9575bc31c..557f05dbf 100644 --- a/src/WireMock.Net/Serialization/WebhookMapper.cs +++ b/src/WireMock.Net/Serialization/WebhookMapper.cs @@ -39,7 +39,7 @@ public static IWebhook Map(WebhookModel model) if (!Enum.TryParse(model.Request.TransformerReplaceNodeOptions, out var option)) { - option = ReplaceNodeOptions.EvaluateAndKeep; + option = ReplaceNodeOptions.EvaluateAndTryToConvert; } webhook.Request.TransformerReplaceNodeOptions = option; } diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index 207acd899..9bea29a6e 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -321,7 +321,7 @@ private static JToken ParseAsJObject(string stringValue) private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeOptions options, object value) { - if (options == ReplaceNodeOptions.EvaluateAndKeep) + if (options == ReplaceNodeOptions.Evaluate) { return (false, value); } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs index 3ee06bc1c..cac2572e9 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs @@ -31,7 +31,7 @@ public ResponseWithHandlebarsDateTimeTests() [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] - [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)] public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeYear(ReplaceNodeOptions options, JTokenType expected) { // Assign @@ -55,7 +55,7 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Date)] - [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)] public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTime(ReplaceNodeOptions options, JTokenType expected) { // Assign @@ -78,7 +78,7 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] - [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)] public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeWithStringFormat(ReplaceNodeOptions options, JTokenType expected) { // Assign diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs index a07e42c54..6492f5994 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs @@ -79,7 +79,7 @@ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Boolean() [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Integer)] - [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)] public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(ReplaceNodeOptions options, JTokenType expected) { // Assign @@ -102,7 +102,7 @@ public async Task Response_ProvideResponseAsync_Handlebars_Random1_Integer(Repla [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Guid)] - [InlineData(ReplaceNodeOptions.EvaluateAndKeep, JTokenType.String)] + [InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)] public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid(ReplaceNodeOptions options, JTokenType expected) { // Assign diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs index 10e80bede..d5a4dc262 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -500,34 +500,6 @@ public async Task Response_ProvideResponse_Transformer_ResultAsJArray(Transforme 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\"")] @@ -543,7 +515,7 @@ public async Task Response_ProvideResponse_Transformer_ResultAsJArray(Transforme [InlineData(TransformerType.Handlebars, "2147483647", "2147483647")] [InlineData(TransformerType.Handlebars, "\"9223372036854775807\"", "\"9223372036854775807\"")] [InlineData(TransformerType.Handlebars, "9223372036854775807", "9223372036854775807")] - public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_ReplaceNodeOptionsKeep(TransformerType transformerType, string value, string expected) + public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_ReplaceNodeOptionsEvaluate(TransformerType transformerType, string value, string expected) { string jsonString = $"{{ \"x\": {value} }}"; var bodyData = new BodyData @@ -556,7 +528,7 @@ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_And_Replac var responseBuilder = Response.Create() .WithBodyAsJson(new { text = "{{request.bodyAsJson.x}}" }) - .WithTransformer(transformerType, false, ReplaceNodeOptions.EvaluateAndTryToConvert); + .WithTransformer(transformerType, false, ReplaceNodeOptions.Evaluate); // Act var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); diff --git a/test/WireMock.Net.Tests/Serialization/MappingConverterTests.ToMappingModel_WithPriority_ReturnsPriority.verified.txt b/test/WireMock.Net.Tests/Serialization/MappingConverterTests.ToMappingModel_WithPriority_ReturnsPriority.verified.txt index 8c23c1f92..8b59422a8 100644 --- a/test/WireMock.Net.Tests/Serialization/MappingConverterTests.ToMappingModel_WithPriority_ReturnsPriority.verified.txt +++ b/test/WireMock.Net.Tests/Serialization/MappingConverterTests.ToMappingModel_WithPriority_ReturnsPriority.verified.txt @@ -11,7 +11,7 @@ }, UseTransformer: true, TransformerType: Handlebars, - TransformerReplaceNodeOptions: Evaluate + TransformerReplaceNodeOptions: EvaluateAndTryToConvert }, UseWebhooksFireAndForget: false } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/Serialization/WebhookMapperTests.WebhookMapper_Map_WebhookModel_BodyAsString_And_UseTransformerIsTrue.verified.txt b/test/WireMock.Net.Tests/Serialization/WebhookMapperTests.WebhookMapper_Map_WebhookModel_BodyAsString_And_UseTransformerIsTrue.verified.txt index a05372321..8793295e8 100644 --- a/test/WireMock.Net.Tests/Serialization/WebhookMapperTests.WebhookMapper_Map_WebhookModel_BodyAsString_And_UseTransformerIsTrue.verified.txt +++ b/test/WireMock.Net.Tests/Serialization/WebhookMapperTests.WebhookMapper_Map_WebhookModel_BodyAsString_And_UseTransformerIsTrue.verified.txt @@ -12,7 +12,6 @@ DetectedBodyType: String, DetectedBodyTypeFromContentType: Bytes }, - UseTransformer: true, - TransformerReplaceNodeOptions: Evaluate + UseTransformer: true } } \ No newline at end of file From d6e93cb1741a259384671566dbd51f6ca32e33c6 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 9 Dec 2023 17:02:11 +0100 Subject: [PATCH 03/11] EvaluateAndKeep = Evaluate --- src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs index f87495783..40960016e 100644 --- a/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs +++ b/src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs @@ -17,5 +17,6 @@ public enum ReplaceNodeOptions /// Parse templated string to a templated string. /// For example: keep a templated string value (which is always the case) as a string value. /// - Evaluate = 1 + Evaluate = 1, + EvaluateAndKeep = Evaluate } \ No newline at end of file From bd5ef04704cee2cdbb8f50ca69f0905e9ad0c8f7 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 9 Dec 2023 17:43:42 +0100 Subject: [PATCH 04/11] fix? --- src/WireMock.Net/Transformers/Transformer.cs | 21 +-- src/WireMock.Net/Util/StringUtils.cs | 36 ++++ .../Util/StringUtilsTests.cs | 173 ++++++++++++++++++ 3 files changed, 210 insertions(+), 20 deletions(-) diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index 9bea29a6e..760c3a8c5 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -12,18 +12,6 @@ namespace WireMock.Transformers; internal class Transformer : ITransformer { - private static readonly Func[] ConversionsFunctions = - { - s => bool.TryParse(s, out var result) ? (true, result) : (false, s), - s => int.TryParse(s, out var result) ? (true, result) : (false, s), - s => long.TryParse(s, out var result) ? (true, result) : (false, s), - s => double.TryParse(s, out var result) ? (true, result) : (false, s), - s => Guid.TryParse(s, out var result) ? (true, result) : (false, s), - s => DateTime.TryParse(s, out var result) ? (true, result) : (false, s), - s => TimeSpan.TryParse(s, out var result) ? (true, result) : (false, s), - s => Uri.TryCreate(s, UriKind.Absolute, out var result) ? (true, result) : (false, s) - }; - private readonly JsonSerializer _jsonSerializer; private readonly ITransformerContextFactory _factory; @@ -328,14 +316,7 @@ private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeO if (value is string transformedString) { - foreach (var func in ConversionsFunctions) - { - var (isConverted, convertedValue) = func(transformedString); - if (isConverted) - { - return (true, convertedValue); - } - } + return StringUtils.TryConvertToKnownType(transformedString); } return (false, value); diff --git a/src/WireMock.Net/Util/StringUtils.cs b/src/WireMock.Net/Util/StringUtils.cs index 161c4aac2..95ebc760d 100644 --- a/src/WireMock.Net/Util/StringUtils.cs +++ b/src/WireMock.Net/Util/StringUtils.cs @@ -8,6 +8,42 @@ namespace WireMock.Util; internal static class StringUtils { + private static readonly Func[] ConversionsFunctions = + { + s => bool.TryParse(s, out var result) ? (true, result) : (false, s), + s => int.TryParse(s, out var result) ? (true, result) : (false, s), + s => long.TryParse(s, out var result) ? (true, result) : (false, s), + s => double.TryParse(s, out var result) ? (true, result) : (false, s), + s => Guid.TryParse(s, out var result) ? (true, result) : (false, s), + s => TimeSpan.TryParse(s, out var result) ? (true, result) : (false, s), + s => DateTime.TryParse(s, out var result) ? (true, result) : (false, s), + s => + { + try + { + return (true, new Uri(s)); + } + catch + { + return (false, s); + } + } + }; + + public static (bool IsConverted, object ConvertedValue) TryConvertToKnownType(string value) + { + foreach (var func in ConversionsFunctions) + { + var result = func(value); + if (result.IsConverted) + { + return result; + } + } + + return (false, value); + } + public static MatchOperator ParseMatchOperator(string? value) { return value != null && Enum.TryParse(value, out var matchOperator) diff --git a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs index 657dd369f..a31ede0fd 100644 --- a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs +++ b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs @@ -1,3 +1,5 @@ +using System; +using CultureAwareTesting.xUnit; using FluentAssertions; using WireMock.Matchers; using WireMock.Util; @@ -7,6 +9,177 @@ namespace WireMock.Net.Tests.Util; public class StringUtilsTests { + [Theory] + [InlineData("", "")] + [InlineData("x", "x")] + public void TryConvertToString_ShouldWorkCorrectly(string input, string expectedValue) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(false); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Be(expectedValue); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("true", true, true)] + [InlineData("false", false, true)] + [InlineData("not a bool", false, false)] // Invalid case + public void TryConvertToBool_ShouldWorkCorrectly(string input, bool expectedValue, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Be(expectedValue); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("123", 123, true)] + [InlineData("-456", -456, true)] + [InlineData("not an int", 0, false)] // Invalid case + public void TryConvertToInt_ShouldWorkCorrectly(string input, int expectedValue, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Be(expectedValue); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("12345678901", 12345678901L, true)] + [InlineData("-9876543210", -9876543210L, true)] + [InlineData("not a long", 0L, false)] // Invalid case + public void TryConvertToLong_ShouldWorkCorrectly(string input, long expectedValue, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Be(expectedValue); + } + else + { + convertedValue.Should().Be(input); + } + } + + [CulturedTheory("en-US")] + [InlineData("123.1", 123.1, true)] + [InlineData("-456.1", -456.1, true)] + [InlineData("not a double", 0.0, false)] // Invalid case + public void TryConvertToDouble_ShouldWorkCorrectly(string input, double expectedValue, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + ((double) convertedValue).Should().BeApproximately(expectedValue, 0.01); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("3F2504E0-4F89-11D3-9A0C-0305E82C3301", true)] + [InlineData("00000000-0000-0000-0000-000000000000", true)] + [InlineData("3f2504e0-4f89-11d3-9a0c-0305e82c3301", true)] // Lowercase Guid + [InlineData("not a guid", false)] // Invalid case + public void TryConvertToGuid_ShouldWorkCorrectly(string input, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType(); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("2023-04-01", true)] + [InlineData("01/01/2000", true)] + [InlineData("not a date", false)] // Invalid case + public void TryConvertToDateTime_ShouldWorkCorrectly(string input, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Subject.As().Date.Should().Be(DateTime.Parse(input).Date); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("1.00:00:00", true)] // 1 day + [InlineData("00:30:00", true)] // 30 minutes + [InlineData("not a timespan", false)] // Invalid case + public void TryConvertToTimeSpan_ShouldWorkCorrectly(string input, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Subject.As().Should().Be(TimeSpan.Parse(input)); + } + else + { + convertedValue.Should().Be(input); + } + } + + [Theory] + [InlineData("http://example.com", true)] + [InlineData("https://example.com/path?query=string#fragment", true)] + [InlineData("not a uri", false)] // Invalid case + public void TryConvertToUri_ShouldWorkCorrectly(string input, bool expectedConversion) + { + var (isConverted, convertedValue) = StringUtils.TryConvertToKnownType(input); + + isConverted.Should().Be(expectedConversion); + if (isConverted) + { + convertedValue.Should().BeOfType().And.Subject.As().AbsoluteUri.Should().Be(new Uri(input).AbsoluteUri); + } + else + { + convertedValue.Should().Be(input); + } + } + [Theory] [InlineData("And", MatchOperator.And)] [InlineData("Or", MatchOperator.Or)] From ac4b64801ac3c97b4cd773d355fd690d2bb337f4 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 9 Dec 2023 18:14:19 +0100 Subject: [PATCH 05/11] linux --- src/WireMock.Net/Util/StringUtils.cs | 18 ++++++++++++------ .../Util/StringUtilsTests.cs | 2 ++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/WireMock.Net/Util/StringUtils.cs b/src/WireMock.Net/Util/StringUtils.cs index 95ebc760d..586781d76 100644 --- a/src/WireMock.Net/Util/StringUtils.cs +++ b/src/WireMock.Net/Util/StringUtils.cs @@ -8,6 +8,13 @@ namespace WireMock.Util; internal static class StringUtils { + private static readonly string[] ValidUriSchemes = + { + "ftp://", + "http://", + "https://" + }; + private static readonly Func[] ConversionsFunctions = { s => bool.TryParse(s, out var result) ? (true, result) : (false, s), @@ -19,14 +26,13 @@ internal static class StringUtils s => DateTime.TryParse(s, out var result) ? (true, result) : (false, s), s => { - try + if (ValidUriSchemes.Any(u => s.StartsWith(u, StringComparison.OrdinalIgnoreCase)) && + Uri.TryCreate(s, UriKind.RelativeOrAbsolute, out var uri)) { - return (true, new Uri(s)); - } - catch - { - return (false, s); + return (true, uri); } + + return (false, s); } }; diff --git a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs index a31ede0fd..375924fc7 100644 --- a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs +++ b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs @@ -164,6 +164,8 @@ public void TryConvertToTimeSpan_ShouldWorkCorrectly(string input, bool expected [Theory] [InlineData("http://example.com", true)] [InlineData("https://example.com/path?query=string#fragment", true)] + [InlineData("ftp://example.com", true)] + [InlineData("file://example.com", false)] [InlineData("not a uri", false)] // Invalid case public void TryConvertToUri_ShouldWorkCorrectly(string input, bool expectedConversion) { From bc312d08bf28cf865b60e77a1db0317416d2b4da Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 10 Dec 2023 09:59:35 +0100 Subject: [PATCH 06/11] _ --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78343e0fe..069d2a579 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ + # 1.5.42 (09 December 2023) - [#1023](https://github.com/WireMock-Net/WireMock.Net/pull/1023) - Fix Mapping[] for WireMock.Org REST API [bug] contributed by [StefH](https://github.com/StefH) - [#1029](https://github.com/WireMock-Net/WireMock.Net/pull/1029) - Add ResponseWithHandlebarsDateTimeTests [test] contributed by [StefH](https://github.com/StefH) From 25f64ccc392a7252175ac2e2daf8fbd197268df9 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 11 Dec 2023 17:17:06 +0100 Subject: [PATCH 07/11] tt --- src/WireMock.Net/Transformers/Transformer.cs | 14 +++++++++-- src/WireMock.Net/WireMock.Net.csproj | 14 +++++------ .../ResponseWithHandlebarsDateTimeTests.cs | 23 +++++++++++++++++++ 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index 760c3a8c5..18612c452 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using HandlebarsDotNet.Helpers.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Stef.Validation; @@ -309,14 +310,23 @@ private static JToken ParseAsJObject(string stringValue) private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeOptions options, object value) { + var valueAsString = value as string; + if (options == ReplaceNodeOptions.Evaluate) { + if (valueAsString != null && StringEncoder.TryDecode(valueAsString, out var decoded)) + { + return (true, decoded); + } + return (false, value); } - if (value is string transformedString) + if (valueAsString != null) { - return StringUtils.TryConvertToKnownType(transformedString); + return StringEncoder.TryDecode(valueAsString, out var decoded) ? + (true, decoded) : + StringUtils.TryConvertToKnownType(valueAsString); } return (false, value); diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 895c5acf4..15102fc83 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -189,13 +189,13 @@
- - - - - - - + + + + + + + diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs index cac2572e9..df8124f2f 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs @@ -115,4 +115,27 @@ public async Task Response_WithBody_ProvideResponseAsync_Handlebars_DateTime() // Assert response.Message.BodyData!.BodyAsString.Should().Contain($"DateTimeYear = \"{DateTime.Now.Year}\""); } + + [Theory] + [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert)] + [InlineData(ReplaceNodeOptions.Evaluate)] + public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeWithStringFormatAsString(ReplaceNodeOptions options) + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + FormatAsString = "{{ String.FormatAsString (DateTime.UtcNow) \"yyMMddhhmmss\" }}" + }) + .WithTransformer(options); + + // Act + var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false); + + // Assert + var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); + jObject["FormatAsString"]!.Type.Should().Be(JTokenType.String); + } } \ No newline at end of file From 87571ddb5d4f2c28a36cc17ac8260f66323c2c13 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 15 Dec 2023 07:53:06 +0000 Subject: [PATCH 08/11] xxx --- .../Transformers/Handlebars/HandlebarsContext.cs | 9 ++++++++- src/WireMock.Net/Transformers/Transformer.cs | 4 ++-- src/WireMock.Net/WireMock.Net.csproj | 14 +++++++------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs index d84a40a09..e8773727d 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs @@ -20,7 +20,14 @@ public HandlebarsContext(IHandlebars handlebars, IFileSystemHandler fileSystemHa public string ParseAndRender(string text, object model) { var template = Handlebars.Compile(text); - return template(model); + var text = template(model); + + if (WrappedString.TryDecode(text, out var decoded)) + { + return (true, decoded); + } + + return text; } public object? ParseAndEvaluate(string text, object model) diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index 18612c452..f8d47d1fc 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -314,7 +314,7 @@ private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeO if (options == ReplaceNodeOptions.Evaluate) { - if (valueAsString != null && StringEncoder.TryDecode(valueAsString, out var decoded)) + if (valueAsString != null && WrappedString.TryDecode(valueAsString, out var decoded)) { return (true, decoded); } @@ -324,7 +324,7 @@ private static (bool IsConverted, object ConvertedValue) TryConvert(ReplaceNodeO if (valueAsString != null) { - return StringEncoder.TryDecode(valueAsString, out var decoded) ? + return WrappedString.TryDecode(valueAsString, out var decoded) ? (true, decoded) : StringUtils.TryConvertToKnownType(valueAsString); } diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 15102fc83..506f9f526 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -189,13 +189,13 @@ - - - - - - - + + + + + + + From 33131f85a50f58da1eb5639d2d3044c6495572df Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 15 Dec 2023 16:40:02 +0100 Subject: [PATCH 09/11] fx --- examples/WireMock.Net.Console.Net452.Classic/MainApp.cs | 2 +- .../Transformers/Handlebars/HandlebarsContext.cs | 9 +-------- src/WireMock.Net/WireMock.Net.csproj | 4 ++-- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs index afc5b0df8..f5949bc6e 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs +++ b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs @@ -550,7 +550,7 @@ public static void Run() .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") .WithHeader("xyz_{{request.headers.Postman-Token}}", "token is {{request.headers.Postman-Token}}") .WithBody(@"{""msg"": ""Hello world CATCH-ALL on /*, {{request.path}}, add={{Math.Add request.query.start.[0] 42}} bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") - .WithTransformer(TransformerType.Handlebars, true, ReplaceNodeOptions.EvaluateAndTryToConvertShouldBeDefault) + .WithTransformer(TransformerType.Handlebars, true, ReplaceNodeOptions.EvaluateAndTryToConvert) .WithDelay(TimeSpan.FromMilliseconds(100)) ); diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs index e8773727d..d84a40a09 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs @@ -20,14 +20,7 @@ public HandlebarsContext(IHandlebars handlebars, IFileSystemHandler fileSystemHa public string ParseAndRender(string text, object model) { var template = Handlebars.Compile(text); - var text = template(model); - - if (WrappedString.TryDecode(text, out var decoded)) - { - return (true, decoded); - } - - return text; + return template(model); } public object? ParseAndEvaluate(string text, object model) diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 506f9f526..8be039114 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -190,8 +190,8 @@ - - + + From 35b0bdceb042bb2006dbe098beb55344948eb149 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Wed, 20 Dec 2023 17:41:03 +0100 Subject: [PATCH 10/11] x --- src/WireMock.Net/WireMock.Net.csproj | 14 +++++++------- .../ResponseWithHandlebarsDateTimeTests.cs | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 8be039114..2f60036e9 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -189,13 +189,13 @@ - - - - - - - + + + + + + + diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs index df8124f2f..9ccac0574 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs @@ -127,7 +127,10 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi var responseBuilder = Response.Create() .WithBodyAsJson(new { - FormatAsString = "{{ String.FormatAsString (DateTime.UtcNow) \"yyMMddhhmmss\" }}" + FormatAsString1 = "{{ String.FormatAsString (DateTime.UtcNow) \"yyMMddhhmmss\" }}", + FormatAsString2 = "{{ String.FormatAsString (DateTime.UtcNow) }}", + FormatAsString3 = "{{ String.FormatAsString (42) \"X\" }}", + FormatAsString4 = "{{ String.FormatAsString (42) }}" }) .WithTransformer(options); @@ -136,6 +139,15 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi // Assert var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!); - jObject["FormatAsString"]!.Type.Should().Be(JTokenType.String); + jObject["FormatAsString1"]!.Type.Should().Be(JTokenType.String); + jObject["FormatAsString2"]!.Type.Should().Be(JTokenType.String); + + var formatAsString3 = jObject["FormatAsString3"]!; + formatAsString3.Type.Should().Be(JTokenType.String); + formatAsString3.Value().Should().Be("AA"); + + var formatAsString4 = jObject["FormatAsString4"]!; + formatAsString4.Type.Should().Be(JTokenType.String); + formatAsString4.Value().Should().Be("42"); } } \ No newline at end of file From e103c18cae2c2a9300a0294a8984e28b52983fe7 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Wed, 20 Dec 2023 20:26:12 +0100 Subject: [PATCH 11/11] fix test --- src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs | 1 - .../ResponseWithHandlebarsDateTimeTests.cs | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs index ae91756ad..8bb6e92ef 100644 --- a/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs +++ b/src/WireMock.Net/RequestBuilders/IBodyRequestBuilder.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using JsonConverter.Abstractions; using WireMock.Matchers; -using WireMock.Matchers.Request; using WireMock.Util; namespace WireMock.RequestBuilders; diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs index 9ccac0574..22f919cf3 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsDateTimeTests.cs @@ -119,7 +119,7 @@ public async Task Response_WithBody_ProvideResponseAsync_Handlebars_DateTime() [Theory] [InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert)] [InlineData(ReplaceNodeOptions.Evaluate)] - public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTimeWithStringFormatAsString(ReplaceNodeOptions options) + public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_WithStringFormatAsString(ReplaceNodeOptions options) { // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); @@ -129,8 +129,8 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi { FormatAsString1 = "{{ String.FormatAsString (DateTime.UtcNow) \"yyMMddhhmmss\" }}", FormatAsString2 = "{{ String.FormatAsString (DateTime.UtcNow) }}", - FormatAsString3 = "{{ String.FormatAsString (42) \"X\" }}", - FormatAsString4 = "{{ String.FormatAsString (42) }}" + FormatAsString3 = "{{ String.FormatAsString 42 \"X\" }}", + FormatAsString4 = "{{ String.FormatAsString 42 }}" }) .WithTransformer(options); @@ -144,7 +144,7 @@ public async Task Response_WithBodyAsJson_ProvideResponseAsync_Handlebars_DateTi var formatAsString3 = jObject["FormatAsString3"]!; formatAsString3.Type.Should().Be(JTokenType.String); - formatAsString3.Value().Should().Be("AA"); + formatAsString3.Value().Should().Be("2A"); var formatAsString4 = jObject["FormatAsString4"]!; formatAsString4.Type.Should().Be(JTokenType.String);