From b62712ae2052ee6cbc93f109d6d81654ca14bcde Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 29 Jan 2021 18:05:00 +0000 Subject: [PATCH 01/13] wip --- WireMock.Net Solution.sln | 61 +++- .../MainApp.cs | 2 +- src/WireMock.Net/Proxy/ProxyHelper.cs | 11 +- .../Transformers/Handlebars/FileHelpers.cs | 61 ++++ .../Handlebars/HandlebarsContext.cs | 21 +- .../Transformers/Handlebars/HandlebarsFile.cs | 41 --- .../Handlebars/WireMockHandlebarsHelpers.cs | 66 +++-- src/WireMock.Net/Transformers/Transformer.cs | 2 +- src/WireMock.Net/WireMock.Net.csproj | 272 +++++++++--------- .../ResponseWithHandlebarsRegexTests.cs | 4 +- .../ResponseWithHandlebarsXegerTests.cs | 8 +- 11 files changed, 329 insertions(+), 220 deletions(-) create mode 100644 src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsFile.cs diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index 0d20008cb..11c7911e6 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -78,7 +78,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-WireMock", "src\dotn EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NET5", "examples\WireMock.Net.Console.NET5\WireMock.Net.Console.NET5.csproj", "{3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Matchers.CSharpCode", "src\WireMock.Net.Matchers.CSharpCode\WireMock.Net.Matchers.CSharpCode.csproj", "{6437CE56-8AB9-4D6D-90F1-70CC5BBE1572}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Matchers.CSharpCode", "src\WireMock.Net.Matchers.CSharpCode\WireMock.Net.Matchers.CSharpCode.csproj", "{B6269AAC-170A-4346-8B9A-444DED3D9A44}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Core", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Core\Handlebars.Net.Helpers.Core.csproj", "{7CBD113C-A754-480B-B0D0-AA9DF734F612}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers\Handlebars.Net.Helpers.csproj", "{FD1CF989-3F17-4F38-A5F4-EDECC647D237}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Json", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Json\Handlebars.Net.Helpers.Json.csproj", "{181B9A96-5662-44AA-8685-E68E1263125A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.DynamicLinq", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.DynamicLinq\Handlebars.Net.Helpers.DynamicLinq.csproj", "{181B9A96-5662-BBAA-5678-BB8E1263125A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Random", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Random\Handlebars.Net.Helpers.Random.csproj", "{2A78B30D-D61C-4FEB-4567-2EC9AE84693B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Xeger", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Xeger\Handlebars.Net.Helpers.Xeger.csproj", "{2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.XPath", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.XPath\Handlebars.Net.Helpers.XPath.csproj", "{42D47A7E-EF66-477D-A524-45EEC130EA67}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -194,10 +208,38 @@ Global {3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8}.Release|Any CPU.Build.0 = Release|Any CPU - {6437CE56-8AB9-4D6D-90F1-70CC5BBE1572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6437CE56-8AB9-4D6D-90F1-70CC5BBE1572}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6437CE56-8AB9-4D6D-90F1-70CC5BBE1572}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6437CE56-8AB9-4D6D-90F1-70CC5BBE1572}.Release|Any CPU.Build.0 = Release|Any CPU + {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Release|Any CPU.Build.0 = Release|Any CPU + {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Release|Any CPU.Build.0 = Release|Any CPU + {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Release|Any CPU.Build.0 = Release|Any CPU + {181B9A96-5662-44AA-8685-E68E1263125A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {181B9A96-5662-44AA-8685-E68E1263125A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {181B9A96-5662-44AA-8685-E68E1263125A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {181B9A96-5662-44AA-8685-E68E1263125A}.Release|Any CPU.Build.0 = Release|Any CPU + {181B9A96-5662-BBAA-5678-BB8E1263125A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {181B9A96-5662-BBAA-5678-BB8E1263125A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {181B9A96-5662-BBAA-5678-BB8E1263125A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {181B9A96-5662-BBAA-5678-BB8E1263125A}.Release|Any CPU.Build.0 = Release|Any CPU + {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Release|Any CPU.Build.0 = Release|Any CPU + {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Release|Any CPU.Build.0 = Release|Any CPU + {42D47A7E-EF66-477D-A524-45EEC130EA67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42D47A7E-EF66-477D-A524-45EEC130EA67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42D47A7E-EF66-477D-A524-45EEC130EA67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42D47A7E-EF66-477D-A524-45EEC130EA67}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -230,7 +272,14 @@ Global {925E421A-1B3F-4202-B48F-734743573A4B} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {40BF24B5-12E6-4610-9489-138798632E28} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8} = {985E0ADB-D4B4-473A-AA40-567E279B7946} - {6437CE56-8AB9-4D6D-90F1-70CC5BBE1572} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {B6269AAC-170A-4346-8B9A-444DED3D9A44} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {7CBD113C-A754-480B-B0D0-AA9DF734F612} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {FD1CF989-3F17-4F38-A5F4-EDECC647D237} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {181B9A96-5662-44AA-8685-E68E1263125A} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {181B9A96-5662-BBAA-5678-BB8E1263125A} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {2A78B30D-D61C-4FEB-4567-2EC9AE84693B} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} + {42D47A7E-EF66-477D-A524-45EEC130EA67} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458} diff --git a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs index 78f00afbe..40b08f0c9 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs +++ b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs @@ -64,7 +64,7 @@ public static void Run() HandlebarsRegistrationCallback = (handlebarsContext, fileSystemHandler) => { var transformer = new CustomNameTransformer(); - handlebarsContext.RegisterHelper(transformer.Name, transformer.Render); + // handlebarsContext.RegisterHelper(transformer.Name, transformer.Render); TODO }, // Uncomment below if you want to use the CustomFileSystemFileHandler diff --git a/src/WireMock.Net/Proxy/ProxyHelper.cs b/src/WireMock.Net/Proxy/ProxyHelper.cs index d4410f21e..f88852408 100644 --- a/src/WireMock.Net/Proxy/ProxyHelper.cs +++ b/src/WireMock.Net/Proxy/ProxyHelper.cs @@ -12,7 +12,8 @@ using WireMock.Settings; using WireMock.Types; using WireMock.Util; - +using WireMock.Validation; + namespace WireMock.Proxy { internal class ProxyHelper @@ -21,7 +22,7 @@ internal class ProxyHelper public ProxyHelper([NotNull] IWireMockServerSettings settings) { - Guard.NotNull(settings, nameof(settings)); + Check.NotNull(settings, nameof(settings)); _settings = settings; } @@ -31,9 +32,9 @@ public ProxyHelper([NotNull] IWireMockServerSettings settings) [NotNull] RequestMessage requestMessage, [NotNull] string url) { - Guard.NotNull(client, nameof(client)); - Guard.NotNull(requestMessage, nameof(requestMessage)); - Guard.NotNull(url, nameof(url)); + Check.NotNull(client, nameof(client)); + Check.NotNull(requestMessage, nameof(requestMessage)); + Check.NotNull(url, nameof(url)); var originalUri = new Uri(requestMessage.Url); var requiredUri = new Uri(url); diff --git a/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs new file mode 100644 index 000000000..2dbee4369 --- /dev/null +++ b/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs @@ -0,0 +1,61 @@ +using System; +using HandlebarsDotNet; +using HandlebarsDotNet.Helpers.Attributes; +using HandlebarsDotNet.Helpers.Enums; +using HandlebarsDotNet.Helpers.Helpers; +using WireMock.Handlers; + +namespace WireMock.Transformers.Handlebars +{ + internal class FileHelpers : BaseHelpers, IHelpers + { + private readonly IFileSystemHandler _fileSystemHandler; + + public FileHelpers(IHandlebars context, IFileSystemHandler fileSystemHandler) : base(context) + { + _fileSystemHandler = fileSystemHandler ?? throw new ArgumentNullException(nameof(fileSystemHandler)); + } + + [HandlebarsWriter(WriterType.String)] + public string File(object context, string path) + { + var templateFunc = Context.Compile(path); + string transformed = templateFunc(context); + return _fileSystemHandler.ReadResponseBodyAsString(transformed); + } + } + + //internal static class HandlebarsFile + //{ + // public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fileSystemHandler) + // { + // handlebarsContext.RegisterHelper("File", (writer, context, arguments) => + // { + // string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); + // writer.Write(value); + // }); + + // handlebarsContext.RegisterHelper("File", (writer, options, context, arguments) => + // { + // string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); + // options.Template(writer, value); + // }); + // } + + // private static string ParseArgumentAndReadFileFragment(IHandlebars handlebarsContext, dynamic context, IFileSystemHandler fileSystemHandler, object[] arguments) + // { + // Check.Condition(arguments, args => args.Length == 1, nameof(arguments)); + // Check.NotNull(arguments[0], "arguments[0]"); + + // switch (arguments[0]) + // { + // case string path: + // var templateFunc = handlebarsContext.Compile(path); + // string transformed = templateFunc(context); + // return fileSystemHandler.ReadResponseBodyAsString(transformed); + // } + + // throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars File."); + // } + //} +} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs index 191a72c6a..2101a9f38 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs @@ -1,6 +1,6 @@ using HandlebarsDotNet; using WireMock.Handlers; - + namespace WireMock.Transformers.Handlebars { internal class HandlebarsContext : IHandlebarsContext @@ -12,8 +12,25 @@ internal class HandlebarsContext : IHandlebarsContext public string ParseAndRender(string text, object model) { var template = Handlebars.Compile(text); - return template(model); + //var reader = new StringReader(text); + //var template = Handlebars.Compile(reader); + + //var writer = new StringWriter(); + + //template(writer, model); + + //switch (result) + //{ + // case JToken jTokenResult: + // return jTokenResult.ToString(); + + // case string stringResult: + // return stringResult; + + // default: + // return result.ToString(); + //} } } } \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsFile.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsFile.cs deleted file mode 100644 index 42d7c2968..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsFile.cs +++ /dev/null @@ -1,41 +0,0 @@ -using HandlebarsDotNet; -using System; -using WireMock.Handlers; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsFile - { - public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fileSystemHandler) - { - handlebarsContext.RegisterHelper("File", (writer, context, arguments) => - { - string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); - writer.Write(value); - }); - - handlebarsContext.RegisterHelper("File", (writer, options, context, arguments) => - { - string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); - options.Template(writer, value); - }); - } - - private static string ParseArgumentAndReadFileFragment(IHandlebars handlebarsContext, dynamic context, IFileSystemHandler fileSystemHandler, object[] arguments) - { - Check.Condition(arguments, args => args.Length == 1, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - - switch (arguments[0]) - { - case string path: - var templateFunc = handlebarsContext.Compile(path); - string transformed = templateFunc(context); - return fileSystemHandler.ReadResponseBodyAsString(transformed); - } - - throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars File."); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs index 70b5a319c..ae030282f 100644 --- a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs @@ -1,30 +1,38 @@ -using HandlebarsDotNet; -using HandlebarsDotNet.Helpers; -using WireMock.Handlers; - -namespace WireMock.Transformers.Handlebars -{ - internal static class WireMockHandlebarsHelpers - { - public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fileSystemHandler) - { - // Register https://github.com/StefH/Handlebars.Net.Helpers - HandlebarsHelpers.Register(handlebarsContext); - - // Register WireMock.Net specific helpers - HandlebarsRegex.Register(handlebarsContext); - - HandlebarsJsonPath.Register(handlebarsContext); - - HandlebarsLinq.Register(handlebarsContext); - - HandlebarsRandom.Register(handlebarsContext); - - HandlebarsXeger.Register(handlebarsContext); - - HandlebarsXPath.Register(handlebarsContext); - - HandlebarsFile.Register(handlebarsContext, fileSystemHandler); - } - } +using System.Collections.Generic; +using HandlebarsDotNet; +using HandlebarsDotNet.Helpers; +using HandlebarsDotNet.Helpers.Helpers; +using WireMock.Handlers; + +namespace WireMock.Transformers.Handlebars +{ + internal static class WireMockHandlebarsHelpers + { + public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fileSystemHandler) + { + // Register https://github.com/StefH/Handlebars.Net.Helpers + HandlebarsHelpers.Register(handlebarsContext, o => + { + o.CustomHelpers = new Dictionary + { + { "File", new FileHelpers(handlebarsContext, fileSystemHandler) } + }; + }); + + // Register WireMock.Net specific helpers + //HandlebarsRegex.Register(handlebarsContext); + + //HandlebarsJsonPath.Register(handlebarsContext); + + //HandlebarsLinq.Register(handlebarsContext); + + //HandlebarsRandom.Register(handlebarsContext); + + //HandlebarsXeger.Register(handlebarsContext); + + //HandlebarsXPath.Register(handlebarsContext); + + //HandlebarsFile.Register(handlebarsContext, fileSystemHandler); + } + } } \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Transformer.cs b/src/WireMock.Net/Transformers/Transformer.cs index 6fa496f18..0acedc2d2 100644 --- a/src/WireMock.Net/Transformers/Transformer.cs +++ b/src/WireMock.Net/Transformers/Transformer.cs @@ -112,7 +112,7 @@ private static void TransformBodyAsJson(ITransformerContext handlebarsContext, o private static JToken ReplaceSingleNode(ITransformerContext handlebarsContext, string stringValue, object model) { - string transformedString = handlebarsContext.ParseAndRender(stringValue, model); + string transformedString = handlebarsContext.ParseAndRender(stringValue, model) as string; if (!string.Equals(stringValue, transformedString)) { diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 8f11d8e68..04562a001 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -1,134 +1,148 @@ - - - Lightweight Http Mocking Server for .Net, inspired by WireMock from the Java landscape. - WireMock.Net - Stef Heyenrath - net451;net452;net46;net461;netstandard1.3;netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0 - true - WireMock.Net - WireMock.Net - tdd;mock;http;wiremock;test;server;unittest - WireMock - {D3804228-91F4-4502-9595-39584E5A01AD} - true - $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - true - - true - WireMock.Net.snk - - true - - - - - - - - - - - true - - - - WireMock.Net.ruleset - - - - NETSTANDARD;USE_ASPNETCORE - - - - USE_ASPNETCORE - - - - USE_ASPNETCORE;NET46 - - + + + Lightweight Http Mocking Server for .Net, inspired by WireMock from the Java landscape. + WireMock.Net + Stef Heyenrath + net451;net452;net46;net461;netstandard1.3;netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0 + true + WireMock.Net + WireMock.Net + tdd;mock;http;wiremock;test;server;unittest + WireMock + {D3804228-91F4-4502-9595-39584E5A01AD} + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + + true + WireMock.Net.snk + + true + + + + + + + + + + + true + + + + WireMock.Net.ruleset + + + + NETSTANDARD;USE_ASPNETCORE + + + + USE_ASPNETCORE + + + + USE_ASPNETCORE;NET46 + + + + + + + + - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs index b58cce818..2a8ae6c93 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs @@ -36,7 +36,7 @@ public async Task Response_ProvideResponseAsync_Handlebars_RegexMatch() var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); var response = Response.Create() - .WithBody("{{Regex.Match request.body \"^(?\\w+)$\"}}") + .WithBody("{{Regex.Match request.body \"^(\\w+)$\"}}") .WithTransformer(); // Act @@ -154,7 +154,7 @@ public void Response_ProvideResponseAsync_Handlebars_RegexMatch2_Throws() .WithTransformer(); // Act and Assert - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs index 1c53c46b6..31fc805a5 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs @@ -34,8 +34,8 @@ public async Task Response_ProvideResponseAsync_Handlebars_Xeger1() var response = Response.Create() .WithBodyAsJson(new { - Number = "{{Xeger \"[1-9]{1}\\d{3}\"}}", - Postcode = "{{Xeger \"[1-9][0-9]{3}[A-Z]{2}\"}}" + Number = "{{Xeger.Generate \"[1-9]{1}\\d{3}\"}}", + Postcode = "{{Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}" }) .WithTransformer(); @@ -57,8 +57,8 @@ public async Task Response_ProvideResponseAsync_Handlebars_Xeger2() var response = Response.Create() .WithBodyAsJson(new { - Number = "{{#Xeger \"[1-9]{1}\\d{3}\"}}{{this}}{{/Xeger}}", - Postcode = "{{#Xeger \"[1-9][0-9]{3}[A-Z]{2}\"}}{{this}}{{/Xeger}}" + Number = "{{#Xeger.Generate \"[1-9]{1}\\d{3}\"}}{{this}}{{/Xeger.Generate}}", + Postcode = "{{#Xeger.Generate \"[1-9][0-9]{3}[A-Z]{2}\"}}{{this}}{{/Xeger.Generate}}" }) .WithTransformer(); From 7badaf170b604f4c22b378e092eb19ad5b738c5e Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 29 Jan 2021 20:13:10 +0000 Subject: [PATCH 02/13] . --- .../ResponseWithHandlebarsLinqTests.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs index 6b5d3370d..49a48119c 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs @@ -1,5 +1,7 @@ using System; using System.Threading.Tasks; +using FluentAssertions; +using HandlebarsDotNet; using Moq; using Newtonsoft.Json.Linq; using NFluent; @@ -139,7 +141,7 @@ public async Task Response_ProvideResponse_Handlebars_Linq2_Object() } [Fact] - public void Response_ProvideResponse_Handlebars_Linq_Throws_NotSupportedException() + public void Response_ProvideResponse_Handlebars_Linq_Throws_ArgumentException() { // Assign var body = new BodyData @@ -155,7 +157,7 @@ public void Response_ProvideResponse_Handlebars_Linq_Throws_NotSupportedExceptio .WithTransformer(); // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); } [Fact] @@ -175,7 +177,7 @@ public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentNullExcepti } [Fact] - public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentException() + public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException() { // Assign var body = new BodyData(); @@ -187,11 +189,11 @@ public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentException() .WithTransformer(); // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); } [Fact] - public async void Response_ProvideResponse_Handlebars_Linq1_ParseError_Returns_Empty() + public async void Response_ProvideResponse_Handlebars_Linq1_ParseError_Returns_ExceptionMessage() { // Assign var body = new BodyData @@ -215,11 +217,11 @@ public async void Response_ProvideResponse_Handlebars_Linq1_ParseError_Returns_E // Assert JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"].ToString()).IsEmpty(); + j["x"].ToString().Should().NotBeEmpty(); } [Fact] - public async void Response_ProvideResponse_Handlebars_Linq2_ParseError_Returns_Empty() + public async void Response_ProvideResponse_Handlebars_Linq2_ParseError_Returns_ExceptionMessage() { // Assign var body = new BodyData @@ -243,7 +245,7 @@ public async void Response_ProvideResponse_Handlebars_Linq2_ParseError_Returns_E // Assert JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"].ToString()).IsEmpty(); + j["x"].ToString().Should().NotBeEmpty(); } } } \ No newline at end of file From c0c03850a126244d29dd29cdc90c694151c08249 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 29 Jan 2021 21:07:42 +0000 Subject: [PATCH 03/13] fix --- .../Transformers/Handlebars/FileHelpers.cs | 68 +++++-------------- .../Handlebars/HandlebarsContext.cs | 18 ----- .../ResponseWithHandlebarsFileTests.cs | 5 +- .../ResponseWithTransformerTests.cs | 4 +- 4 files changed, 22 insertions(+), 73 deletions(-) diff --git a/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs index 2dbee4369..65bfd990e 100644 --- a/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/FileHelpers.cs @@ -1,61 +1,27 @@ -using System; -using HandlebarsDotNet; +using System; +using HandlebarsDotNet; using HandlebarsDotNet.Helpers.Attributes; using HandlebarsDotNet.Helpers.Enums; using HandlebarsDotNet.Helpers.Helpers; -using WireMock.Handlers; - -namespace WireMock.Transformers.Handlebars -{ - internal class FileHelpers : BaseHelpers, IHelpers +using WireMock.Handlers; + +namespace WireMock.Transformers.Handlebars +{ + internal class FileHelpers : BaseHelpers, IHelpers { private readonly IFileSystemHandler _fileSystemHandler; - public FileHelpers(IHandlebars context, IFileSystemHandler fileSystemHandler) : base(context) + public FileHelpers(IHandlebars context, IFileSystemHandler fileSystemHandler) : base(context) { _fileSystemHandler = fileSystemHandler ?? throw new ArgumentNullException(nameof(fileSystemHandler)); - } - - [HandlebarsWriter(WriterType.String)] - public string File(object context, string path) - { + } + + [HandlebarsWriter(WriterType.String, usage: HelperUsage.Both, passContext: true, name: "File")] + public string Read(Context context, string path) + { var templateFunc = Context.Compile(path); - string transformed = templateFunc(context); - return _fileSystemHandler.ReadResponseBodyAsString(transformed); - } - } - - //internal static class HandlebarsFile - //{ - // public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fileSystemHandler) - // { - // handlebarsContext.RegisterHelper("File", (writer, context, arguments) => - // { - // string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); - // writer.Write(value); - // }); - - // handlebarsContext.RegisterHelper("File", (writer, options, context, arguments) => - // { - // string value = ParseArgumentAndReadFileFragment(handlebarsContext, context, fileSystemHandler, arguments); - // options.Template(writer, value); - // }); - // } - - // private static string ParseArgumentAndReadFileFragment(IHandlebars handlebarsContext, dynamic context, IFileSystemHandler fileSystemHandler, object[] arguments) - // { - // Check.Condition(arguments, args => args.Length == 1, nameof(arguments)); - // Check.NotNull(arguments[0], "arguments[0]"); - - // switch (arguments[0]) - // { - // case string path: - // var templateFunc = handlebarsContext.Compile(path); - // string transformed = templateFunc(context); - // return fileSystemHandler.ReadResponseBodyAsString(transformed); - // } - - // throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars File."); - // } - //} + string transformed = templateFunc(context.Value); + return _fileSystemHandler.ReadResponseBodyAsString(transformed); + } + } } \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs index 2101a9f38..a4e553be3 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContext.cs @@ -13,24 +13,6 @@ public string ParseAndRender(string text, object model) { var template = Handlebars.Compile(text); return template(model); - //var reader = new StringReader(text); - //var template = Handlebars.Compile(reader); - - //var writer = new StringWriter(); - - //template(writer, model); - - //switch (result) - //{ - // case JToken jTokenResult: - // return jTokenResult.ToString(); - - // case string stringResult: - // return stringResult; - - // default: - // return result.ToString(); - //} } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs index 10dd3ec25..533d5e867 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using HandlebarsDotNet; using Moq; using Newtonsoft.Json.Linq; using NFluent; @@ -76,7 +77,7 @@ public async Task Response_ProvideResponseAsync_Handlebars_File_Replace() } [Fact] - public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_ThrowsArgumentOutOfRangeException() + public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Throws_HandlebarsException() { // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); @@ -89,7 +90,7 @@ public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Th .WithTransformer(); // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); // Verify _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString(It.IsAny()), Times.Never); diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs index d4685e3ef..e3aeec50c 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -161,7 +161,7 @@ public async Task Response_ProvideResponse_Handlebars_Query() var responseMessage = await response.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5"); + Check.That(responseMessage.BodyData.BodyAsString).Equals("test keya=1,2 idx=1 idx=2 keyb=5"); } [Theory(Skip = "Invalid token `OpenBracket`")] @@ -503,7 +503,7 @@ public async Task Response_ProvideResponse_Transformer_WithBodyAsJson_ResultAsNo Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("\"test\""); } - [Fact] + [Fact(Skip = "todo...")] public async Task Response_ProvideResponse_Handlebars_WithBodyAsJson_ResultAsTemplatedString() { // Assign From 6baf16d92e6228f8bccaebf473cb33ca49b32377 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 30 Jan 2021 09:47:43 +0000 Subject: [PATCH 04/13] . --- src/WireMock.Net/WireMock.Net.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 04562a001..7e4d40bfa 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -70,8 +70,6 @@ - - From 6d6fb2dfc151cc791936613cdc7713a199e1c81d Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 30 Jan 2021 11:13:27 +0000 Subject: [PATCH 05/13] use nugets --- Directory.Build.props | 2 +- WireMock.Net Solution.sln | 49 ------------------- .../WireMock.Net.Console.NETCoreApp3.csproj | 8 ++- src/WireMock.Net/WireMock.Net.csproj | 12 +++-- .../ResponseWithHandlebarsLinqTests.cs | 14 +++--- 5 files changed, 22 insertions(+), 63 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 45b30e023..157961c31 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ - 1.4.2 + 1.4.3 See CHANGELOG.md https://raw.githubusercontent.com/WireMock-Net/WireMock.Net/master/WireMock.Net-Logo.png https://github.com/WireMock-Net/WireMock.Net diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index 11c7911e6..b148e3e20 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -80,20 +80,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NET5", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Matchers.CSharpCode", "src\WireMock.Net.Matchers.CSharpCode\WireMock.Net.Matchers.CSharpCode.csproj", "{B6269AAC-170A-4346-8B9A-444DED3D9A44}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Core", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Core\Handlebars.Net.Helpers.Core.csproj", "{7CBD113C-A754-480B-B0D0-AA9DF734F612}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers\Handlebars.Net.Helpers.csproj", "{FD1CF989-3F17-4F38-A5F4-EDECC647D237}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Json", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Json\Handlebars.Net.Helpers.Json.csproj", "{181B9A96-5662-44AA-8685-E68E1263125A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.DynamicLinq", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.DynamicLinq\Handlebars.Net.Helpers.DynamicLinq.csproj", "{181B9A96-5662-BBAA-5678-BB8E1263125A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Random", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Random\Handlebars.Net.Helpers.Random.csproj", "{2A78B30D-D61C-4FEB-4567-2EC9AE84693B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.Xeger", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.Xeger\Handlebars.Net.Helpers.Xeger.csproj", "{2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Net.Helpers.XPath", "..\Handlebars-Net\Handlebars.Net.Helpers\src\Handlebars.Net.Helpers.XPath\Handlebars.Net.Helpers.XPath.csproj", "{42D47A7E-EF66-477D-A524-45EEC130EA67}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -212,34 +198,6 @@ Global {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6269AAC-170A-4346-8B9A-444DED3D9A44}.Release|Any CPU.Build.0 = Release|Any CPU - {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CBD113C-A754-480B-B0D0-AA9DF734F612}.Release|Any CPU.Build.0 = Release|Any CPU - {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD1CF989-3F17-4F38-A5F4-EDECC647D237}.Release|Any CPU.Build.0 = Release|Any CPU - {181B9A96-5662-44AA-8685-E68E1263125A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {181B9A96-5662-44AA-8685-E68E1263125A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {181B9A96-5662-44AA-8685-E68E1263125A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {181B9A96-5662-44AA-8685-E68E1263125A}.Release|Any CPU.Build.0 = Release|Any CPU - {181B9A96-5662-BBAA-5678-BB8E1263125A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {181B9A96-5662-BBAA-5678-BB8E1263125A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {181B9A96-5662-BBAA-5678-BB8E1263125A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {181B9A96-5662-BBAA-5678-BB8E1263125A}.Release|Any CPU.Build.0 = Release|Any CPU - {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A78B30D-D61C-4FEB-4567-2EC9AE84693B}.Release|Any CPU.Build.0 = Release|Any CPU - {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B}.Release|Any CPU.Build.0 = Release|Any CPU - {42D47A7E-EF66-477D-A524-45EEC130EA67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42D47A7E-EF66-477D-A524-45EEC130EA67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42D47A7E-EF66-477D-A524-45EEC130EA67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42D47A7E-EF66-477D-A524-45EEC130EA67}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -273,13 +231,6 @@ Global {40BF24B5-12E6-4610-9489-138798632E28} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {3F8CF0AE-5F24-4A54-89E7-A3EE829DB5F8} = {985E0ADB-D4B4-473A-AA40-567E279B7946} {B6269AAC-170A-4346-8B9A-444DED3D9A44} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {7CBD113C-A754-480B-B0D0-AA9DF734F612} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {FD1CF989-3F17-4F38-A5F4-EDECC647D237} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {181B9A96-5662-44AA-8685-E68E1263125A} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {181B9A96-5662-BBAA-5678-BB8E1263125A} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {2A78B30D-D61C-4FEB-4567-2EC9AE84693B} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {2278B30D-D61C-4FEB-8AEB-2EC9AE84693B} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} - {42D47A7E-EF66-477D-A524-45EEC130EA67} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458} 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 68b7e6cd2..019783496 100644 --- a/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj +++ b/examples/WireMock.Net.Console.NETCoreApp3/WireMock.Net.Console.NETCoreApp3.csproj @@ -28,10 +28,14 @@ - + + + + + + - diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 7e4d40bfa..29ce5a005 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -133,14 +133,20 @@ - - + + + + + + + + \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs index 49a48119c..36f1c39d6 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs @@ -193,7 +193,7 @@ public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException } [Fact] - public async void Response_ProvideResponse_Handlebars_Linq1_ParseError_Returns_ExceptionMessage() + public void Response_ProvideResponse_Handlebars_Linq1_ParseError_Throws_ExceptionMessage() { // Assign var body = new BodyData @@ -213,15 +213,14 @@ public async void Response_ProvideResponse_Handlebars_Linq1_ParseError_Returns_E .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + Func a = async () => await response.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - j["x"].ToString().Should().NotBeEmpty(); + a.Should().Throw(); } [Fact] - public async void Response_ProvideResponse_Handlebars_Linq2_ParseError_Returns_ExceptionMessage() + public void Response_ProvideResponse_Handlebars_Linq2_ParseError_Throws_ExceptionMessage() { // Assign var body = new BodyData @@ -241,11 +240,10 @@ public async void Response_ProvideResponse_Handlebars_Linq2_ParseError_Returns_E .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + Func a = async () => await response.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - j["x"].ToString().Should().NotBeEmpty(); + a.Should().Throw(); } } } \ No newline at end of file From ea584f8d513bb99e0bad6c33f6cfb7366e0cbb50 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 31 Jan 2021 15:45:53 +0100 Subject: [PATCH 06/13] . --- .../Handlebars/HandlebarsContextFactory.cs | 7 +------ .../Handlebars/WireMockHandlebarsHelpers.cs | 15 --------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContextFactory.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContextFactory.cs index 4bd98e42f..073683775 100644 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsContextFactory.cs +++ b/src/WireMock.Net/Transformers/Handlebars/HandlebarsContextFactory.cs @@ -7,11 +7,6 @@ namespace WireMock.Transformers.Handlebars { internal class HandlebarsContextFactory : ITransformerContextFactory { - private static readonly HandlebarsConfiguration HandlebarsConfiguration = new HandlebarsConfiguration - { - UnresolvedBindingFormatter = "{0}" - }; - private readonly IFileSystemHandler _fileSystemHandler; private readonly Action _action; @@ -23,7 +18,7 @@ public HandlebarsContextFactory([NotNull] IFileSystemHandler fileSystemHandler, public ITransformerContext Create() { - var handlebars = HandlebarsDotNet.Handlebars.Create(HandlebarsConfiguration); + var handlebars = HandlebarsDotNet.Handlebars.Create(); WireMockHandlebarsHelpers.Register(handlebars, _fileSystemHandler); diff --git a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs index ae030282f..d46fa7edd 100644 --- a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs @@ -18,21 +18,6 @@ public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fi { "File", new FileHelpers(handlebarsContext, fileSystemHandler) } }; }); - - // Register WireMock.Net specific helpers - //HandlebarsRegex.Register(handlebarsContext); - - //HandlebarsJsonPath.Register(handlebarsContext); - - //HandlebarsLinq.Register(handlebarsContext); - - //HandlebarsRandom.Register(handlebarsContext); - - //HandlebarsXeger.Register(handlebarsContext); - - //HandlebarsXPath.Register(handlebarsContext); - - //HandlebarsFile.Register(handlebarsContext, fileSystemHandler); } } } \ No newline at end of file From 057f5b7ea5026ac5bcd41b01827692b8d491692b Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 6 Feb 2021 10:27:51 +0100 Subject: [PATCH 07/13] 2.1.0 --- src/WireMock.Net/WireMock.Net.csproj | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 29ce5a005..5ca3c554f 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -133,20 +133,13 @@ - - - - - - - - + + + + + + + \ No newline at end of file From 1de7b1294d00cfdb0db56cb27c0c81e5586f043d Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 8 Feb 2021 20:08:39 +0100 Subject: [PATCH 08/13] 2.1.1-preview-01 --- src/WireMock.Net/WireMock.Net.csproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 5ca3c554f..b9872c3cf 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -133,12 +133,12 @@ - - - - - - + + + + + + From 6e60fb5f943f520e355f245758211ee97ebc0405 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 8 Feb 2021 20:40:27 +0100 Subject: [PATCH 09/13] f --- .../WireMock.Net.StandAlone.NETCoreApp/Program.cs | 11 ++++++----- .../Handlebars/WireMockHandlebarsHelpers.cs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs b/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs index 6d4571606..55dc7e12f 100644 --- a/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs +++ b/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs @@ -34,11 +34,12 @@ static void Main(string[] args) _server = WireMockServer.Start(settings); - //_server - // .Given(Request.Create() - // .UsingAnyMethod()) - // .RespondWith(Response.Create() - // .WithProxy("https://www.google.com")); + _server + .Given(Request.Create() + .UsingAnyMethod()) + .RespondWith(Response.Create() + .WithTransformer() + .WithBody("{{Random Type=\"Integer\" Min=100 Max=999999}} {{Now}} {{Now \"yyyy-MMM\"}} {{Format (Now) \"MMM-dd\"}}")); Console.WriteLine($"{DateTime.UtcNow} Press Ctrl+C to shut down"); diff --git a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs index d46fa7edd..e10eff3b4 100644 --- a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; using HandlebarsDotNet; using HandlebarsDotNet.Helpers; using HandlebarsDotNet.Helpers.Helpers; @@ -13,6 +16,18 @@ public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fi // Register https://github.com/StefH/Handlebars.Net.Helpers HandlebarsHelpers.Register(handlebarsContext, o => { + o.UseCategoryPrefix = false; + + o.CustomHelperPaths = new string[] + { + Directory.GetCurrentDirectory() +#if !NETSTANDARD1_3 + , Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +#endif + } + .Distinct() + .ToList(); + o.CustomHelpers = new Dictionary { { "File", new FileHelpers(handlebarsContext, fileSystemHandler) } From b823edefb7b34a9c370b564cf5d060ff527fcbcc Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 8 Feb 2021 20:51:30 +0100 Subject: [PATCH 10/13] x --- examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs | 2 +- .../Transformers/Handlebars/WireMockHandlebarsHelpers.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs b/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs index 55dc7e12f..a39469763 100644 --- a/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs +++ b/examples/WireMock.Net.StandAlone.NETCoreApp/Program.cs @@ -39,7 +39,7 @@ static void Main(string[] args) .UsingAnyMethod()) .RespondWith(Response.Create() .WithTransformer() - .WithBody("{{Random Type=\"Integer\" Min=100 Max=999999}} {{Now}} {{Now \"yyyy-MMM\"}} {{Format (Now) \"MMM-dd\"}}")); + .WithBody("{{Random Type=\"Integer\" Min=100 Max=999999}} {{DateTime.Now}} {{DateTime.Now \"yyyy-MMM\"}} {{String.Format (DateTime.Now) \"MMM-dd\"}}")); Console.WriteLine($"{DateTime.UtcNow} Press Ctrl+C to shut down"); diff --git a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs index e10eff3b4..e8b43cc32 100644 --- a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs @@ -16,7 +16,7 @@ public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fi // Register https://github.com/StefH/Handlebars.Net.Helpers HandlebarsHelpers.Register(handlebarsContext, o => { - o.UseCategoryPrefix = false; + // o.UseCategoryPrefix = false; o.CustomHelperPaths = new string[] { From 34cf916a360fbc6ca86564c9282aa9a9341af6ca Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 9 Feb 2021 07:23:06 +0000 Subject: [PATCH 11/13] fix projects --- .../WireMock.Net.Console.NET5.csproj | 3 +- .../WireMock.Net.Console.NETCoreApp.csproj | 7 +- .../WireMock.Net.Console.NETCoreApp2.csproj | 115 +++++----- .../WireMock.Net.Console.NETCoreApp3.csproj | 12 +- .../App.config | 18 +- ...WireMock.Net.Console.Net452.Classic.csproj | 197 +++++++++--------- .../packages.config | 17 +- ...WireMock.Net.Console.Net461.Classic.csproj | 187 +++++++++-------- .../packages.config | 15 +- ...WireMock.Net.Console.Net472.Classic.csproj | 8 +- .../packages.config | 4 +- 11 files changed, 314 insertions(+), 269 deletions(-) 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 7c8899699..49ab5d444 100644 --- a/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj +++ b/examples/WireMock.Net.Console.NET5/WireMock.Net.Console.NET5.csproj @@ -28,11 +28,10 @@ - + - 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 17bfb5627..33d3b17d4 100644 --- a/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj +++ b/examples/WireMock.Net.Console.NETCoreApp/WireMock.Net.Console.NETCoreApp.csproj @@ -19,7 +19,12 @@ - + + + + + + diff --git a/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj b/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj index 8a2505afc..751e36cbe 100644 --- a/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj +++ b/examples/WireMock.Net.Console.NETCoreApp2/WireMock.Net.Console.NETCoreApp2.csproj @@ -1,60 +1,65 @@ - - - - Exe - netcoreapp2.1 - ../../WireMock.Net-Logo.ico - - - - - - - - - - PreserveNewest - - - - - - - + + + + Exe + netcoreapp2.1 + ../../WireMock.Net-Logo.ico + + + + + + + + + + PreserveNewest + + + + + + + - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Never - - - PreserveNewest - + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Never + + + PreserveNewest + PreserveNewest - - - + + + \ 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 087f045fc..73d88223e 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/App.config b/examples/WireMock.Net.Console.Net452.Classic/App.config index 03644c1ce..2394ca3fe 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/App.config +++ b/examples/WireMock.Net.Console.Net452.Classic/App.config @@ -1,6 +1,14 @@ - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj b/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj index 98aa3aac0..522d1c638 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj +++ b/examples/WireMock.Net.Console.Net452.Classic/WireMock.Net.Console.Net452.Classic.csproj @@ -1,100 +1,111 @@ - - - - - Debug - AnyCPU - {668F689E-57B4-422E-8846-C0FF643CA268} - Exe - Properties - WireMock.Net.ConsoleApplication - WireMock.Net.ConsoleApplication - v4.5.2 - 512 - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - ..\..\WireMock.Net-Logo.ico - - - - ..\..\packages\Handlebars.Net.1.9.5\lib\net452\Handlebars.dll - - - ..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll - - - - ..\..\packages\Microsoft.Owin.Host.HttpListener.3.1.0\lib\net45\Microsoft.Owin.Host.HttpListener.dll - - - ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\SimMetrics.Net.1.0.5\lib\net45\SimMetrics.Net.dll - - - - - - - - - - - - - - Designer - - - PreserveNewest - - - Designer - - - PreserveNewest - - - PreserveNewest - - - - - {b6269aac-170a-4346-8b9a-579ded3d9a94} - WireMock.Net.Abstractions - - - {d3804228-91f4-4502-9595-39584e5a01ad} - WireMock.Net - - - + + + + + Debug + AnyCPU + {668F689E-57B4-422E-8846-C0FF643CA268} + Exe + Properties + WireMock.Net.ConsoleApplication + WireMock.Net.ConsoleApplication + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + ..\..\WireMock.Net-Logo.ico + + + + ..\..\packages\Handlebars.Net.2.0.4\lib\net452\Handlebars.dll + + + ..\..\packages\Handlebars.Net.Helpers.2.1.1-preview-01\lib\net452\Handlebars.Net.Helpers.dll + + + ..\..\packages\Handlebars.Net.Helpers.Core.2.1.1-preview-01\lib\net452\HandlebarsDotNet.Helpers.Core.dll + + + ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll + + + + ..\..\packages\Microsoft.Owin.Host.HttpListener.3.1.0\lib\net45\Microsoft.Owin.Host.HttpListener.dll + + + ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\..\packages\SimMetrics.Net.1.0.5\lib\net45\SimMetrics.Net.dll + + + + + + ..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll + + + + + + + + + + + + + Designer + + + PreserveNewest + + + Designer + + + PreserveNewest + + + PreserveNewest + + + + + {b6269aac-170a-4346-8b9a-579ded3d9a94} + WireMock.Net.Abstractions + + + {d3804228-91f4-4502-9595-39584e5a01ad} + WireMock.Net + + + + --> \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Net452.Classic/packages.config b/examples/WireMock.Net.Console.Net452.Classic/packages.config index 5804b5a30..8d57f57b7 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/packages.config +++ b/examples/WireMock.Net.Console.Net452.Classic/packages.config @@ -1,8 +1,11 @@ - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Net461.Classic/WireMock.Net.Console.Net461.Classic.csproj b/examples/WireMock.Net.Console.Net461.Classic/WireMock.Net.Console.Net461.Classic.csproj index 7ed4828b9..ee4c0385d 100644 --- a/examples/WireMock.Net.Console.Net461.Classic/WireMock.Net.Console.Net461.Classic.csproj +++ b/examples/WireMock.Net.Console.Net461.Classic/WireMock.Net.Console.Net461.Classic.csproj @@ -1,89 +1,100 @@ - - - - - Debug - AnyCPU - {1261BB9B-A7D4-456C-8985-3CE560361B8E} - Exe - WireMock.Net.Console.Net461.Classic - WireMock.Net.Console.Net461.Classic - v4.6.1 - 512 - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - WireMock.Net.ConsoleApplication.Program - - - - ..\..\packages\Handlebars.Net.1.9.5\lib\net452\Handlebars.dll - - - ..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll - - - ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\SimMetrics.Net.1.0.5\lib\net45\SimMetrics.Net.dll - - - - - - - - - - - - - CustomFileSystemFileHandler.cs - - - MainApp.cs - - - Program.cs - - - - - - log4net.config - - - - - - - {b6269aac-170a-4346-8b9a-579ded3d9a94} - WireMock.Net.Abstractions - - - {d3804228-91f4-4502-9595-39584e5a01ad} - WireMock.Net - - - + + + + + Debug + AnyCPU + {1261BB9B-A7D4-456C-8985-3CE560361B8E} + Exe + WireMock.Net.Console.Net461.Classic + WireMock.Net.Console.Net461.Classic + v4.6.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + WireMock.Net.ConsoleApplication.Program + + + + ..\..\packages\Handlebars.Net.2.0.4\lib\net46\Handlebars.dll + + + ..\..\packages\Handlebars.Net.Helpers.2.1.1-preview-01\lib\net452\Handlebars.Net.Helpers.dll + + + ..\..\packages\Handlebars.Net.Helpers.Core.2.1.1-preview-01\lib\net452\HandlebarsDotNet.Helpers.Core.dll + + + ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll + + + ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\..\packages\SimMetrics.Net.1.0.5\lib\net45\SimMetrics.Net.dll + + + + + + ..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll + + + + + + + + + + + + CustomFileSystemFileHandler.cs + + + MainApp.cs + + + Program.cs + + + + + + log4net.config + + + + + + + {b6269aac-170a-4346-8b9a-579ded3d9a94} + WireMock.Net.Abstractions + + + {d3804228-91f4-4502-9595-39584e5a01ad} + WireMock.Net + + + \ No newline at end of file diff --git a/examples/WireMock.Net.Console.Net461.Classic/packages.config b/examples/WireMock.Net.Console.Net461.Classic/packages.config index d217d2187..8117752b0 100644 --- a/examples/WireMock.Net.Console.Net461.Classic/packages.config +++ b/examples/WireMock.Net.Console.Net461.Classic/packages.config @@ -1,7 +1,10 @@ - - - - - - + + + + + + + + + \ No newline at end of file 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 c2df55009..eba05faf4 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 @@ -45,11 +45,11 @@ ..\..\packages\Handlebars.Net.2.0.4\lib\net46\Handlebars.dll - - ..\..\packages\Handlebars.Net.Helpers.2.1.0\lib\net452\Handlebars.Net.Helpers.dll + + ..\..\packages\Handlebars.Net.Helpers.2.1.1-preview-01\lib\net452\Handlebars.Net.Helpers.dll - - ..\..\packages\Handlebars.Net.Helpers.Core.2.1.0\lib\net452\HandlebarsDotNet.Helpers.Core.dll + + ..\..\packages\Handlebars.Net.Helpers.Core.2.1.1-preview-01\lib\net452\HandlebarsDotNet.Helpers.Core.dll ..\..\packages\JmesPath.Net.1.0.125\lib\net45\JmesPath.Net.dll diff --git a/examples/WireMock.Net.Console.Net472.Classic/packages.config b/examples/WireMock.Net.Console.Net472.Classic/packages.config index fc87df1e8..04812545d 100644 --- a/examples/WireMock.Net.Console.Net472.Classic/packages.config +++ b/examples/WireMock.Net.Console.Net472.Classic/packages.config @@ -2,8 +2,8 @@ - - + + From c37a1c04f7c597a23ef823492bcf63403bc7a640 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 9 Feb 2021 19:57:44 +0100 Subject: [PATCH 12/13] 211 --- .../Handlebars/HandlebarsJsonPath.cs | 79 ------------ .../Transformers/Handlebars/HandlebarsLinq.cs | 86 ------------- .../Handlebars/HandlebarsRandom.cs | 113 ------------------ .../Handlebars/HandlebarsRegex.cs | 64 ---------- .../Handlebars/HandlebarsXPath.cs | 102 ---------------- .../Handlebars/HandlebarsXeger.cs | 39 ------ src/WireMock.Net/WireMock.Net.csproj | 26 ++-- 7 files changed, 7 insertions(+), 502 deletions(-) delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsJsonPath.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsLinq.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsRandom.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsRegex.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsXPath.cs delete mode 100644 src/WireMock.Net/Transformers/Handlebars/HandlebarsXeger.cs diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsJsonPath.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsJsonPath.cs deleted file mode 100644 index c016f374a..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsJsonPath.cs +++ /dev/null @@ -1,79 +0,0 @@ -using HandlebarsDotNet; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections; -using System.Linq; -using WireMock.Util; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsJsonPath - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("JsonPath.SelectToken", (writer, context, arguments) => - { - (JToken valueToProcess, string jsonPath) = ParseArguments(arguments); - - try - { - var result = valueToProcess.SelectToken(jsonPath); - writer.WriteSafeString(result); - } - catch (JsonException) - { - // Ignore JsonException - } - }); - - handlebarsContext.RegisterHelper("JsonPath.SelectTokens", (writer, options, context, arguments) => - { - (JToken valueToProcess, string jsonPath) = ParseArguments(arguments); - - try - { - var values = valueToProcess.SelectTokens(jsonPath); - if (values != null) - { - options.Template(writer, values.ToDictionary(value => value.Path, value => value)); - } - } - catch (JsonException) - { - // Ignore JsonException - } - }); - } - - private static (JToken valueToProcess, string jsonpath) ParseArguments(object[] arguments) - { - Check.Condition(arguments, args => args.Length == 2, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - Check.NotNullOrEmpty(arguments[1] as string, "arguments[1]"); - - JToken valueToProcess; - - switch (arguments[0]) - { - case JToken tokenValue: - valueToProcess = tokenValue; - break; - - case string stringValue: - valueToProcess = JsonUtils.Parse(stringValue); - break; - - case IEnumerable enumerableValue: - valueToProcess = JArray.FromObject(enumerableValue); - break; - - default: - throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars JsonPath."); - } - - return (valueToProcess, (string)arguments[1]); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsLinq.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsLinq.cs deleted file mode 100644 index 946d1913c..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsLinq.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Linq; -using System.Linq.Dynamic.Core; -using System.Linq.Dynamic.Core.Exceptions; -using HandlebarsDotNet; -using Newtonsoft.Json.Linq; -using WireMock.Util; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsLinq - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("Linq", (writer, context, arguments) => - { - (JToken valueToProcess, string linqStatement) = ParseArguments(arguments); - - try - { - object result = ExecuteDynamicLinq(valueToProcess, linqStatement); - writer.WriteSafeString(result); - } - catch (ParseException) - { - // Ignore ParseException - } - }); - - handlebarsContext.RegisterHelper("Linq", (writer, options, context, arguments) => - { - (JToken valueToProcess, string linqStatement) = ParseArguments(arguments); - - try - { - var result = ExecuteDynamicLinq(valueToProcess, linqStatement); - options.Template(writer, result); - } - catch (ParseException) - { - // Ignore ParseException - } - }); - } - - private static dynamic ExecuteDynamicLinq(JToken value, string linqStatement) - { - // Convert a single object to a Queryable JObject-list with 1 entry. - var queryable1 = new[] { value }.AsQueryable(); - - // Generate the DynamicLinq select statement. - string dynamicSelect = JsonUtils.GenerateDynamicLinqStatement(value); - - // Execute DynamicLinq Select statement. - var queryable2 = queryable1.Select(dynamicSelect); - - // Execute the Select(...) method and get first result with FirstOrDefault(). - return queryable2.Select(linqStatement).FirstOrDefault(); - } - - private static (JToken valueToProcess, string linqStatement) ParseArguments(object[] arguments) - { - Check.Condition(arguments, args => args.Length == 2, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - Check.NotNullOrEmpty(arguments[1] as string, "arguments[1]"); - - JToken valueToProcess; - switch (arguments[0]) - { - case string jsonAsString: - valueToProcess = new JValue(jsonAsString); - break; - - case JToken jsonAsJObject: - valueToProcess = jsonAsJObject; - break; - - default: - throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars Linq."); - } - - return (valueToProcess, (string) arguments[1]); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsRandom.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsRandom.cs deleted file mode 100644 index 9f73b8493..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsRandom.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using HandlebarsDotNet; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using RandomDataGenerator.FieldOptions; -using RandomDataGenerator.Randomizers; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsRandom - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("Random", (writer, context, arguments) => - { - object value = GetRandomValue(arguments); - writer.Write(value); - }); - - handlebarsContext.RegisterHelper("Random", (writer, options, context, arguments) => - { - object value = GetRandomValue(arguments); - options.Template(writer, value); - }); - } - - private static object GetRandomValue(object[] arguments) - { - var fieldOptions = GetFieldOptionsFromArguments(arguments); - dynamic randomizer = RandomizerFactory.GetRandomizerAsDynamic(fieldOptions); - - // Format DateTime as ISO 8601 - if (fieldOptions is IFieldOptionsDateTime) - { - DateTime? date = randomizer.Generate(); - return date?.ToString("s", CultureInfo.InvariantCulture); - } - - // If the IFieldOptionsGuid defines Uppercase, use the 'GenerateAsString' method. - if (fieldOptions is IFieldOptionsGuid fieldOptionsGuid) - { - return fieldOptionsGuid.Uppercase ? randomizer.GenerateAsString() : randomizer.Generate(); - } - - return randomizer.Generate(); - } - - private static FieldOptionsAbstract GetFieldOptionsFromArguments(object[] arguments) - { - Check.Condition(arguments, args => args.Length > 0, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - - var properties = (Dictionary)arguments[0]; - var newProperties = new Dictionary(); - - foreach (KeyValuePair property in properties.Where(p => p.Key != "Type")) - { - if (property.Value.GetType().Name == "UndefinedBindingResult") - { - if (TryParseSpecialValue(property.Value, out object parsedValue)) - { - newProperties.Add(property.Key, parsedValue); - } - } - else - { - newProperties.Add(property.Key, property.Value); - } - } - - return FieldOptionsFactory.GetFieldOptions((string)properties["Type"], newProperties); - } - - /// - /// In case it's an UndefinedBindingResult, just try to convert the value using Json - /// This logic adds functionality like parsing an array - /// - /// The property value - /// The parsed value - /// true in case parsing is ok, else false - private static bool TryParseSpecialValue(object value, out object parsedValue) - { - parsedValue = null; - string propertyValueAsString = value.ToString(); - - try - { - JToken jToken = JToken.Parse(propertyValueAsString); - switch (jToken) - { - case JArray jTokenArray: - parsedValue = jTokenArray.ToObject().ToList(); // Just convert to a String List to enable Random StringList - break; - - default: - return jToken.ToObject(); - } - - return true; - } - catch (JsonException) - { - // Ignore and don't add this value - } - - return false; - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsRegex.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsRegex.cs deleted file mode 100644 index 5a53a8c24..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsRegex.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Linq; -using System.Text.RegularExpressions; -using HandlebarsDotNet; -using WireMock.Util; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsRegex - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("Regex.Match", (writer, context, arguments) => - { - (string stringToProcess, string regexPattern, object defaultValue) = ParseArguments(arguments); - - Match match = Regex.Match(stringToProcess, regexPattern); - - if (match.Success) - { - writer.WriteSafeString(match.Value); - } - else if (defaultValue != null) - { - writer.WriteSafeString(defaultValue); - } - }); - - handlebarsContext.RegisterHelper("Regex.Match", (writer, options, context, arguments) => - { - (string stringToProcess, string regexPattern, object defaultValue) = ParseArguments(arguments); - - var regex = new Regex(regexPattern); - var namedGroups = RegexUtils.GetNamedGroups(regex, stringToProcess); - if (namedGroups.Any()) - { - options.Template(writer, namedGroups); - } - else if (defaultValue != null) - { - options.Template(writer, defaultValue); - } - }); - } - - private static (string stringToProcess, string regexPattern, object defaultValue) ParseArguments(object[] arguments) - { - Check.Condition(arguments, args => args.Length == 2 || args.Length == 3, nameof(arguments)); - - string ParseAsString(object arg) - { - if (arg is string argAsString) - { - return argAsString; - } - - throw new NotSupportedException($"The value '{arg}' with type '{arg?.GetType()}' cannot be used in Handlebars Regex."); - } - - return (ParseAsString(arguments[0]), ParseAsString(arguments[1]), arguments.Length == 3 ? arguments[2] : null); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsXPath.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsXPath.cs deleted file mode 100644 index 1e0ee0c1f..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsXPath.cs +++ /dev/null @@ -1,102 +0,0 @@ -using HandlebarsDotNet; -using System; -using System.Text; -using System.Xml; -using System.Xml.XPath; -using WireMock.Validation; -#if !NETSTANDARD1_3 -using Wmhelp.XPath2; -#endif - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsXPath - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("XPath.SelectSingleNode", (writer, context, arguments) => - { - (XPathNavigator nav, string xpath) = ParseArguments(arguments); - - try - { -#if NETSTANDARD1_3 - var result = nav.SelectSingleNode(xpath); -#else - var result = nav.XPath2SelectSingleNode(xpath); -#endif - writer.WriteSafeString(result.OuterXml); - } - catch (Exception) - { - // Ignore Exception - } - }); - - handlebarsContext.RegisterHelper("XPath.SelectNodes", (writer, context, arguments) => - { - (XPathNavigator nav, string xpath) = ParseArguments(arguments); - - try - { -#if NETSTANDARD1_3 - var result = nav.Select(xpath); -#else - var result = nav.XPath2SelectNodes(xpath); -#endif - var resultXml = new StringBuilder(); - foreach (XPathNavigator node in result) - { - resultXml.Append(node.OuterXml); - } - - writer.WriteSafeString(resultXml); - } - catch (Exception) - { - // Ignore Exception - } - }); - - handlebarsContext.RegisterHelper("XPath.Evaluate", (writer, context, arguments) => - { - (XPathNavigator nav, string xpath) = ParseArguments(arguments); - - try - { -#if NETSTANDARD1_3 - var result = nav.Evaluate(xpath); -#else - var result = nav.XPath2Evaluate(xpath); -#endif - writer.WriteSafeString(result); - } - catch (Exception) - { - // Ignore Exception - } - }); - } - - private static (XPathNavigator nav, string xpath) ParseArguments(object[] arguments) - { - Check.Condition(arguments, args => args.Length == 2, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - Check.NotNullOrEmpty(arguments[1] as string, "arguments[1]"); - - XPathNavigator nav; - - switch (arguments[0]) - { - case string stringValue: - nav = new XmlDocument { InnerXml = stringValue }.CreateNavigator(); - break; - - default: - throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars XPath."); - } - - return (nav, (string)arguments[1]); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/Transformers/Handlebars/HandlebarsXeger.cs b/src/WireMock.Net/Transformers/Handlebars/HandlebarsXeger.cs deleted file mode 100644 index 94b58f806..000000000 --- a/src/WireMock.Net/Transformers/Handlebars/HandlebarsXeger.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Fare; -using HandlebarsDotNet; -using WireMock.Validation; - -namespace WireMock.Transformers.Handlebars -{ - internal static class HandlebarsXeger - { - public static void Register(IHandlebars handlebarsContext) - { - handlebarsContext.RegisterHelper("Xeger", (writer, context, arguments) => - { - string value = ParseArgumentAndGenerate(arguments); - writer.Write(value); - }); - - handlebarsContext.RegisterHelper("Xeger", (writer, options, context, arguments) => - { - string value = ParseArgumentAndGenerate(arguments); - options.Template(writer, value); - }); - } - - private static string ParseArgumentAndGenerate(object[] arguments) - { - Check.Condition(arguments, args => args.Length == 1, nameof(arguments)); - Check.NotNull(arguments[0], "arguments[0]"); - - switch (arguments[0]) - { - case string pattern: - return new Xeger(pattern).Generate(); - } - - throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' cannot be used in Handlebars Xeger."); - } - } -} \ No newline at end of file diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index b9872c3cf..ed4a574ea 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -50,19 +50,7 @@ USE_ASPNETCORE;NET46 - - - - - - - - - - - - - + @@ -133,12 +121,12 @@ - - - - - - + + + + + + From efe76dc5c4b269c69d3dcca4f8d35b32f815f4e9 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 9 Feb 2021 20:35:23 +0100 Subject: [PATCH 13/13] , --- .../Transformers/Handlebars/WireMockHandlebarsHelpers.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs index e8b43cc32..7565b819f 100644 --- a/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs +++ b/src/WireMock.Net/Transformers/Handlebars/WireMockHandlebarsHelpers.cs @@ -16,8 +16,6 @@ public static void Register(IHandlebars handlebarsContext, IFileSystemHandler fi // Register https://github.com/StefH/Handlebars.Net.Helpers HandlebarsHelpers.Register(handlebarsContext, o => { - // o.UseCategoryPrefix = false; - o.CustomHelperPaths = new string[] { Directory.GetCurrentDirectory()