diff --git a/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs index d34d73d2..2426cf2c 100644 --- a/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs +++ b/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs @@ -25,7 +25,7 @@ namespace WireMock.Settings string SaveMappingForStatusCodePattern { get; set; } /// - /// Save the mapping for each request/response also to a file. (Note that SaveMapping must also be set to true.) + /// Save the mapping for each request/response to a .json mapping file. /// bool SaveMappingToFile { get; set; } diff --git a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs index a07bac25..a0bc937e 100644 --- a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs +++ b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs @@ -6,8 +6,10 @@ using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using FluentAssertions; +using Moq; using NFluent; using WireMock.Admin.Mappings; +using WireMock.Handlers; using WireMock.Matchers.Request; using WireMock.RequestBuilders; using WireMock.ResponseBuilders; @@ -51,6 +53,69 @@ namespace WireMock.Net.Tests Check.That(server.LogEntries).HasSize(1); } + [Fact] + public async Task WireMockServer_Proxy_With_SaveMapping_Is_True_And_SaveMappingToFile_Is_False_Should_AddInternalMappingOnly() + { + // Assign + var settings = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + Url = "http://www.google.com", + SaveMapping = true, + SaveMappingToFile = false + } + }; + var server = WireMockServer.Start(settings); + + // Act + var requestMessage = new HttpRequestMessage + { + Method = HttpMethod.Get, + RequestUri = new Uri(server.Urls[0]) + }; + var httpClientHandler = new HttpClientHandler { AllowAutoRedirect = false }; + await new HttpClient(httpClientHandler).SendAsync(requestMessage); + + // Assert + server.Mappings.Should().HaveCount(2); + } + + [Fact] + public async Task WireMockServer_Proxy_With_SaveMapping_Is_False_And_SaveMappingToFile_Is_True_ShouldSaveMappingToFile() + { + // Assign + var fileSystemHandlerMock = new Mock(); + fileSystemHandlerMock.Setup(f => f.GetMappingFolder()).Returns("m"); + + var settings = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + Url = "http://www.google.com", + SaveMapping = false, + SaveMappingToFile = true + }, + FileSystemHandler = fileSystemHandlerMock.Object + }; + var server = WireMockServer.Start(settings); + + // Act + var requestMessage = new HttpRequestMessage + { + Method = HttpMethod.Get, + RequestUri = new Uri(server.Urls[0]) + }; + var httpClientHandler = new HttpClientHandler { AllowAutoRedirect = false }; + await new HttpClient(httpClientHandler).SendAsync(requestMessage); + + // Assert + server.Mappings.Should().HaveCount(1); + + // Verify + fileSystemHandlerMock.Verify(f => f.WriteMappingFile(It.IsAny(), It.IsAny()), Times.Once); + } + [Fact] public async Task WireMockServer_Proxy_Should_log_proxied_requests() {