From 721c4fc9a3f41ec0c070ddc7037fcc24a82a6ad1 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Tue, 12 Dec 2023 13:57:27 +0100 Subject: [PATCH 01/14] Implement PrefixForSavedMappingFile --- .../Settings/ProxyAndRecordSettingsModel.cs | 5 + .../Serialization/MappingFileNameSanitizer.cs | 49 +++++++ .../Serialization/MappingToFileSaver.cs | 23 +-- .../Settings/ProxyAndRecordSettings.cs | 6 + .../Settings/WireMockServerSettingsParser.cs | 1 + .../MappingFileNameSanitizerTests.cs | 136 ++++++++++++++++++ 6 files changed, 200 insertions(+), 20 deletions(-) create mode 100644 src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs create mode 100644 test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs diff --git a/src/WireMock.Net.Abstractions/Admin/Settings/ProxyAndRecordSettingsModel.cs b/src/WireMock.Net.Abstractions/Admin/Settings/ProxyAndRecordSettingsModel.cs index 0e91132c8..fa09a5b05 100644 --- a/src/WireMock.Net.Abstractions/Admin/Settings/ProxyAndRecordSettingsModel.cs +++ b/src/WireMock.Net.Abstractions/Admin/Settings/ProxyAndRecordSettingsModel.cs @@ -69,6 +69,11 @@ public class ProxyAndRecordSettingsModel /// public bool AppendGuidToSavedMappingFile { get; set; } + /// + /// Set prefix for saved mapping file. + /// + public string PrefixForSavedMappingFile { get; set; } + /// /// Defines the Replace Settings. /// diff --git a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs new file mode 100644 index 000000000..0ddda3701 --- /dev/null +++ b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs @@ -0,0 +1,49 @@ +using System.IO; +using System.Linq; +using Stef.Validation; +using WireMock.Settings; + +namespace WireMock.Serialization; + +/// +/// Creates sanitized file names for mappings +/// +public class MappingFileNameSanitizer +{ + private readonly char _replaceChar = '_'; + + private readonly WireMockServerSettings _settings; + + public MappingFileNameSanitizer(WireMockServerSettings settings) + { + _settings = Guard.NotNull(settings); + } + + /// + /// Creates sanitized file names for mappings + /// + public string BuildSanitizedFileName(IMapping mapping) + { + const string mappingTitlePrefix = "Proxy Mapping for "; + string name; + if (!string.IsNullOrEmpty(mapping.Title)) + { + // remove 'Proxy Mapping for ' amd am extra space character after the HTTP request method + name = mapping.Title.Replace(mappingTitlePrefix, "").Replace(' '.ToString(), string.Empty); + if (_settings.ProxyAndRecordSettings?.AppendGuidToSavedMappingFile == true) + { + name += $"{_replaceChar}{mapping.Guid}"; + } + } + else + { + name = mapping.Guid.ToString(); + } + + if (!string.IsNullOrEmpty(_settings.ProxyAndRecordSettings?.PrefixForSavedMappingFile)) + { + name = $"{_settings.ProxyAndRecordSettings.PrefixForSavedMappingFile}{_replaceChar}{name}"; + } + return $"{Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, _replaceChar))}.json"; + } +} \ No newline at end of file diff --git a/src/WireMock.Net/Serialization/MappingToFileSaver.cs b/src/WireMock.Net/Serialization/MappingToFileSaver.cs index dcaa29127..7b548299b 100644 --- a/src/WireMock.Net/Serialization/MappingToFileSaver.cs +++ b/src/WireMock.Net/Serialization/MappingToFileSaver.cs @@ -10,11 +10,13 @@ internal class MappingToFileSaver { private readonly WireMockServerSettings _settings; private readonly MappingConverter _mappingConverter; + private readonly MappingFileNameSanitizer _fileNameSanitizer; public MappingToFileSaver(WireMockServerSettings settings, MappingConverter mappingConverter) { _settings = Guard.NotNull(settings); _mappingConverter = Guard.NotNull(mappingConverter); + _fileNameSanitizer = new MappingFileNameSanitizer(settings); } public void SaveMappingsToFile(IMapping[] mappings, string? folder = null) @@ -42,7 +44,7 @@ public void SaveMappingToFile(IMapping mapping, string? folder = null) var model = _mappingConverter.ToMappingModel(mapping); - var filename = BuildSanitizedFileName(mapping); + var filename = _fileNameSanitizer.BuildSanitizedFileName(mapping); var path = Path.Combine(folder, filename); Save(model, path); @@ -54,23 +56,4 @@ private void Save(object value, string path) _settings.FileSystemHandler.WriteMappingFile(path, JsonConvert.SerializeObject(value, JsonSerializationConstants.JsonSerializerSettingsDefault)); } - - private string BuildSanitizedFileName(IMapping mapping, char replaceChar = '_') - { - string name; - if (!string.IsNullOrEmpty(mapping.Title)) - { - name = mapping.Title!; - if (_settings.ProxyAndRecordSettings?.AppendGuidToSavedMappingFile == true) - { - name += $"{replaceChar}{mapping.Guid}"; - } - } - else - { - name = mapping.Guid.ToString(); - } - - return $"{Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, replaceChar))}.json"; - } } \ No newline at end of file diff --git a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs index eb8631636..b398df145 100644 --- a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs +++ b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs @@ -94,10 +94,16 @@ public string SaveMappingForStatusCodePattern /// Append an unique GUID to the filename from the saved mapping file. /// public bool AppendGuidToSavedMappingFile { get; set; } + + /// + /// Set prefix for saved mapping file. + /// + public string PrefixForSavedMappingFile { get; set; } /// /// Proxy all Api calls, irrespective of any condition /// [PublicAPI] public bool ProxyAll { get; set; } = false; + } \ No newline at end of file diff --git a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs index 962b94812..a0066361e 100644 --- a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs +++ b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs @@ -120,6 +120,7 @@ private static void ParseProxyAndRecordSettings(WireMockServerSettings settings, SaveMappingToFile = parser.GetBoolValue("SaveMappingToFile"), UseDefinedRequestMatchers = parser.GetBoolValue(nameof(ProxyAndRecordSettings.UseDefinedRequestMatchers)), AppendGuidToSavedMappingFile = parser.GetBoolValue(nameof(ProxyAndRecordSettings.AppendGuidToSavedMappingFile)), + PrefixForSavedMappingFile = parser.GetStringValue("PrefixForSavedMappingFile", null), Url = proxyUrl!, SaveMappingSettings = new ProxySaveMappingSettings { diff --git a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs new file mode 100644 index 000000000..0652c7bc5 --- /dev/null +++ b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs @@ -0,0 +1,136 @@ +using System; +using Moq; +using WireMock.Serialization; +using WireMock.Settings; +using Xunit; + +namespace WireMock.Net.Tests.Serialization; + +public class MappingFileNameSanitizerTests +{ + private readonly string _mappingGuid = "ce216a13-e7d6-42d7-91ac-8ae709e2add1"; + private readonly string _mappingTitle = + "Proxy Mapping for POST _ordermanagement_v1_orders_cancel"; + + [Fact] + public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns(_mappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + AppendGuidToSavedMappingFile = true + } + }; + + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal($"POST_ordermanagement_v1_orders_cancel_{_mappingGuid}.json", result); + } + + [Fact] + public void BuildSanitizedFileName_WithoutTitle_UsesGuid() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns((string?)null); + mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new () + }; + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal($"{_mappingGuid}.json", result); + } + + [Fact] + public void BuildSanitizedFileName_WithTitleAndGuid_NoAppendGuidSetting() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns(_mappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + AppendGuidToSavedMappingFile = false + } + }; + + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal("POST_ordermanagement_v1_orders_cancel.json", result); + } + + [Fact] + public void BuildSanitizedFileName_WithPrefix_AddsPrefix() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns(_mappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + PrefixForSavedMappingFile = "Prefix" + } + }; + + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel.json", result); + } + + [Fact] + public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetting() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns(_mappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + PrefixForSavedMappingFile = "Prefix", + AppendGuidToSavedMappingFile = true + } + }; + + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel_{_mappingGuid}.json", result); + } +} \ No newline at end of file From aee5ed01121cfd09a31febb52b514de7a8a7691f Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Tue, 12 Dec 2023 14:10:29 +0100 Subject: [PATCH 02/14] Add missing new line --- src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs index 0ddda3701..a1d3af2fd 100644 --- a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs +++ b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs @@ -46,4 +46,4 @@ public string BuildSanitizedFileName(IMapping mapping) } return $"{Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, _replaceChar))}.json"; } -} \ No newline at end of file +} From 869cfdc4116fb427290ff8052ac87cf03030d545 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Tue, 12 Dec 2023 14:11:54 +0100 Subject: [PATCH 03/14] Add missing new line --- .../Serialization/MappingFileNameSanitizerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs index 0652c7bc5..eccb88d59 100644 --- a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs +++ b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs @@ -133,4 +133,4 @@ public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetti // Assert Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel_{_mappingGuid}.json", result); } -} \ No newline at end of file +} From 0881bba8a626e1068cefbfa0f1e56a7efd06cf86 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Tue, 12 Dec 2023 14:14:04 +0100 Subject: [PATCH 04/14] Fix warning --- src/WireMock.Net/Settings/ProxyAndRecordSettings.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs index b398df145..66d3388ca 100644 --- a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs +++ b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs @@ -94,7 +94,7 @@ public string SaveMappingForStatusCodePattern /// Append an unique GUID to the filename from the saved mapping file. /// public bool AppendGuidToSavedMappingFile { get; set; } - + /// /// Set prefix for saved mapping file. /// @@ -105,5 +105,4 @@ public string SaveMappingForStatusCodePattern /// [PublicAPI] public bool ProxyAll { get; set; } = false; - -} \ No newline at end of file +} From 1e2ef9c44ae61823b1108b22662be0163f4e6555 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Tue, 12 Dec 2023 14:54:14 +0100 Subject: [PATCH 05/14] Fix typo --- src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs index a1d3af2fd..2af007553 100644 --- a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs +++ b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs @@ -28,7 +28,7 @@ public string BuildSanitizedFileName(IMapping mapping) string name; if (!string.IsNullOrEmpty(mapping.Title)) { - // remove 'Proxy Mapping for ' amd am extra space character after the HTTP request method + // remove 'Proxy Mapping for ' and an extra space character after the HTTP request method name = mapping.Title.Replace(mappingTitlePrefix, "").Replace(' '.ToString(), string.Empty); if (_settings.ProxyAndRecordSettings?.AppendGuidToSavedMappingFile == true) { From 5f8c133f31de027d6fe14e9a1c343d84fad5569e Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 08:35:54 +0100 Subject: [PATCH 06/14] Change from readonly to const --- .../Serialization/MappingFileNameSanitizer.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs index 2af007553..04ff8e8ab 100644 --- a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs +++ b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs @@ -10,7 +10,7 @@ namespace WireMock.Serialization; /// public class MappingFileNameSanitizer { - private readonly char _replaceChar = '_'; + private const char ReplaceChar = '_'; private readonly WireMockServerSettings _settings; @@ -32,7 +32,7 @@ public string BuildSanitizedFileName(IMapping mapping) name = mapping.Title.Replace(mappingTitlePrefix, "").Replace(' '.ToString(), string.Empty); if (_settings.ProxyAndRecordSettings?.AppendGuidToSavedMappingFile == true) { - name += $"{_replaceChar}{mapping.Guid}"; + name += $"{ReplaceChar}{mapping.Guid}"; } } else @@ -42,8 +42,8 @@ public string BuildSanitizedFileName(IMapping mapping) if (!string.IsNullOrEmpty(_settings.ProxyAndRecordSettings?.PrefixForSavedMappingFile)) { - name = $"{_settings.ProxyAndRecordSettings.PrefixForSavedMappingFile}{_replaceChar}{name}"; + name = $"{_settings.ProxyAndRecordSettings.PrefixForSavedMappingFile}{ReplaceChar}{name}"; } - return $"{Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, _replaceChar))}.json"; + return $"{Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, ReplaceChar))}.json"; } } From c778b4711adb17a919effe6dbcdd692c2402c693 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 08:37:29 +0100 Subject: [PATCH 07/14] Assign default value --- src/WireMock.Net/Settings/ProxyAndRecordSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs index 66d3388ca..e9fb05e9f 100644 --- a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs +++ b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs @@ -98,7 +98,7 @@ public string SaveMappingForStatusCodePattern /// /// Set prefix for saved mapping file. /// - public string PrefixForSavedMappingFile { get; set; } + public string PrefixForSavedMappingFile { get; set; } = "Proxy Mapping for "; /// /// Proxy all Api calls, irrespective of any condition From 2ab5bd59877054ce4c9c1e503fc4534db503523c Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 08:39:49 +0100 Subject: [PATCH 08/14] Use nameof() --- src/WireMock.Net/Settings/WireMockServerSettingsParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs index a0066361e..65a581200 100644 --- a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs +++ b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs @@ -120,7 +120,7 @@ private static void ParseProxyAndRecordSettings(WireMockServerSettings settings, SaveMappingToFile = parser.GetBoolValue("SaveMappingToFile"), UseDefinedRequestMatchers = parser.GetBoolValue(nameof(ProxyAndRecordSettings.UseDefinedRequestMatchers)), AppendGuidToSavedMappingFile = parser.GetBoolValue(nameof(ProxyAndRecordSettings.AppendGuidToSavedMappingFile)), - PrefixForSavedMappingFile = parser.GetStringValue("PrefixForSavedMappingFile", null), + PrefixForSavedMappingFile = parser.GetStringValue(nameof(ProxyAndRecordSettings.PrefixForSavedMappingFile), null), Url = proxyUrl!, SaveMappingSettings = new ProxySaveMappingSettings { From 552c202f9598314d94c5c2c9724cf48aa809bd85 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 08:41:00 +0100 Subject: [PATCH 09/14] Change from readonly to const --- .../MappingFileNameSanitizerTests.cs | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs index eccb88d59..04fb1e7e3 100644 --- a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs +++ b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs @@ -8,17 +8,16 @@ namespace WireMock.Net.Tests.Serialization; public class MappingFileNameSanitizerTests { - private readonly string _mappingGuid = "ce216a13-e7d6-42d7-91ac-8ae709e2add1"; - private readonly string _mappingTitle = - "Proxy Mapping for POST _ordermanagement_v1_orders_cancel"; + private const string MappingGuid = "ce216a13-e7d6-42d7-91ac-8ae709e2add1"; + private const string MappingTitle = "Proxy Mapping for POST _ordermanagement_v1_orders_cancel"; [Fact] public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() { // Arrange var mappingMock = new Mock(); - mappingMock.Setup(m => m.Title).Returns(_mappingTitle); - mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + mappingMock.Setup(m => m.Title).Returns(MappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); var settingsMock = new WireMockServerSettings { @@ -34,7 +33,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal($"POST_ordermanagement_v1_orders_cancel_{_mappingGuid}.json", result); + Assert.Equal($"POST_ordermanagement_v1_orders_cancel_{MappingGuid}.json", result); } [Fact] @@ -43,7 +42,7 @@ public void BuildSanitizedFileName_WithoutTitle_UsesGuid() // Arrange var mappingMock = new Mock(); mappingMock.Setup(m => m.Title).Returns((string?)null); - mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); var settingsMock = new WireMockServerSettings { @@ -55,7 +54,7 @@ public void BuildSanitizedFileName_WithoutTitle_UsesGuid() var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal($"{_mappingGuid}.json", result); + Assert.Equal($"{MappingGuid}.json", result); } [Fact] @@ -63,8 +62,8 @@ public void BuildSanitizedFileName_WithTitleAndGuid_NoAppendGuidSetting() { // Arrange var mappingMock = new Mock(); - mappingMock.Setup(m => m.Title).Returns(_mappingTitle); - mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + mappingMock.Setup(m => m.Title).Returns(MappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); var settingsMock = new WireMockServerSettings { @@ -88,8 +87,8 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefix() { // Arrange var mappingMock = new Mock(); - mappingMock.Setup(m => m.Title).Returns(_mappingTitle); - mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + mappingMock.Setup(m => m.Title).Returns(MappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); var settingsMock = new WireMockServerSettings { @@ -113,8 +112,8 @@ public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetti { // Arrange var mappingMock = new Mock(); - mappingMock.Setup(m => m.Title).Returns(_mappingTitle); - mappingMock.Setup(m => m.Guid).Returns(new Guid(_mappingGuid)); + mappingMock.Setup(m => m.Title).Returns(MappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); var settingsMock = new WireMockServerSettings { @@ -131,6 +130,6 @@ public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetti var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel_{_mappingGuid}.json", result); + Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel_{MappingGuid}.json", result); } } From 82ad15b8253aa4dc7ac1ffcfda115c875e14fa8c Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 08:48:59 +0100 Subject: [PATCH 10/14] Update tests --- .../MappingFileNameSanitizerTests.cs | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs index 04fb1e7e3..745991b89 100644 --- a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs +++ b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs @@ -33,7 +33,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal($"POST_ordermanagement_v1_orders_cancel_{MappingGuid}.json", result); + Assert.Equal($"Proxy Mapping for _POST_ordermanagement_v1_orders_cancel_{MappingGuid}.json", result); } [Fact] @@ -54,7 +54,7 @@ public void BuildSanitizedFileName_WithoutTitle_UsesGuid() var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal($"{MappingGuid}.json", result); + Assert.Equal($"Proxy Mapping for _{MappingGuid}.json", result); } [Fact] @@ -79,7 +79,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_NoAppendGuidSetting() var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); // Assert - Assert.Equal("POST_ordermanagement_v1_orders_cancel.json", result); + Assert.Equal("Proxy Mapping for _POST_ordermanagement_v1_orders_cancel.json", result); } [Fact] @@ -107,6 +107,31 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefix() Assert.Equal($"Prefix_POST_ordermanagement_v1_orders_cancel.json", result); } + [Fact] + public void BuildSanitizedFileName_WithPrefix_AddsPrefixEmptyString() + { + // Arrange + var mappingMock = new Mock(); + mappingMock.Setup(m => m.Title).Returns(MappingTitle); + mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); + + var settingsMock = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + PrefixForSavedMappingFile = string.Empty + } + }; + + var sanitizer = new MappingFileNameSanitizer(settingsMock); + + // Act + var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); + + // Assert + Assert.Equal($"POST_ordermanagement_v1_orders_cancel.json", result); + } + [Fact] public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetting() { From fdc0673c6f7838f05e7657b782daa7090294cb09 Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 09:12:55 +0100 Subject: [PATCH 11/14] Update failing test --- test/WireMock.Net.Tests/WireMockServer.Proxy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs index 95f85e0cd..1d7240eca 100644 --- a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs +++ b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs @@ -174,7 +174,7 @@ public async Task WireMockServer_Proxy_With_SaveMappingToFile_Is_True_ShouldSave server.Mappings.Should().HaveCount(2); // Verify - fileSystemHandlerMock.Verify(f => f.WriteMappingFile($"m{System.IO.Path.DirectorySeparatorChar}{title}.json", It.IsRegex(stringBody)), Times.Once); + fileSystemHandlerMock.Verify(f => f.WriteMappingFile($"m{System.IO.Path.DirectorySeparatorChar}Proxy Mapping for _{title}.json", It.IsRegex(stringBody)), Times.Once); } [Fact] From 725f74da5c2d02b8b88810804639914b99c4d06f Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 11:43:36 +0100 Subject: [PATCH 12/14] Rename settingsMock to settings --- .../MappingFileNameSanitizerTests.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs index 745991b89..2c0db1a42 100644 --- a/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs +++ b/test/WireMock.Net.Tests/Serialization/MappingFileNameSanitizerTests.cs @@ -19,7 +19,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() mappingMock.Setup(m => m.Title).Returns(MappingTitle); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new ProxyAndRecordSettings { @@ -27,7 +27,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_AppendsGuid() } }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); @@ -44,11 +44,11 @@ public void BuildSanitizedFileName_WithoutTitle_UsesGuid() mappingMock.Setup(m => m.Title).Returns((string?)null); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new () }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); @@ -65,7 +65,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_NoAppendGuidSetting() mappingMock.Setup(m => m.Title).Returns(MappingTitle); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new ProxyAndRecordSettings { @@ -73,7 +73,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_NoAppendGuidSetting() } }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); @@ -90,7 +90,7 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefix() mappingMock.Setup(m => m.Title).Returns(MappingTitle); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new ProxyAndRecordSettings { @@ -98,7 +98,7 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefix() } }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); @@ -115,7 +115,7 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefixEmptyString() mappingMock.Setup(m => m.Title).Returns(MappingTitle); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new ProxyAndRecordSettings { @@ -123,7 +123,7 @@ public void BuildSanitizedFileName_WithPrefix_AddsPrefixEmptyString() } }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); @@ -140,7 +140,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetti mappingMock.Setup(m => m.Title).Returns(MappingTitle); mappingMock.Setup(m => m.Guid).Returns(new Guid(MappingGuid)); - var settingsMock = new WireMockServerSettings + var settings = new WireMockServerSettings { ProxyAndRecordSettings = new ProxyAndRecordSettings { @@ -149,7 +149,7 @@ public void BuildSanitizedFileName_WithTitleAndGuid_WithPrefixAndAppendGuidSetti } }; - var sanitizer = new MappingFileNameSanitizer(settingsMock); + var sanitizer = new MappingFileNameSanitizer(settings); // Act var result = sanitizer.BuildSanitizedFileName(mappingMock.Object); From a2bac0d94ce04c420ac2afceaa083e210b381fbe Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 11:48:08 +0100 Subject: [PATCH 13/14] Create public const --- src/WireMock.Net/Settings/ProxyAndRecordSettings.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs index e9fb05e9f..ed1b4febe 100644 --- a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs +++ b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs @@ -7,6 +7,11 @@ namespace WireMock.Settings; /// public class ProxyAndRecordSettings : HttpClientSettings { + /// + /// Default prefix value for saved mapping file + /// + public const string DefaultPrefixForSavedMappingFile = "Proxy Mapping for "; + /// /// The URL to proxy. /// @@ -98,7 +103,7 @@ public string SaveMappingForStatusCodePattern /// /// Set prefix for saved mapping file. /// - public string PrefixForSavedMappingFile { get; set; } = "Proxy Mapping for "; + public string PrefixForSavedMappingFile { get; set; } = DefaultPrefixForSavedMappingFile; /// /// Proxy all Api calls, irrespective of any condition From 851cbfcff44e318f3b0abc126ca85da3009aa94a Mon Sep 17 00:00:00 2001 From: Mindaugas Laganeckas Date: Wed, 13 Dec 2023 11:48:49 +0100 Subject: [PATCH 14/14] Use const from ProxyAndRecordSettings --- src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs index 04ff8e8ab..8e5e73f09 100644 --- a/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs +++ b/src/WireMock.Net/Serialization/MappingFileNameSanitizer.cs @@ -24,12 +24,11 @@ public MappingFileNameSanitizer(WireMockServerSettings settings) /// public string BuildSanitizedFileName(IMapping mapping) { - const string mappingTitlePrefix = "Proxy Mapping for "; string name; if (!string.IsNullOrEmpty(mapping.Title)) { // remove 'Proxy Mapping for ' and an extra space character after the HTTP request method - name = mapping.Title.Replace(mappingTitlePrefix, "").Replace(' '.ToString(), string.Empty); + name = mapping.Title.Replace(ProxyAndRecordSettings.DefaultPrefixForSavedMappingFile, "").Replace(' '.ToString(), string.Empty); if (_settings.ProxyAndRecordSettings?.AppendGuidToSavedMappingFile == true) { name += $"{ReplaceChar}{mapping.Guid}";