diff --git a/Directory.Build.props b/Directory.Build.props
index 4b5a09de..cb15dbda 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -44,6 +44,11 @@
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -52,7 +57,5 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-->
-
-
diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs
index a707c1d0..324ac065 100644
--- a/src/WireMock.Net/Server/WireMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs
@@ -225,7 +225,7 @@ public partial class WireMockServer
if (FileHelper.TryReadMappingFileWithRetryAndDelay(_settings.FileSystemHandler, path, out var value))
{
var mappingModels = DeserializeJsonToArray(value);
- if (mappingModels.Length == 1 && Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename))
+ if (mappingModels.Length == 1 && Guid.TryParse(filenameWithoutExtension, out var guidFromFilename))
{
ConvertMappingAndRegisterAsRespondProvider(mappingModels[0], guidFromFilename, path);
}
@@ -783,7 +783,7 @@ public partial class WireMockServer
_settings.Logger.Info("MappingFile deleted : '{0}'", args.FullPath);
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(args.FullPath);
- if (Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename))
+ if (Guid.TryParse(filenameWithoutExtension, out var guidFromFilename))
{
DeleteMapping(guidFromFilename);
}
diff --git a/src/WireMock.Net/Util/StringUtils.cs b/src/WireMock.Net/Util/StringUtils.cs
index 5816967d..cf9d85ec 100644
--- a/src/WireMock.Net/Util/StringUtils.cs
+++ b/src/WireMock.Net/Util/StringUtils.cs
@@ -23,7 +23,7 @@ internal static class StringUtils
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 => Guid.TryParseExact(s, "D", 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 =>
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
index 77891d76..ee0477ce 100644
--- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs
@@ -105,7 +105,7 @@ public class ResponseWithHandlebarsRandomTests
[Theory]
[InlineData(ReplaceNodeOptions.EvaluateAndTryToConvert, JTokenType.Guid)]
[InlineData(ReplaceNodeOptions.Evaluate, JTokenType.String)]
- public async Task Response_ProvideResponseAsync_Handlebars_Random1_Guid(ReplaceNodeOptions options, JTokenType expected)
+ public async Task Response_ProvideResponseAsync_Handlebars_Random_Guid(ReplaceNodeOptions options, JTokenType expected)
{
// Assign
var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
@@ -114,7 +114,8 @@ public class ResponseWithHandlebarsRandomTests
.WithBodyAsJson(new
{
Guid1 = "{{Random Type=\"Guid\" Uppercase=false}}",
- Guid2 = "{{Random Type=\"Guid\"}}"
+ Guid2 = "{{Random Type=\"Guid\"}}",
+ Guid3 = "{{ String.Replace (Random Type=\"Guid\") \"-\" \"\" }}"
})
.WithTransformer(options);
@@ -127,6 +128,27 @@ public class ResponseWithHandlebarsRandomTests
jObject["Guid2"]!.Type.Should().Be(expected);
}
+ [Fact]
+ public async Task Response_ProvideResponseAsync_Handlebars_Random_StringReplaceGuid()
+ {
+ // Assign
+ var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp);
+
+ var responseBuilder = Response.Create()
+ .WithBodyAsJson(new
+ {
+ MyGuid = "{{ String.Replace (Random Type=\"Guid\") \"-\" \"\" }}"
+ })
+ .WithTransformer();
+
+ // Act
+ var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, request, _settings).ConfigureAwait(false);
+
+ // Assert
+ var jObject = JObject.FromObject(response.Message.BodyData!.BodyAsJson!);
+ jObject["MyGuid"]!.Type.Should().Be(JTokenType.String);
+ }
+
[Fact]
public async Task Response_ProvideResponseAsync_Handlebars_Random1_StringList()
{
diff --git a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs
index f9ab2753..17fb313b 100644
--- a/test/WireMock.Net.Tests/Util/StringUtilsTests.cs
+++ b/test/WireMock.Net.Tests/Util/StringUtilsTests.cs
@@ -97,7 +97,7 @@ public class StringUtilsTests
isConverted.Should().Be(expectedConversion);
if (isConverted)
{
- ((double) convertedValue).Should().BeApproximately(expectedValue, 0.01);
+ ((double)convertedValue).Should().BeApproximately(expectedValue, 0.01);
}
else
{
@@ -106,6 +106,10 @@ public class StringUtilsTests
}
[Theory]
+ [InlineData("3F2504E04F8911D39A0C0305E82C3301", false)]
+ [InlineData("{3F2504E04F8911D39A0C0305E82C3301}", false)]
+ [InlineData("(3F2504E04F8911D39A0C0305E82C3301)", false)]
+ [InlineData("{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}", false)]
[InlineData("3F2504E0-4F89-11D3-9A0C-0305E82C3301", true)]
[InlineData("00000000-0000-0000-0000-000000000000", true)]
[InlineData("3f2504e0-4f89-11d3-9a0c-0305e82c3301", true)] // Lowercase Guid