diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index b2a417ee..5e5ab385 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -82,8 +82,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Matchers.CShar EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Console.Net472.Classic", "examples\WireMock.Net.Console.Net472.Classic\WireMock.Net.Console.Net472.Classic.csproj", "{6580580B-1EFD-4922-B0EC-FF290DB279EE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.XamarinUI.Tests", "test\WireMock.Net.XamarinUI.Tests\WireMock.Net.XamarinUI.Tests.csproj", "{0DE14F1B-A51E-4B59-A87C-C6012DCD2844}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -206,14 +204,6 @@ Global {6580580B-1EFD-4922-B0EC-FF290DB279EE}.Debug|Any CPU.Build.0 = Debug|Any CPU {6580580B-1EFD-4922-B0EC-FF290DB279EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {6580580B-1EFD-4922-B0EC-FF290DB279EE}.Release|Any CPU.Build.0 = Release|Any CPU - {0DE14F1B-A51E-4B59-A87C-C6012DCD2844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DE14F1B-A51E-4B59-A87C-C6012DCD2844}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DE14F1B-A51E-4B59-A87C-C6012DCD2844}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DE14F1B-A51E-4B59-A87C-C6012DCD2844}.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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -247,9 +237,7 @@ 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} - {B6269AAC-170A-4346-8B9A-444DED3D9A44} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2} {6580580B-1EFD-4922-B0EC-FF290DB279EE} = {985E0ADB-D4B4-473A-AA40-567E279B7946} - {0DE14F1B-A51E-4B59-A87C-C6012DCD2844} = {0BB8B634-407A-4610-A91F-11586990767A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458} diff --git a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj index b7e0add6..48f876f0 100644 --- a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj +++ b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj @@ -32,11 +32,8 @@ 4 - - ..\..\packages\Handlebars.Net.1.9.5\lib\net452\Handlebars.dll - - - ..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + + ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll ..\..\packages\Microsoft.Owin.2.0.2\lib\net45\Microsoft.Owin.dll @@ -57,6 +54,7 @@ ..\..\packages\SimMetrics.Net.1.0.5\lib\net45\SimMetrics.Net.dll + diff --git a/examples/WireMock.Net.Service/packages.config b/examples/WireMock.Net.Service/packages.config index 1eef339c..8574a6d4 100644 --- a/examples/WireMock.Net.Service/packages.config +++ b/examples/WireMock.Net.Service/packages.config @@ -1,7 +1,6 @@  - - + diff --git a/examples/WireMock.Net.StandAlone.Net452/WireMock.Net.StandAlone.Net452.csproj b/examples/WireMock.Net.StandAlone.Net452/WireMock.Net.StandAlone.Net452.csproj index 3ed45e96..00a18588 100644 --- a/examples/WireMock.Net.StandAlone.Net452/WireMock.Net.StandAlone.Net452.csproj +++ b/examples/WireMock.Net.StandAlone.Net452/WireMock.Net.StandAlone.Net452.csproj @@ -39,8 +39,8 @@ WireMock.Net.StandAlone.Net452.Program - - ..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + + ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll ..\..\packages\Microsoft.Owin.Host.HttpListener.4.0.0\lib\net451\Microsoft.Owin.Host.HttpListener.dll @@ -49,12 +49,14 @@ ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll + diff --git a/examples/WireMock.Net.StandAlone.Net452/packages.config b/examples/WireMock.Net.StandAlone.Net452/packages.config index 63b1c4ba..da1f375a 100644 --- a/examples/WireMock.Net.StandAlone.Net452/packages.config +++ b/examples/WireMock.Net.StandAlone.Net452/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/WireMock.Net/IMapping.cs b/src/WireMock.Net/IMapping.cs index f7816a1e..01e557f0 100644 --- a/src/WireMock.Net/IMapping.cs +++ b/src/WireMock.Net/IMapping.cs @@ -103,8 +103,8 @@ namespace WireMock /// ProvideResponseAsync /// /// The request message. - /// The . - Task ProvideResponseAsync(RequestMessage requestMessage); + /// The including a new (optional) . + Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage); /// /// Gets the RequestMatchResult based on the RequestMessage. diff --git a/src/WireMock.Net/Mapping.cs b/src/WireMock.Net/Mapping.cs index 031c027a..f253b922 100644 --- a/src/WireMock.Net/Mapping.cs +++ b/src/WireMock.Net/Mapping.cs @@ -103,7 +103,7 @@ namespace WireMock } /// - public async Task ProvideResponseAsync(RequestMessage requestMessage) + public async Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage) { return await Provider.ProvideResponseAsync(requestMessage, Settings); } diff --git a/src/WireMock.Net/Models/BodyData.cs b/src/WireMock.Net/Models/BodyData.cs index 494465e5..1e7d54e0 100644 --- a/src/WireMock.Net/Models/BodyData.cs +++ b/src/WireMock.Net/Models/BodyData.cs @@ -6,7 +6,7 @@ namespace WireMock.Util /// /// BodyData /// - internal class BodyData : IBodyData + public class BodyData : IBodyData { /// public Encoding Encoding { get; set; } diff --git a/src/WireMock.Net/Owin/WireMockMiddleware.cs b/src/WireMock.Net/Owin/WireMockMiddleware.cs index e5b9eb92..3c49679a 100644 --- a/src/WireMock.Net/Owin/WireMockMiddleware.cs +++ b/src/WireMock.Net/Owin/WireMockMiddleware.cs @@ -129,15 +129,16 @@ namespace WireMock.Owin await Task.Delay(_options.RequestProcessingDelay.Value); } - response = await targetMapping.ProvideResponseAsync(request); + var (theResponse, theOptionalNewMapping) = await targetMapping.ProvideResponseAsync(request); + response = theResponse; var responseBuilder = targetMapping.Provider as Response; - if (!targetMapping.IsAdminInterface) + if (!targetMapping.IsAdminInterface && theOptionalNewMapping != null) { if (responseBuilder?.ProxyAndRecordSettings?.SaveMapping == true || targetMapping?.Settings?.ProxyAndRecordSettings?.SaveMapping == true) { - _options.Mappings.TryAdd(targetMapping.Guid, targetMapping); + _options.Mappings.TryAdd(theOptionalNewMapping.Guid, theOptionalNewMapping); } if (responseBuilder?.ProxyAndRecordSettings?.SaveMappingToFile == true || targetMapping?.Settings?.ProxyAndRecordSettings?.SaveMappingToFile == true) @@ -146,7 +147,7 @@ namespace WireMock.Owin var mappingConverter = new MappingConverter(matcherMapper); var mappingToFileSaver = new MappingToFileSaver(targetMapping.Settings, mappingConverter); - mappingToFileSaver.SaveMappingToFile(targetMapping); + mappingToFileSaver.SaveMappingToFile(theOptionalNewMapping); } } diff --git a/src/WireMock.Net/Proxy/ProxyHelper.cs b/src/WireMock.Net/Proxy/ProxyHelper.cs index 96d12519..d778a355 100644 --- a/src/WireMock.Net/Proxy/ProxyHelper.cs +++ b/src/WireMock.Net/Proxy/ProxyHelper.cs @@ -1,111 +1,111 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Threading.Tasks; -using JetBrains.Annotations; -using WireMock.Http; -using WireMock.Matchers; -using WireMock.RequestBuilders; -using WireMock.ResponseBuilders; -using WireMock.Settings; -using WireMock.Types; -using WireMock.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using JetBrains.Annotations; +using WireMock.Http; +using WireMock.Matchers; +using WireMock.RequestBuilders; +using WireMock.ResponseBuilders; +using WireMock.Settings; +using WireMock.Types; +using WireMock.Util; using WireMock.Validation; -namespace WireMock.Proxy -{ - internal class ProxyHelper - { - private readonly IWireMockServerSettings _settings; - - public ProxyHelper([NotNull] IWireMockServerSettings settings) - { - Check.NotNull(settings, nameof(settings)); - _settings = settings; - } - - public async Task<(ResponseMessage ResponseMessage, IMapping Mapping)> SendAsync( - [NotNull] IProxyAndRecordSettings proxyAndRecordSettings, - [NotNull] HttpClient client, - [NotNull] RequestMessage requestMessage, - [NotNull] string 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); - - // Create HttpRequestMessage - var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, url); - - // Call the URL - var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead); - - // Create ResponseMessage - bool deserializeJson = !_settings.DisableJsonBodyParsing.GetValueOrDefault(false); - bool decompressGzipAndDeflate = !_settings.DisableRequestBodyDecompressing.GetValueOrDefault(false); - - var responseMessage = await HttpResponseMessageHelper.CreateAsync(httpResponseMessage, requiredUri, originalUri, deserializeJson, decompressGzipAndDeflate); - - IMapping mapping = null; - if (HttpStatusRangeParser.IsMatch(proxyAndRecordSettings.SaveMappingForStatusCodePattern, responseMessage.StatusCode) && - (proxyAndRecordSettings.SaveMapping || proxyAndRecordSettings.SaveMappingToFile)) - { - mapping = ToMapping(proxyAndRecordSettings, requestMessage, responseMessage); - } - - return (responseMessage, mapping); - } - - private IMapping ToMapping(IProxyAndRecordSettings proxyAndRecordSettings, RequestMessage requestMessage, ResponseMessage responseMessage) - { - string[] excludedHeaders = proxyAndRecordSettings.ExcludedHeaders ?? new string[] { }; - string[] excludedCookies = proxyAndRecordSettings.ExcludedCookies ?? new string[] { }; - - var request = Request.Create(); - request.WithPath(requestMessage.Path); - request.UsingMethod(requestMessage.Method); - - requestMessage.Query.Loop((key, value) => request.WithParam(key, false, value.ToArray())); - requestMessage.Cookies.Loop((key, value) => - { - if (!excludedCookies.Contains(key, StringComparer.OrdinalIgnoreCase)) - { - request.WithCookie(key, value); - } - }); - - var allExcludedHeaders = new List(excludedHeaders) { "Cookie" }; - requestMessage.Headers.Loop((key, value) => - { - if (!allExcludedHeaders.Contains(key, StringComparer.OrdinalIgnoreCase)) - { - request.WithHeader(key, value.ToArray()); - } - }); - - bool throwExceptionWhenMatcherFails = _settings.ThrowExceptionWhenMatcherFails == true; - switch (requestMessage.BodyData?.DetectedBodyType) - { - case BodyType.Json: - request.WithBody(new JsonMatcher(MatchBehaviour.AcceptOnMatch, requestMessage.BodyData.BodyAsJson, true, throwExceptionWhenMatcherFails)); - break; - - case BodyType.String: - request.WithBody(new ExactMatcher(MatchBehaviour.AcceptOnMatch, throwExceptionWhenMatcherFails, requestMessage.BodyData.BodyAsString)); - break; - - case BodyType.Bytes: - request.WithBody(new ExactObjectMatcher(MatchBehaviour.AcceptOnMatch, requestMessage.BodyData.BodyAsBytes, throwExceptionWhenMatcherFails)); - break; - } - - var response = Response.Create(responseMessage); - - return new Mapping(Guid.NewGuid(), string.Empty, null, _settings, request, response, 0, null, null, null, null, null); - } - } +namespace WireMock.Proxy +{ + internal class ProxyHelper + { + private readonly IWireMockServerSettings _settings; + + public ProxyHelper([NotNull] IWireMockServerSettings settings) + { + Check.NotNull(settings, nameof(settings)); + _settings = settings; + } + + public async Task<(ResponseMessage Message, IMapping Mapping)> SendAsync( + [NotNull] IProxyAndRecordSettings proxyAndRecordSettings, + [NotNull] HttpClient client, + [NotNull] RequestMessage requestMessage, + [NotNull] string 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); + + // Create HttpRequestMessage + var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, url); + + // Call the URL + var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead); + + // Create ResponseMessage + bool deserializeJson = !_settings.DisableJsonBodyParsing.GetValueOrDefault(false); + bool decompressGzipAndDeflate = !_settings.DisableRequestBodyDecompressing.GetValueOrDefault(false); + + var responseMessage = await HttpResponseMessageHelper.CreateAsync(httpResponseMessage, requiredUri, originalUri, deserializeJson, decompressGzipAndDeflate); + + IMapping mapping = null; + if (HttpStatusRangeParser.IsMatch(proxyAndRecordSettings.SaveMappingForStatusCodePattern, responseMessage.StatusCode) && + (proxyAndRecordSettings.SaveMapping || proxyAndRecordSettings.SaveMappingToFile)) + { + mapping = ToMapping(proxyAndRecordSettings, requestMessage, responseMessage); + } + + return (responseMessage, mapping); + } + + private IMapping ToMapping(IProxyAndRecordSettings proxyAndRecordSettings, RequestMessage requestMessage, ResponseMessage responseMessage) + { + string[] excludedHeaders = proxyAndRecordSettings.ExcludedHeaders ?? new string[] { }; + string[] excludedCookies = proxyAndRecordSettings.ExcludedCookies ?? new string[] { }; + + var request = Request.Create(); + request.WithPath(requestMessage.Path); + request.UsingMethod(requestMessage.Method); + + requestMessage.Query.Loop((key, value) => request.WithParam(key, false, value.ToArray())); + requestMessage.Cookies.Loop((key, value) => + { + if (!excludedCookies.Contains(key, StringComparer.OrdinalIgnoreCase)) + { + request.WithCookie(key, value); + } + }); + + var allExcludedHeaders = new List(excludedHeaders) { "Cookie" }; + requestMessage.Headers.Loop((key, value) => + { + if (!allExcludedHeaders.Contains(key, StringComparer.OrdinalIgnoreCase)) + { + request.WithHeader(key, value.ToArray()); + } + }); + + bool throwExceptionWhenMatcherFails = _settings.ThrowExceptionWhenMatcherFails == true; + switch (requestMessage.BodyData?.DetectedBodyType) + { + case BodyType.Json: + request.WithBody(new JsonMatcher(MatchBehaviour.AcceptOnMatch, requestMessage.BodyData.BodyAsJson, true, throwExceptionWhenMatcherFails)); + break; + + case BodyType.String: + request.WithBody(new ExactMatcher(MatchBehaviour.AcceptOnMatch, throwExceptionWhenMatcherFails, requestMessage.BodyData.BodyAsString)); + break; + + case BodyType.Bytes: + request.WithBody(new ExactObjectMatcher(MatchBehaviour.AcceptOnMatch, requestMessage.BodyData.BodyAsBytes, throwExceptionWhenMatcherFails)); + break; + } + + var response = Response.Create(responseMessage); + + return new Mapping(Guid.NewGuid(), string.Empty, null, _settings, request, response, 0, null, null, null, null, null); + } + } } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseBuilders/Response.cs b/src/WireMock.Net/ResponseBuilders/Response.cs index 742fce28..638d05bd 100644 --- a/src/WireMock.Net/ResponseBuilders/Response.cs +++ b/src/WireMock.Net/ResponseBuilders/Response.cs @@ -335,7 +335,7 @@ namespace WireMock.ResponseBuilders } /// - public async Task ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) + public async Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { Check.NotNull(requestMessage, nameof(requestMessage)); Check.NotNull(settings, nameof(settings)); @@ -361,14 +361,12 @@ namespace WireMock.ResponseBuilders var proxyHelper = new ProxyHelper(settings); - var (proxyResponseMessage, _) = await proxyHelper.SendAsync( + return await proxyHelper.SendAsync( ProxyAndRecordSettings, _httpClientForProxy, requestMessage, requestMessage.ProxyUrl ); - - return proxyResponseMessage; } ResponseMessage responseMessage; @@ -420,7 +418,7 @@ namespace WireMock.ResponseBuilders throw new NotImplementedException($"TransformerType '{TransformerType}' is not supported."); } - return responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile); + return (responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile), null); } if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true) @@ -428,7 +426,7 @@ namespace WireMock.ResponseBuilders ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile); } - return responseMessage; + return (responseMessage, null); } } } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs b/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs index 230701a8..41a8f7b6 100644 --- a/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs +++ b/src/WireMock.Net/ResponseProviders/DynamicAsyncResponseProvider.cs @@ -13,9 +13,9 @@ namespace WireMock.ResponseProviders _responseMessageFunc = responseMessageFunc; } - public Task ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) + public async Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { - return _responseMessageFunc(requestMessage); + return (await _responseMessageFunc(requestMessage), null); } } } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs b/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs index 01396f5e..2ec19ebc 100644 --- a/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs +++ b/src/WireMock.Net/ResponseProviders/DynamicResponseProvider.cs @@ -13,9 +13,10 @@ namespace WireMock.ResponseProviders _responseMessageFunc = responseMessageFunc; } - public Task ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) + public Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { - return Task.FromResult(_responseMessageFunc(requestMessage)); + (ResponseMessage responseMessage, IMapping mapping) result = (_responseMessageFunc(requestMessage), null); + return Task.FromResult(result); } } } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseProviders/IResponseProvider.cs b/src/WireMock.Net/ResponseProviders/IResponseProvider.cs index 6d33443b..16eaae64 100644 --- a/src/WireMock.Net/ResponseProviders/IResponseProvider.cs +++ b/src/WireMock.Net/ResponseProviders/IResponseProvider.cs @@ -16,7 +16,7 @@ namespace WireMock.ResponseProviders /// /// The request. /// The WireMockServerSettings. - /// The . - Task ProvideResponseAsync([NotNull] RequestMessage requestMessage, [NotNull] IWireMockServerSettings settings); + /// The including a new (optional) . + Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync([NotNull] RequestMessage requestMessage, [NotNull] IWireMockServerSettings settings); } } \ No newline at end of file diff --git a/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs b/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs index fb4b6c6d..a67e269e 100644 --- a/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs +++ b/src/WireMock.Net/ResponseProviders/ProxyAsyncResponseProvider.cs @@ -15,9 +15,9 @@ namespace WireMock.ResponseProviders _settings = settings; } - public Task ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) + public async Task<(ResponseMessage Message, IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { - return _responseMessageFunc(requestMessage, _settings); + return (await _responseMessageFunc(requestMessage, _settings), null); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/Owin/WireMockMiddlewareTests.cs b/test/WireMock.Net.Tests/Owin/WireMockMiddlewareTests.cs index f4035a5f..92afea4f 100644 --- a/test/WireMock.Net.Tests/Owin/WireMockMiddlewareTests.cs +++ b/test/WireMock.Net.Tests/Owin/WireMockMiddlewareTests.cs @@ -13,7 +13,6 @@ using WireMock.Matchers; using System.Collections.Generic; using WireMock.Admin.Mappings; using WireMock.Admin.Requests; -using WireMock.ResponseProviders; using WireMock.Settings; using FluentAssertions; using WireMock.Handlers; @@ -177,7 +176,8 @@ namespace WireMock.Net.Tests.Owin _mappingMock.SetupGet(m => m.Provider).Returns(responseBuilder); _mappingMock.SetupGet(m => m.Settings).Returns(settings); - _mappingMock.Setup(m => m.ProvideResponseAsync(It.IsAny())).ReturnsAsync(new ResponseMessage()); + var newMappingFromProxy = new Mapping(Guid.NewGuid(), "", null, settings, Request.Create(), Response.Create(), 0, null, null, null, null, null); + _mappingMock.Setup(m => m.ProvideResponseAsync(It.IsAny())).ReturnsAsync((new ResponseMessage(), newMappingFromProxy)); var requestBuilder = Request.Create().UsingAnyMethod(); _mappingMock.SetupGet(m => m.RequestMatcher).Returns(requestBuilder); @@ -230,7 +230,8 @@ namespace WireMock.Net.Tests.Owin _mappingMock.SetupGet(m => m.Provider).Returns(responseBuilder); _mappingMock.SetupGet(m => m.Settings).Returns(settings); - _mappingMock.Setup(m => m.ProvideResponseAsync(It.IsAny())).ReturnsAsync(new ResponseMessage()); + var newMappingFromProxy = new Mapping(Guid.NewGuid(), "", null, settings, Request.Create(), Response.Create(), 0, null, null, null, null, null); + _mappingMock.Setup(m => m.ProvideResponseAsync(It.IsAny())).ReturnsAsync((new ResponseMessage(), newMappingFromProxy)); var requestBuilder = Request.Create().UsingAnyMethod(); _mappingMock.SetupGet(m => m.RequestMatcher).Returns(requestBuilder); diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs index b2ae10ee..0c3e17ae 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseCreateTests.cs @@ -18,13 +18,13 @@ namespace WireMock.Net.Tests.ResponseBuilders var responseMessage = new ResponseMessage { StatusCode = 500 }; var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", "::1"); - var response = Response.Create(() => responseMessage); + var responseBuilder = Response.Create(() => responseMessage); // Act - var providedResponse = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(providedResponse).Equals(responseMessage); + Check.That(response.Message).Equals(responseMessage); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs index 9e1dd29c..8b47c9ca 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyTests.cs @@ -40,15 +40,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body); - var response = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.String, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.String, Encoding.ASCII); // act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // then - Check.That(responseMessage.BodyData.BodyAsString).Equals("01"); - Check.That(responseMessage.BodyData.BodyAsBytes).IsNull(); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsString).Equals("01"); + Check.That(response.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -62,15 +62,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body); - var response = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.SameAsSource, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody(new byte[] { 48, 49 }, BodyDestinationFormat.SameAsSource, Encoding.ASCII); // act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // then - Check.That(responseMessage.BodyData.BodyAsBytes).ContainsExactly(new byte[] { 48, 49 }); - Check.That(responseMessage.BodyData.BodyAsString).IsNull(); - Check.That(responseMessage.BodyData.Encoding).IsNull(); + Check.That(response.Message.BodyData.BodyAsBytes).ContainsExactly(new byte[] { 48, 49 }); + Check.That(response.Message.BodyData.BodyAsString).IsNull(); + Check.That(response.Message.BodyData.Encoding).IsNull(); } [Fact] @@ -84,14 +84,14 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body); - var response = Response.Create().WithBody("test", null, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody("test", null, Encoding.ASCII); // act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // then - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -106,14 +106,14 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body); object x = new { value = "test" }; - var response = Response.Create().WithBodyAsJson(x, Encoding.ASCII); + var responseBuilder = Response.Create().WithBodyAsJson(x, Encoding.ASCII); // act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // then - Check.That(responseMessage.BodyData.BodyAsJson).Equals(x); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsJson).Equals(x); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -128,14 +128,14 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body); object x = new { message = "Hello" }; - var response = Response.Create().WithBodyAsJson(x, true); + var responseBuilder = Response.Create().WithBodyAsJson(x, true); // act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // then - Check.That(responseMessage.BodyData.BodyAsJson).Equals(x); - Check.That(responseMessage.BodyData.BodyAsJsonIndented).IsEqualTo(true); + Check.That(response.Message.BodyData.BodyAsJson).Equals(x); + Check.That(response.Message.BodyData.BodyAsJsonIndented).IsEqualTo(true); } [Fact] @@ -144,16 +144,16 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); - var response = Response.Create().WithBody("r", BodyDestinationFormat.SameAsSource, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody("r", BodyDestinationFormat.SameAsSource, Encoding.ASCII); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsBytes).IsNull(); - Check.That(responseMessage.BodyData.BodyAsJson).IsNull(); - Check.That(responseMessage.BodyData.BodyAsString).Equals("r"); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response.Message.BodyData.BodyAsJson).IsNull(); + Check.That(response.Message.BodyData.BodyAsString).Equals("r"); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -162,16 +162,16 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); - var response = Response.Create().WithBody("r", BodyDestinationFormat.Bytes, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody("r", BodyDestinationFormat.Bytes, Encoding.ASCII); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsNull(); - Check.That(responseMessage.BodyData.BodyAsJson).IsNull(); - Check.That(responseMessage.BodyData.BodyAsBytes).IsNotNull(); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsString).IsNull(); + Check.That(response.Message.BodyData.BodyAsJson).IsNull(); + Check.That(response.Message.BodyData.BodyAsBytes).IsNotNull(); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -180,16 +180,16 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); - var response = Response.Create().WithBody("{ \"value\": 42 }", BodyDestinationFormat.Json, Encoding.ASCII); + var responseBuilder = Response.Create().WithBody("{ \"value\": 42 }", BodyDestinationFormat.Json, Encoding.ASCII); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsNull(); - Check.That(responseMessage.BodyData.BodyAsBytes).IsNull(); - Check.That(((dynamic)responseMessage.BodyData.BodyAsJson).value).Equals(42); - Check.That(responseMessage.BodyData.Encoding).Equals(Encoding.ASCII); + Check.That(response.Message.BodyData.BodyAsString).IsNull(); + Check.That(response.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(((dynamic)response.Message.BodyData.BodyAsJson).value).Equals(42); + Check.That(response.Message.BodyData.Encoding).Equals(Encoding.ASCII); } [Fact] @@ -198,23 +198,23 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost/test"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithStatusCode(500) .WithHeader("H1", "X1") .WithHeader("H2", "X2") .WithBody(req => $"path: {req.Path}"); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsEqualTo("path: /test"); - Check.That(responseMessage.BodyData.BodyAsBytes).IsNull(); - Check.That(responseMessage.BodyData.BodyAsJson).IsNull(); - Check.That(responseMessage.BodyData.Encoding.CodePage).Equals(Encoding.UTF8.CodePage); - Check.That(responseMessage.StatusCode).IsEqualTo(500); - Check.That(responseMessage.Headers["H1"].ToString()).IsEqualTo("X1"); - Check.That(responseMessage.Headers["H2"].ToString()).IsEqualTo("X2"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("path: /test"); + Check.That(response.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response.Message.BodyData.BodyAsJson).IsNull(); + Check.That(response.Message.BodyData.Encoding.CodePage).Equals(Encoding.UTF8.CodePage); + Check.That(response.Message.StatusCode).IsEqualTo(500); + Check.That(response.Message.Headers["H1"].ToString()).IsEqualTo("X1"); + Check.That(response.Message.Headers["H2"].ToString()).IsEqualTo("X2"); } [Fact] @@ -223,7 +223,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost/test"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithStatusCode(500) .WithHeader("H1", "X1") .WithHeader("H2", "X2") @@ -234,16 +234,16 @@ namespace WireMock.Net.Tests.ResponseBuilders }); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsEqualTo("path: /test"); - Check.That(responseMessage.BodyData.BodyAsBytes).IsNull(); - Check.That(responseMessage.BodyData.BodyAsJson).IsNull(); - Check.That(responseMessage.BodyData.Encoding.CodePage).Equals(Encoding.UTF8.CodePage); - Check.That(responseMessage.StatusCode).IsEqualTo(500); - Check.That(responseMessage.Headers["H1"].ToString()).IsEqualTo("X1"); - Check.That(responseMessage.Headers["H2"].ToString()).IsEqualTo("X2"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("path: /test"); + Check.That(response.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response.Message.BodyData.BodyAsJson).IsNull(); + Check.That(response.Message.BodyData.Encoding.CodePage).Equals(Encoding.UTF8.CodePage); + Check.That(response.Message.StatusCode).IsEqualTo(500); + Check.That(response.Message.Headers["H1"].ToString()).IsEqualTo("X1"); + Check.That(response.Message.Headers["H2"].ToString()).IsEqualTo("X2"); } [Fact] @@ -256,25 +256,25 @@ namespace WireMock.Net.Tests.ResponseBuilders var request1 = new RequestMessage(new UrlDetails($"http://localhost/test?id={request1Id}"), "GET", ClientIp); var request2 = new RequestMessage(new UrlDetails($"http://localhost/test?id={request2Id}"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithStatusCode(200) .WithBodyAsJson(JObject.Parse("{ \"id\": \"{{request.query.id}}\" }")) .WithTransformer(); // Act - var response1Message = await response.ProvideResponseAsync(request1, _settings); - var response2Message = await response.ProvideResponseAsync(request2, _settings); + var response1 = await responseBuilder.ProvideResponseAsync(request1, _settings); + var response2 = await responseBuilder.ProvideResponseAsync(request2, _settings); // Assert - Check.That(((JToken)response1Message.BodyData.BodyAsJson).SelectToken("id")?.Value()).IsEqualTo(request1Id); - Check.That(response1Message.BodyData.BodyAsBytes).IsNull(); - Check.That(response1Message.BodyData.BodyAsString).IsNull(); - Check.That(response1Message.StatusCode).IsEqualTo(200); + Check.That(((JToken)response1.Message.BodyData.BodyAsJson).SelectToken("id")?.Value()).IsEqualTo(request1Id); + Check.That(response1.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response1.Message.BodyData.BodyAsString).IsNull(); + Check.That(response1.Message.StatusCode).IsEqualTo(200); - Check.That(((JToken)response2Message.BodyData.BodyAsJson).SelectToken("id")?.Value()).IsEqualTo(request2Id); - Check.That(response2Message.BodyData.BodyAsBytes).IsNull(); - Check.That(response2Message.BodyData.BodyAsString).IsNull(); - Check.That(response2Message.StatusCode).IsEqualTo(200); + Check.That(((JToken)response2.Message.BodyData.BodyAsJson).SelectToken("id")?.Value()).IsEqualTo(request2Id); + Check.That(response2.Message.BodyData.BodyAsBytes).IsNull(); + Check.That(response2.Message.BodyData.BodyAsString).IsNull(); + Check.That(response2.Message.StatusCode).IsEqualTo(200); } [Fact] @@ -285,12 +285,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request1 = new RequestMessage(new UrlDetails("http://localhost/__admin/files/filename.txt"), "PUT", ClientIp, bodyDataAsFile); - var response = Response.Create().WithStatusCode(200).WithBody(fileContents); + var responseBuilder = Response.Create().WithStatusCode(200).WithBody(fileContents); - var provideResponseAsync = await response.ProvideResponseAsync(request1, _settings); + var response = await responseBuilder.ProvideResponseAsync(request1, _settings); - Check.That(provideResponseAsync.StatusCode).IsEqualTo(200); - Check.That(provideResponseAsync.BodyData.BodyAsString).Contains(fileContents); + Check.That(response.Message.StatusCode).IsEqualTo(200); + Check.That(response.Message.BodyData.BodyAsString).Contains(fileContents); } [Fact] @@ -301,12 +301,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request1 = new RequestMessage(new UrlDetails("http://localhost/__admin/files/filename.txt"), "GET", ClientIp, bodyDataAsFile); - var response = Response.Create().WithStatusCode(200).WithBody(fileContents); + var responseBuilder = Response.Create().WithStatusCode(200).WithBody(fileContents); - var provideResponseAsync = await response.ProvideResponseAsync(request1, _settings); + var response = await responseBuilder.ProvideResponseAsync(request1, _settings); - Check.That(provideResponseAsync.StatusCode).IsEqualTo(200); - Check.That(provideResponseAsync.BodyData.BodyAsString).Contains(fileContents); + Check.That(response.Message.StatusCode).IsEqualTo(200); + Check.That(response.Message.BodyData.BodyAsString).Contains(fileContents); } [Fact] @@ -317,12 +317,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request1 = new RequestMessage(new UrlDetails("http://localhost/__admin/files/filename.txt"), "DELETE", ClientIp, bodyDataAsFile); - var response = Response.Create().WithStatusCode(200).WithBody("File deleted."); + var responseBuilder = Response.Create().WithStatusCode(200).WithBody("File deleted."); - var provideResponseAsync = await response.ProvideResponseAsync(request1, _settings); + var response = await responseBuilder.ProvideResponseAsync(request1, _settings); - Check.That(provideResponseAsync.StatusCode).IsEqualTo(200); - Check.That(provideResponseAsync.BodyData.BodyAsString).Contains("File deleted."); + Check.That(response.Message.StatusCode).IsEqualTo(200); + Check.That(response.Message.BodyData.BodyAsString).Contains("File deleted."); } } } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs index 84607830..d4bc5793 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs @@ -33,7 +33,7 @@ namespace WireMock.Net.Tests.ResponseBuilders { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1"); - var response = Response.Create() + var responseBuilder = Response.Create() .WithCallback(async request => { await Task.Delay(1); @@ -50,11 +50,11 @@ namespace WireMock.Net.Tests.ResponseBuilders }); // Act - var responseMessage = await response.ProvideResponseAsync(requestMessage, _settings); + var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings); // Assert - responseMessage.BodyData.BodyAsString.Should().Be("/fooBar"); - responseMessage.StatusCode.Should().Be(302); + response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); + response.Message.StatusCode.Should().Be(302); } [Fact] @@ -62,7 +62,7 @@ namespace WireMock.Net.Tests.ResponseBuilders { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1"); - var response = Response.Create() + var responseBuilder = Response.Create() .WithCallback(request => new ResponseMessage { BodyData = new BodyData @@ -74,11 +74,11 @@ namespace WireMock.Net.Tests.ResponseBuilders }); // Act - var responseMessage = await response.ProvideResponseAsync(requestMessage, _settings); + var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings); // Assert - responseMessage.BodyData.BodyAsString.Should().Be("/fooBar"); - responseMessage.StatusCode.Should().Be(302); + response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); + response.Message.StatusCode.Should().Be(302); } [Fact] @@ -87,7 +87,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var header = "X-UserId"; var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1"); - var response = Response.Create() + var responseBuilder = Response.Create() .WithCallback(request => new ResponseMessage { BodyData = new BodyData @@ -105,12 +105,12 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithHeader(header, "Stef"); // Act - var responseMessage = await response.ProvideResponseAsync(requestMessage, _settings); + var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings); // Assert - responseMessage.BodyData.BodyAsString.Should().Be("/fooBar"); - responseMessage.StatusCode.Should().Be(HttpStatusCode.Accepted); - responseMessage.Headers[header].Should().ContainSingle("Stef"); + response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); + response.Message.StatusCode.Should().Be(HttpStatusCode.Accepted); + response.Message.Headers[header].Should().ContainSingle("Stef"); } [Fact] @@ -118,7 +118,7 @@ namespace WireMock.Net.Tests.ResponseBuilders { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1"); - var response = Response.Create() + var responseBuilder = Response.Create() .WithCallback(request => new ResponseMessage { BodyData = new BodyData @@ -131,11 +131,11 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(requestMessage, _settings); + var response = await responseBuilder.ProvideResponseAsync(requestMessage, _settings); // Assert - responseMessage.BodyData.BodyAsString.Should().Be("/fooBar"); - responseMessage.StatusCode.Should().Be(302); + response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); + response.Message.StatusCode.Should().Be(302); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs index d4311fed..378f4d1d 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs @@ -21,12 +21,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp); // Act - var response = Response.Create().WithFault(faultType); - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var responseBuilder = Response.Create().WithFault(faultType); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - responseMessage.FaultType.Should().Be(faultType); - responseMessage.FaultPercentage.Should().BeNull(); + response.Message.FaultType.Should().Be(faultType); + response.Message.FaultPercentage.Should().BeNull(); } [Theory] @@ -37,12 +37,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp); // Act - var response = Response.Create().WithFault(faultType, percentage); - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var responseBuilder = Response.Create().WithFault(faultType, percentage); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - responseMessage.FaultType.Should().Be(faultType); - responseMessage.FaultPercentage.Should().Be(percentage); + response.Message.FaultType.Should().Be(faultType); + response.Message.FaultPercentage.Should().Be(percentage); } } } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs index 533d5e86..a0e8428e 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsFileTests.cs @@ -1,100 +1,99 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using HandlebarsDotNet; -using Moq; -using Newtonsoft.Json.Linq; -using NFluent; -using WireMock.Handlers; -using WireMock.Models; -using WireMock.ResponseBuilders; -using WireMock.Settings; -using Xunit; - -namespace WireMock.Net.Tests.ResponseBuilders -{ - public class ResponseWithHandlebarsFileTests - { - private readonly Mock _filesystemHandlerMock; - private readonly WireMockServerSettings _settings = new WireMockServerSettings(); - private const string ClientIp = "::1"; - - public ResponseWithHandlebarsFileTests() - { - _filesystemHandlerMock = new Mock(MockBehavior.Strict); - _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc"); - - _settings.FileSystemHandler = _filesystemHandlerMock.Object; - } - - [Fact] - public async Task Response_ProvideResponseAsync_Handlebars_File() - { - // Assign - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - - var response = Response.Create() - .WithBodyAsJson(new - { - Data = "{{File \"x.json\"}}" - }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["Data"].Value()).Equals("abc"); - - // Verify - _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once); - _filesystemHandlerMock.VerifyNoOtherCalls(); - } - - [Fact] - public async Task Response_ProvideResponseAsync_Handlebars_File_Replace() - { - // Assign - var request = new RequestMessage(new UrlDetails("http://localhost:1234?id=x"), "GET", ClientIp); - - var response = Response.Create() - .WithBodyAsJson(new - { - Data = "{{File \"{{request.query.id}}.json\"}}" - }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["Data"].Value()).Equals("abc"); - - // Verify - _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once); - _filesystemHandlerMock.VerifyNoOtherCalls(); - } - - [Fact] - public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Throws_HandlebarsException() - { - // Assign - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - - var response = Response.Create() - .WithBodyAsJson(new - { - Data = "{{File}}" - }) - .WithTransformer(); - - // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); - - // Verify - _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString(It.IsAny()), Times.Never); - _filesystemHandlerMock.VerifyNoOtherCalls(); - } - } +using Moq; +using Newtonsoft.Json.Linq; +using NFluent; +using WireMock.Handlers; +using WireMock.Models; +using WireMock.ResponseBuilders; +using WireMock.Settings; +using Xunit; + +namespace WireMock.Net.Tests.ResponseBuilders +{ + public class ResponseWithHandlebarsFileTests + { + private readonly Mock _filesystemHandlerMock; + private readonly WireMockServerSettings _settings = new WireMockServerSettings(); + private const string ClientIp = "::1"; + + public ResponseWithHandlebarsFileTests() + { + _filesystemHandlerMock = new Mock(MockBehavior.Strict); + _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc"); + + _settings.FileSystemHandler = _filesystemHandlerMock.Object; + } + + [Fact] + public async Task Response_ProvideResponseAsync_Handlebars_File() + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + Data = "{{File \"x.json\"}}" + }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["Data"].Value()).Equals("abc"); + + // Verify + _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once); + _filesystemHandlerMock.VerifyNoOtherCalls(); + } + + [Fact] + public async Task Response_ProvideResponseAsync_Handlebars_File_Replace() + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost:1234?id=x"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + Data = "{{File \"{{request.query.id}}.json\"}}" + }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["Data"].Value()).Equals("abc"); + + // Verify + _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString("x.json"), Times.Once); + _filesystemHandlerMock.VerifyNoOtherCalls(); + } + + [Fact] + public void Response_ProvideResponseAsync_Handlebars_File_WithMissingArgument_Throws_HandlebarsException() + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new + { + Data = "{{File}}" + }) + .WithTransformer(); + + // Act + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); + + // Verify + _filesystemHandlerMock.Verify(fs => fs.ReadResponseBodyAsString(It.IsAny()), Times.Never); + _filesystemHandlerMock.VerifyNoOtherCalls(); + } + } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs index 6b8d08fc..fc222296 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsHelpersTests.cs @@ -34,15 +34,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{String.Uppercase request.body}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("ABC"); + Check.That(response.Message.BodyData.BodyAsString).Equals("ABC"); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs index 6091d155..c71768f3 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsJsonPathTests.cs @@ -71,16 +71,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}" }) .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["x"]).IsNotNull(); Check.That(j["x"]["Name"].ToString()).Equals("Acme Co"); } @@ -97,16 +97,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBodyAsJson(new { x = "{{JsonPath.SelectToken request.body \"..Price\"}}" }) .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["x"].Value()).Equals(99); } @@ -151,16 +151,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBody("{{JsonPath.SelectToken request.body \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}"); + Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}"); } [Fact] @@ -204,16 +204,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBody("{{JsonPath.SelectToken request.bodyAsJson \"$.Manufacturers[?(@.Name == 'Acme Co')]\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}"); + Check.That(response.Message.BodyData.BodyAsString).Equals($"{{{Environment.NewLine} \"Name\": \"Acme Co\",{Environment.NewLine} \"Products\": [{Environment.NewLine} {{{Environment.NewLine} \"Name\": \"Anvil\",{Environment.NewLine} \"Price\": 50{Environment.NewLine} }}{Environment.NewLine} ]{Environment.NewLine}}}"); } [Fact] @@ -257,16 +257,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%"); + Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%"); } [Fact] @@ -310,16 +310,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBody("{{#JsonPath.SelectTokens request.bodyAsJson \"$..Products[?(@.Price >= 50)].Name\"}}{{#each this}}%{{@index}}:{{this}}%{{/each}}{{/JsonPath.SelectTokens}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%"); + Check.That(response.Message.BodyData.BodyAsString).Equals("%0:Anvil%%1:Elbow Grease%"); } [Fact] @@ -339,13 +339,13 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/json") .WithBody("{{#JsonPath.SelectTokens request.body \"$..Products[?(@.Price >= 50)].Name\"}}{{id}} {{value}},{{/JsonPath.SelectTokens}}") .WithTransformer(); // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); } [Fact] @@ -364,15 +364,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, bodyData); string jsonPath = "\"$.MyUniqueNumber\""; - var response = Response.Create() + var responseBuilder = Response.Create() .WithTransformer() .WithBodyFromFile(@"c:\\{{JsonPath.SelectToken request.body " + jsonPath + "}}\\test.json"); // why use a \\ here ? // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsFile).Equals(@"c:\1\test.json"); + Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.json"); } } } \ 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 36f1c39d..6fc457a5 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsLinqTests.cs @@ -1,249 +1,249 @@ -using System; -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using FluentAssertions; using HandlebarsDotNet; -using Moq; -using Newtonsoft.Json.Linq; -using NFluent; -using WireMock.Handlers; -using WireMock.Models; -using WireMock.ResponseBuilders; -using WireMock.Settings; -using WireMock.Types; -using WireMock.Util; -using Xunit; - -namespace WireMock.Net.Tests.ResponseBuilders -{ - public class ResponseWithHandlebarsLinqTests - { - private readonly Mock _filesystemHandlerMock; - private readonly WireMockServerSettings _settings = new WireMockServerSettings(); - - public ResponseWithHandlebarsLinqTests() - { - _filesystemHandlerMock = new Mock(MockBehavior.Strict); - _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc"); - - _settings.FileSystemHandler = _filesystemHandlerMock.Object; - } - - [Fact] - public async Task Response_ProvideResponse_Handlebars_Linq1_String0() - { - // Assign - var body = new BodyData(); - - var request = new RequestMessage(new UrlDetails("http://localhost:1234/pathtest"), "POST", "::1", body); - - var response = Response.Create() - .WithHeader("Content-Type", "application/json") - .WithBodyAsJson(new { x = "{{Linq request.Path 'it'}}" }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"]).IsNotNull(); - Check.That(j["x"].ToString()).Equals("/pathtest"); - } - - [Fact] - public async Task Response_ProvideResponse_Handlebars_Linq1_String1() - { - // Assign - var body = new BodyData - { - BodyAsJson = new JObject - { - { "Id", new JValue(9) }, - { "Name", new JValue("Test") } - }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithHeader("Content-Type", "application/json") - .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'it.Name + \"_123\"' }}" }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"]).IsNotNull(); - Check.That(j["x"].ToString()).Equals("Test_123"); - } - - [Fact] - public async Task Response_ProvideResponse_Handlebars_Linq1_String2() - { - // Assign - var body = new BodyData - { - BodyAsJson = new JObject - { - { "Id", new JValue(9) }, - { "Name", new JValue("Test") } - }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithHeader("Content-Type", "application/json") - .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}" }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"]).IsNotNull(); - Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }"); - } - - [Fact] - public async Task Response_ProvideResponse_Handlebars_Linq2_Object() - { - // Assign - var body = new BodyData - { - BodyAsJson = new JObject - { - { "Id", new JValue(9) }, - { "Name", new JValue("Test") } - }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithHeader("Content-Type", "application/json") - .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}{{this}}{{/Linq}}" }) - .WithTransformer(); - - // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); - - // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); - Check.That(j["x"]).IsNotNull(); - Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }"); - } - - [Fact] - public void Response_ProvideResponse_Handlebars_Linq_Throws_ArgumentException() - { - // Assign - var body = new BodyData - { - BodyAsJson = new { x = "x" }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 1}}" }) - .WithTransformer(); - - // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); - } - - [Fact] - public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentNullException() - { - // Assign - var body = new BodyData(); - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithBodyAsJson(new { x = "{{Linq request.body 'Name'}}" }) - .WithTransformer(); - - // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); - } - - [Fact] - public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException() - { - // Assign - var body = new BodyData(); - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson}} ''" }) - .WithTransformer(); - - // Act - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); - } - - [Fact] - public void Response_ProvideResponse_Handlebars_Linq1_ParseError_Throws_ExceptionMessage() - { - // Assign - var body = new BodyData - { - BodyAsJson = new JObject - { - { "Id", new JValue(9) }, - { "Name", new JValue("Test") } - }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson '---' }}" }) - .WithTransformer(); - - // Act - Func a = async () => await response.ProvideResponseAsync(request, _settings); - - // Assert - a.Should().Throw(); - } - - [Fact] - public void Response_ProvideResponse_Handlebars_Linq2_ParseError_Throws_ExceptionMessage() - { - // Assign - var body = new BodyData - { - BodyAsJson = new JObject - { - { "Id", new JValue(9) }, - { "Name", new JValue("Test") } - }, - DetectedBodyType = BodyType.Json - }; - - var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); - - var response = Response.Create() - .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson '---' }}{{this}}{{/Linq}}" }) - .WithTransformer(); - - // Act - Func a = async () => await response.ProvideResponseAsync(request, _settings); - - // Assert - a.Should().Throw(); - } - } +using Moq; +using Newtonsoft.Json.Linq; +using NFluent; +using WireMock.Handlers; +using WireMock.Models; +using WireMock.ResponseBuilders; +using WireMock.Settings; +using WireMock.Types; +using WireMock.Util; +using Xunit; + +namespace WireMock.Net.Tests.ResponseBuilders +{ + public class ResponseWithHandlebarsLinqTests + { + private readonly Mock _filesystemHandlerMock; + private readonly WireMockServerSettings _settings = new WireMockServerSettings(); + + public ResponseWithHandlebarsLinqTests() + { + _filesystemHandlerMock = new Mock(MockBehavior.Strict); + _filesystemHandlerMock.Setup(fs => fs.ReadResponseBodyAsString(It.IsAny())).Returns("abc"); + + _settings.FileSystemHandler = _filesystemHandlerMock.Object; + } + + [Fact] + public async Task Response_ProvideResponse_Handlebars_Linq1_String0() + { + // Assign + var body = new BodyData(); + + var request = new RequestMessage(new UrlDetails("http://localhost:1234/pathtest"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithHeader("Content-Type", "application/json") + .WithBodyAsJson(new { x = "{{Linq request.Path 'it'}}" }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["x"]).IsNotNull(); + Check.That(j["x"].ToString()).Equals("/pathtest"); + } + + [Fact] + public async Task Response_ProvideResponse_Handlebars_Linq1_String1() + { + // Assign + var body = new BodyData + { + BodyAsJson = new JObject + { + { "Id", new JValue(9) }, + { "Name", new JValue("Test") } + }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithHeader("Content-Type", "application/json") + .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'it.Name + \"_123\"' }}" }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["x"]).IsNotNull(); + Check.That(j["x"].ToString()).Equals("Test_123"); + } + + [Fact] + public async Task Response_ProvideResponse_Handlebars_Linq1_String2() + { + // Assign + var body = new BodyData + { + BodyAsJson = new JObject + { + { "Id", new JValue(9) }, + { "Name", new JValue("Test") } + }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithHeader("Content-Type", "application/json") + .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}" }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["x"]).IsNotNull(); + Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }"); + } + + [Fact] + public async Task Response_ProvideResponse_Handlebars_Linq2_Object() + { + // Assign + var body = new BodyData + { + BodyAsJson = new JObject + { + { "Id", new JValue(9) }, + { "Name", new JValue("Test") } + }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithHeader("Content-Type", "application/json") + .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson 'new(it.Name + \"_123\" as N, it.Id as I)' }}{{this}}{{/Linq}}" }) + .WithTransformer(); + + // Act + var response = await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); + Check.That(j["x"]).IsNotNull(); + Check.That(j["x"].ToString()).Equals("{ N = Test_123, I = 9 }"); + } + + [Fact] + public void Response_ProvideResponse_Handlebars_Linq_Throws_ArgumentException() + { + // Assign + var body = new BodyData + { + BodyAsJson = new { x = "x" }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson 1}}" }) + .WithTransformer(); + + // Act + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); + } + + [Fact] + public void Response_ProvideResponse_Handlebars_Linq1_Throws_ArgumentNullException() + { + // Assign + var body = new BodyData(); + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new { x = "{{Linq request.body 'Name'}}" }) + .WithTransformer(); + + // Act + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); + } + + [Fact] + public void Response_ProvideResponse_Handlebars_Linq1_Throws_HandlebarsException() + { + // Assign + var body = new BodyData(); + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson}} ''" }) + .WithTransformer(); + + // Act + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); + } + + [Fact] + public void Response_ProvideResponse_Handlebars_Linq1_ParseError_Throws_ExceptionMessage() + { + // Assign + var body = new BodyData + { + BodyAsJson = new JObject + { + { "Id", new JValue(9) }, + { "Name", new JValue("Test") } + }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new { x = "{{Linq request.bodyAsJson '---' }}" }) + .WithTransformer(); + + // Act + Func a = async () => await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + a.Should().Throw(); + } + + [Fact] + public void Response_ProvideResponse_Handlebars_Linq2_ParseError_Throws_ExceptionMessage() + { + // Assign + var body = new BodyData + { + BodyAsJson = new JObject + { + { "Id", new JValue(9) }, + { "Name", new JValue("Test") } + }, + DetectedBodyType = BodyType.Json + }; + + var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", "::1", body); + + var responseBuilder = Response.Create() + .WithBodyAsJson(new { x = "{{#Linq request.bodyAsJson '---' }}{{this}}{{/Linq}}" }) + .WithTransformer(); + + // Act + Func a = async () => await responseBuilder.ProvideResponseAsync(request, _settings); + + // Assert + a.Should().Throw(); + } + } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs index 75d2d5f6..c14d0bf2 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRandomTests.cs @@ -32,7 +32,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Text = "{{Random Type=\"Text\" Min=8 Max=20}}", @@ -43,10 +43,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["Text"].Value()).IsNotEmpty(); Check.That(j["Integer"].Value()).IsEqualTo(1000); Check.That(j["Long"].Value()).IsStrictlyGreaterThan(77777777).And.IsStrictlyLessThan(99999999); @@ -58,7 +58,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Value = "{{Random Type=\"Boolean\"}}" @@ -66,10 +66,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["Value"].Type).IsEqualTo(JTokenType.Boolean); } @@ -79,7 +79,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Guid1 = "{{Random Type=\"Guid\" Uppercase=false}}", @@ -88,10 +88,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); string guid1 = j["Guid1"].Value(); Check.That(guid1.ToUpper()).IsNotEqualTo(guid1); string guid2 = j["Guid2"].Value(); @@ -104,7 +104,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { StringValue = "{{Random Type=\"StringList\" Values=[\"a\", \"b\", \"c\"]}}" @@ -112,10 +112,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); string value = j["StringValue"].Value(); Check.That(new[] { "a", "b", "c" }.Contains(value)).IsTrue(); } @@ -126,7 +126,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Integer = "{{#Random Type=\"Integer\" Min=10000000 Max=99999999}}{{this}}{{/Random}}", @@ -134,10 +134,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["Integer"].Value()).IsStrictlyGreaterThan(10000000).And.IsStrictlyLessThan(99999999); } } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs index 2a8ae6c9..529f6ca4 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsRegexTests.cs @@ -35,15 +35,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{Regex.Match request.body \"^(\\w+)$\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("abc"); + Check.That(response.Message.BodyData.BodyAsString).Equals("abc"); } [Fact] @@ -54,15 +54,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{Regex.Match request.body \"^?0$\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals(""); + Check.That(response.Message.BodyData.BodyAsString).Equals(""); } [Fact] @@ -73,15 +73,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{Regex.Match request.body \"^?0$\" \"d\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("d"); + Check.That(response.Message.BodyData.BodyAsString).Equals("d"); } [Fact] @@ -92,15 +92,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this.port}}-{{this.proto}}{{/Regex.Match}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("5000-https"); + Check.That(response.Message.BodyData.BodyAsString).Equals("5000-https"); } [Fact] @@ -111,15 +111,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{this}}{{/Regex.Match}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals(""); + Check.That(response.Message.BodyData.BodyAsString).Equals(""); } [Fact] @@ -130,15 +130,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{#Regex.Match request.body \"^(?\\w+)://[^/]+?(?\\d+)/?\" \"x\"}}{{this}}{{/Regex.Match}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("x"); + Check.That(response.Message.BodyData.BodyAsString).Equals("x"); } [Fact] @@ -149,12 +149,12 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{#Regex.Match request.bodyAsJson \"^(?\\w+)://[^/]+?(?\\d+)/?\"}}{{/Regex.Match}}") .WithTransformer(); // Act and Assert - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs index 48baf5f9..894d61b0 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXPathTests.cs @@ -46,16 +46,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/xml") .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - var nav = new XmlDocument { InnerXml = responseMessage.BodyData.BodyAsString }.CreateNavigator(); + var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator(); var node = nav.XPath2SelectSingleNode("/response/todo-item"); Check.That(node.Value).Equals("abc"); Check.That(node.GetAttribute("id", "")).Equals("a1"); @@ -77,16 +77,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/xml") .WithBody("{{XPath.SelectSingleNode request.body \"/todo-list/todo-item[1]/text()\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsEqualTo("abc"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("abc"); } [Fact] @@ -105,16 +105,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/xml") .WithBody("{{XPath.SelectNodes request.body \"/todo-list/todo-item\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - var nav = new XmlDocument { InnerXml = responseMessage.BodyData.BodyAsString }.CreateNavigator(); + var nav = new XmlDocument { InnerXml = response.Message.BodyData.BodyAsString }.CreateNavigator(); var nodes = nav.XPath2SelectNodes("/response/todo-item"); Check.That(nodes.Count + 1).IsEqualTo(3); } @@ -135,16 +135,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/xml") .WithBody("{{XPath.Evaluate request.body \"boolean(/todo-list[count(todo-item) = 3])\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsEqualIgnoringCase("True"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualIgnoringCase("True"); } [Fact] @@ -163,16 +163,16 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithHeader("Content-Type", "application/xml") .WithBody("{{XPath.Evaluate request.body \"string(/todo-list/todo-item[1]/@id)\"}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).IsEqualTo("a1"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualTo("a1"); } } } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs index 31fc805a..c0a87f7c 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHandlebarsXegerTests.cs @@ -31,7 +31,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Number = "{{Xeger.Generate \"[1-9]{1}\\d{3}\"}}", @@ -40,10 +40,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999); Check.That(j["Postcode"].Value()).IsNotEmpty(); } @@ -54,7 +54,7 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { Number = "{{#Xeger.Generate \"[1-9]{1}\\d{3}\"}}{{this}}{{/Xeger.Generate}}", @@ -63,10 +63,10 @@ namespace WireMock.Net.Tests.ResponseBuilders .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - JObject j = JObject.FromObject(responseMessage.BodyData.BodyAsJson); + JObject j = JObject.FromObject(response.Message.BodyData.BodyAsJson); Check.That(j["Number"].Value()).IsStrictlyGreaterThan(1000).And.IsStrictlyLessThan(9999); Check.That(j["Postcode"].Value()).IsNotEmpty(); } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs index 217eb325..87120b0c 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithHeadersTests.cs @@ -28,7 +28,7 @@ namespace WireMock.Net.Tests.ResponseBuilders var response = await builder.ProvideResponseAsync(requestMock, _settings); // Assert - Check.That(response.Headers[headerName].ToString()).Equals(headerValue); + Check.That(response.Message.Headers[headerName].ToString()).Equals(headerValue); } [Theory] @@ -44,7 +44,7 @@ namespace WireMock.Net.Tests.ResponseBuilders var response = await builder.ProvideResponseAsync(requestMock, _settings); // Assert - Check.That(response.Headers[headerName].ToArray()).Equals(headerValues); + Check.That(response.Message.Headers[headerName].ToArray()).Equals(headerValues); } [Fact] @@ -59,7 +59,7 @@ namespace WireMock.Net.Tests.ResponseBuilders var responseMessage = await response.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.Headers["h"]).ContainsExactly("x"); + Check.That(responseMessage.Message.Headers["h"]).ContainsExactly("x"); } [Fact] @@ -68,13 +68,13 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); var headers = new Dictionary { { "h", new[] { "x" } } }; - var response = Response.Create().WithHeaders(headers); + var responseBuilder = Response.Create().WithHeaders(headers); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.Headers["h"]).ContainsExactly("x"); + Check.That(response.Message.Headers["h"]).ContainsExactly("x"); } [Fact] @@ -83,13 +83,13 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost"), "GET", ClientIp); var headers = new Dictionary> { { "h", new WireMockList("x") } }; - var response = Response.Create().WithHeaders(headers); + var builder = Response.Create().WithHeaders(headers); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await builder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.Headers["h"]).ContainsExactly("x"); + Check.That(response.Message.Headers["h"]).ContainsExactly("x"); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs index 14f357f1..eb948942 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithProxyTests.cs @@ -46,16 +46,16 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var headers = new Dictionary { { "Content-Type", new[] { "application/xml" } } }; var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}{prepend}/{_guid}{append}"), "POST", ClientIp, new BodyData { DetectedBodyType = BodyType.Json, BodyAsJson = new { a = 1 } }, headers); - var response = Response.Create().WithProxy(_server.Urls[0]); + var responseBuilder = Response.Create().WithProxy(_server.Urls[0]); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert Check.That(request.ProxyUrl).IsNotNull(); - Check.That(responseMessage.BodyData.BodyAsString).IsEqualTo(expectedBody); - Check.That(responseMessage.StatusCode).IsEqualTo(201); - Check.That(responseMessage.Headers["Content-Type"].ToString()).IsEqualTo("application/json"); + Check.That(response.Message.BodyData.BodyAsString).IsEqualTo(expectedBody); + Check.That(response.Message.StatusCode).IsEqualTo(201); + Check.That(response.Message.Headers["Content-Type"].ToString()).IsEqualTo("application/json"); } [Fact] @@ -72,12 +72,12 @@ namespace WireMock.Net.Tests.ResponseBuilders Password = "y" } }; - var response = Response.Create().WithProxy(settings); + var responseBuilder = Response.Create().WithProxy(settings); // Act var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}/{_guid}"), "GET", ClientIp); - Check.ThatAsyncCode(() => response.ProvideResponseAsync(request, _settings)).Throws(); + Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws(); } public void Dispose() diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs index e0e8f680..c72e58df 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithScribanTests.cs @@ -40,13 +40,13 @@ namespace WireMock.Net.Tests.ResponseBuilders var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock")); var request = new RequestMessage(urlDetails, "GET", ClientIp); - var response = Response.Create().WithTransformer(TransformerType.ScribanDotLiquid); + var responseBuilder = Response.Create().WithTransformer(TransformerType.ScribanDotLiquid); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - responseMessage.BodyData.Should().BeNull(); + response.Message.BodyData.Should().BeNull(); } [Fact] @@ -60,15 +60,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}") .WithTransformer(TransformerType.Scriban); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt"); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs index 8535ba7c..dc14c951 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithStatusCodeTests.cs @@ -24,26 +24,26 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/fault"), "GET", ClientIp); // Act - var response = Response.Create(); + var responseBuilder = Response.Create(); switch (statusCode) { case string statusCodeAsString: - response = response.WithStatusCode(statusCodeAsString); + responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString); break; case int statusCodeAInteger: - response = response.WithStatusCode(statusCodeAInteger); + responseBuilder = responseBuilder.WithStatusCode(statusCodeAInteger); break; case HttpStatusCode statusCodeAsEnum: - response = response.WithStatusCode(statusCodeAsEnum); + responseBuilder = responseBuilder.WithStatusCode(statusCodeAsEnum); break; } - var responseMessage = await response.ProvideResponseAsync(request, _settingsMock.Object); + var response = await responseBuilder.ProvideResponseAsync(request, _settingsMock.Object); // Assert - responseMessage.StatusCode.Should().Be(expectedStatusCode); + response.Message.StatusCode.Should().Be(expectedStatusCode); } } } diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs index e3aeec50..61bea898 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithTransformerTests.cs @@ -46,13 +46,13 @@ namespace WireMock.Net.Tests.ResponseBuilders var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock")); var request = new RequestMessage(urlDetails, "GET", ClientIp); - var response = Response.Create().WithTransformer(transformerType); + var responseBuilder = Response.Create().WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - responseMessage.BodyData.Should().BeNull(); + response.Message.BodyData.Should().BeNull(); } [Theory] @@ -69,15 +69,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POSt", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test {{request.Url}} {{request.Path}} {{request.Method}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost/foo /foo POSt"); } [Theory] @@ -93,15 +93,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock")); var request = new RequestMessage(urlDetails, httpMethod, ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("url={{request.Url}} absoluteurl={{request.AbsoluteUrl}} path={{request.Path}} absolutepath={{request.AbsolutePath}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("url=http://localhost/a/b absoluteurl=http://localhost/wiremock/a/b path=/a/b absolutepath=/wiremock/a/b"); + Check.That(response.Message.BodyData.BodyAsString).Equals("url=http://localhost/a/b absoluteurl=http://localhost/wiremock/a/b path=/a/b absolutepath=/wiremock/a/b"); } [Fact] @@ -111,15 +111,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock")); var request = new RequestMessage(urlDetails, "POST", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("a wiremock"); + Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock"); } [Theory(Skip = "Invalid token `OpenBracket`")] @@ -131,15 +131,15 @@ namespace WireMock.Net.Tests.ResponseBuilders var urlDetails = UrlUtils.Parse(new Uri("http://localhost/wiremock/a/b"), new PathString("/wiremock")); var request = new RequestMessage(urlDetails, "POST", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{request.PathSegments.[0]}} {{request.AbsolutePathSegments.[0]}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("a wiremock"); + Check.That(response.Message.BodyData.BodyAsString).Equals("a wiremock"); } [Fact] @@ -153,15 +153,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test keya=1,2 idx=1 idx=2 keyb=5"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1,2 idx=1 idx=2 keyb=5"); } [Theory(Skip = "Invalid token `OpenBracket`")] @@ -177,15 +177,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=1&a=2&b=5"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test keya={{request.query.a}} idx={{request.query.a.[0]}} idx={{request.query.a.[1]}} keyb={{request.query.b}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test keya=1 idx=1 idx=2 keyb=5"); } [Fact] @@ -199,17 +199,17 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithStatusCode("{{request.query.a}}") .WithBody("test") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.StatusCode).Equals("400"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.StatusCode).Equals("400"); } [Theory(Skip = "WireMockList is not supported by Scriban")] @@ -225,17 +225,17 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithStatusCode("{{request.Query.a}}") .WithBody("test") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.StatusCode).Equals("400"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.StatusCode).Equals("400"); } [Theory] @@ -252,16 +252,16 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo?a=400"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.StatusCode).Equals(null); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.StatusCode).Equals(null); } [Fact] @@ -275,15 +275,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } }); - var response = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}").WithBody("test").WithTransformer(); + var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}").WithBody("test").WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.Headers).ContainsKey("x"); - Check.That(responseMessage.Headers["x"]).ContainsExactly("text/plain"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.Headers).ContainsKey("x"); + Check.That(response.Message.Headers["x"]).ContainsExactly("text/plain"); } [Fact] @@ -297,16 +297,16 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } }); - var response = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}", "{{request.url}}").WithBody("test").WithTransformer(); + var responseBuilder = Response.Create().WithHeader("x", "{{request.headers.Content-Type}}", "{{request.url}}").WithBody("test").WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.Headers).ContainsKey("x"); - Check.That(responseMessage.Headers["x"]).Contains("text/plain"); - Check.That(responseMessage.Headers["x"]).Contains("http://localhost/foo"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.Headers).ContainsKey("x"); + Check.That(response.Message.Headers["x"]).Contains("text/plain"); + Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo"); } [Theory(Skip = "WireMockList is not supported by Scriban")] @@ -322,16 +322,16 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "POST", ClientIp, body, new Dictionary { { "Content-Type", new[] { "text/plain" } } }); - var response = Response.Create().WithHeader("x", "{{request.Headers[\"Content-Type\"]}}", "{{request.Url}}").WithBody("test").WithTransformer(transformerType); + var responseBuilder = Response.Create().WithHeader("x", "{{request.Headers[\"Content-Type\"]}}", "{{request.Url}}").WithBody("test").WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test"); - Check.That(responseMessage.Headers).ContainsKey("x"); - Check.That(responseMessage.Headers["x"]).Contains("text/plain"); - Check.That(responseMessage.Headers["x"]).Contains("http://localhost/foo"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test"); + Check.That(response.Message.Headers).ContainsKey("x"); + Check.That(response.Message.Headers["x"]).Contains("text/plain"); + Check.That(response.Message.Headers["x"]).Contains("http://localhost/foo"); } [Theory] @@ -348,15 +348,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost:1234"), "POST", ClientIp, body); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("test {{request.Origin}} {{request.Port}} {{request.Protocol}} {{request.Host}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsString).Equals("test http://localhost:1234 1234 http localhost"); + Check.That(response.Message.BodyData.BodyAsString).Equals("test http://localhost:1234 1234 http localhost"); } [Theory] @@ -375,15 +375,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new { x = "test {{request.Path}}" }) .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("{\"x\":\"test /foo_object\"}"); + Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"x\":\"test /foo_object\"}"); } [Theory] @@ -402,15 +402,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_array"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson(new[] { "first", "{{request.path}}", "{{request.bodyAsJson.a}}", "{{request.bodyAsJson.b}}", "last" }) .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("[\"first\",\"/foo_array\",\"test 1\",\"test 2\",\"last\"]"); + Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("[\"first\",\"/foo_array\",\"test 1\",\"test 2\",\"last\"]"); } [Fact] @@ -419,15 +419,15 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithTransformer() .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml"); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); + Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); } [Theory(Skip = @"Does not work in Scriban --> c:\\[""1""]\\test.xml")] @@ -438,15 +438,15 @@ namespace WireMock.Net.Tests.ResponseBuilders // Assign var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithTransformer(transformerType) .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml"); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); + Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); } [Theory] @@ -463,17 +463,17 @@ namespace WireMock.Net.Tests.ResponseBuilders var request = new RequestMessage(new UrlDetails("http://localhost/foo?MyUniqueNumber=1"), "GET", ClientIp); - var response = Response.Create() + var responseBuilder = Response.Create() .WithTransformer(transformerType, true) .WithBodyFromFile(@"c:\\{{request.query.MyUniqueNumber}}\\test.xml"); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(responseMessage.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); - Check.That(responseMessage.BodyData.DetectedBodyType).Equals(BodyType.String); - Check.That(responseMessage.BodyData.BodyAsString).Equals(""); + Check.That(response.Message.BodyData.BodyAsFile).Equals(@"c:\1\test.xml"); + Check.That(response.Message.BodyData.DetectedBodyType).Equals(BodyType.String); + Check.That(response.Message.BodyData.BodyAsString).Equals(""); } [Theory] @@ -492,15 +492,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson("test") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("\"test\""); + Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("\"test\""); } [Fact(Skip = "todo...")] @@ -516,15 +516,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson("{{{request.BodyAsJson}}}") .WithTransformer(); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}"); + Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}"); } [Theory(Skip = "{{{ }}} Does not work in Scriban")] @@ -542,15 +542,15 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBodyAsJson("{{{request.BodyAsJson}}}") .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - Check.That(JsonConvert.SerializeObject(responseMessage.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}"); + Check.That(JsonConvert.SerializeObject(response.Message.BodyData.BodyAsJson)).Equals("{\"name\":\"WireMock\"}"); } [Theory] @@ -570,16 +570,16 @@ namespace WireMock.Net.Tests.ResponseBuilders }; var request = new RequestMessage(new UrlDetails("http://localhost/foo_object"), "POST", ClientIp, bodyData); - var response = Response.Create() + var responseBuilder = Response.Create() .WithBody("{{request.Body}}", BodyDestinationFormat.SameAsSource, enc) .WithTransformer(transformerType); // Act - var responseMessage = await response.ProvideResponseAsync(request, _settings); + var response = await responseBuilder.ProvideResponseAsync(request, _settings); // Assert - responseMessage.BodyData.BodyAsString.Should().Be(text); - responseMessage.BodyData.Encoding.Should().Be(enc); + response.Message.BodyData.BodyAsString.Should().Be(text); + response.Message.BodyData.Encoding.Should().Be(enc); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs index bc2ec470..06e665c2 100644 --- a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs +++ b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs @@ -1,557 +1,557 @@ -#if !NET452 && !NET461 -using System; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Text; -using System.Threading.Tasks; -using FluentAssertions; -using Moq; -using NFluent; -using RestEase; -using WireMock.Admin.Mappings; -using WireMock.Admin.Settings; -using WireMock.Client; -using WireMock.Handlers; -using WireMock.Logging; -using WireMock.Models; -using WireMock.Server; -using WireMock.Settings; -using Xunit; - -namespace WireMock.Net.Tests -{ - public class WireMockAdminApiTests - { - [Fact] - public async Task IWireMockAdminApi_GetSettingsAsync() - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var settings = await api.GetSettingsAsync(); - Check.That(settings).IsNotNull(); - } - - [Fact] - public async Task IWireMockAdminApi_PostSettingsAsync() - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var settings = new SettingsModel(); - var status = await api.PostSettingsAsync(settings); - Check.That(status.Status).Equals("Settings updated"); - } - - [Fact] - public async Task IWireMockAdminApi_PutSettingsAsync() - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var settings = new SettingsModel(); - var status = await api.PutSettingsAsync(settings); - Check.That(status.Status).Equals("Settings updated"); - } - - // https://github.com/WireMock-Net/WireMock.Net/issues/325 - [Fact] - public async Task IWireMockAdminApi_PutMappingAsync() - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var model = new MappingModel - { - Request = new RequestModel { Path = "/1" }, - Response = new ResponseModel { Body = "txt", StatusCode = 200 }, - Priority = 500, - Title = "test" - }; - var result = await api.PutMappingAsync(new Guid("a0000000-0000-0000-0000-000000000000"), model); - - // Assert - Check.That(result).IsNotNull(); - Check.That(result.Status).Equals("Mapping added or updated"); - Check.That(result.Guid).IsNotNull(); - - var mapping = server.Mappings.Single(m => m.Priority == 500); - Check.That(mapping).IsNotNull(); - Check.That(mapping.Title).Equals("test"); - - server.Stop(); - } - - [Theory] - [InlineData(null, null)] - [InlineData(-1, -1)] - [InlineData(0, 0)] - [InlineData(200, 200)] - [InlineData("200", "200")] - public async Task IWireMockAdminApi_PostMappingAsync_WithStatusCode(object statusCode, object expectedStatusCode) - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var model = new MappingModel - { - Request = new RequestModel { Path = "/1" }, - Response = new ResponseModel { Body = "txt", StatusCode = statusCode }, - Priority = 500, - Title = "test" - }; - var result = await api.PostMappingAsync(model); - - // Assert - Check.That(result).IsNotNull(); - Check.That(result.Status).IsNotNull(); - Check.That(result.Guid).IsNotNull(); - - var mapping = server.Mappings.Single(m => m.Priority == 500); - Check.That(mapping).IsNotNull(); - Check.That(mapping.Title).Equals("test"); - - var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("http://localhost/1"), "GET", "")); - Check.That(response.StatusCode).Equals(expectedStatusCode); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_PostMappingsAsync() - { - // Arrange - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var model1 = new MappingModel - { - Request = new RequestModel { Path = "/1" }, - Response = new ResponseModel { Body = "txt 1" }, - Title = "test 1" - }; - var model2 = new MappingModel - { - Request = new RequestModel { Path = "/2" }, - Response = new ResponseModel { Body = "txt 2" }, - Title = "test 2" - }; - var result = await api.PostMappingsAsync(new[] { model1, model2 }); - - // Assert - Check.That(result).IsNotNull(); - Check.That(result.Status).IsNotNull(); - Check.That(result.Guid).IsNull(); - Check.That(server.Mappings.Where(m => !m.IsAdminInterface)).HasSize(2); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_FindRequestsAsync() - { - // Arrange - var server = WireMockServer.Start(new WireMockServerSettings - { - StartAdminInterface = true, - Logger = new WireMockNullLogger() - }); - var serverUrl = "http://localhost:" + server.Ports[0]; - await new HttpClient().GetAsync(serverUrl + "/foo"); - var api = RestClient.For(serverUrl); - - // Act - var requests = await api.FindRequestsAsync(new RequestModel { Methods = new[] { "GET" } }); - - // Assert - Check.That(requests).HasSize(1); - var requestLogged = requests.First(); - Check.That(requestLogged.Request.Method).IsEqualTo("GET"); - Check.That(requestLogged.Request.Body).IsNull(); - Check.That(requestLogged.Request.Path).IsEqualTo("/foo"); - } - - [Fact] - public async Task IWireMockAdminApi_GetRequestsAsync() - { - // Arrange - var server = WireMockServer.Start(new WireMockServerSettings - { - StartAdminInterface = true, - Logger = new WireMockNullLogger() - }); - var serverUrl = "http://localhost:" + server.Ports[0]; - await new HttpClient().GetAsync(serverUrl + "/foo"); - var api = RestClient.For(serverUrl); - - // Act - var requests = await api.GetRequestsAsync(); - - // Assert - Check.That(requests).HasSize(1); - var requestLogged = requests.First(); - Check.That(requestLogged.Request.Method).IsEqualTo("GET"); - Check.That(requestLogged.Request.Body).IsNull(); - Check.That(requestLogged.Request.Path).IsEqualTo("/foo"); - } - - [Fact] - public async Task IWireMockAdminApi_GetRequestsAsync_JsonApi() - { - // Arrange - var server = WireMockServer.Start(new WireMockServerSettings - { - StartAdminInterface = true, - Logger = new WireMockNullLogger() - }); - string serverUrl = server.Urls[0]; - string data = "{\"data\":[{\"type\":\"program\",\"attributes\":{\"alias\":\"T000001\",\"title\":\"Title Group Entity\"}}]}"; - string jsonApiAcceptHeader = "application/vnd.api+json"; - string jsonApiContentType = "application/vnd.api+json"; - - var request = new HttpRequestMessage(HttpMethod.Post, serverUrl); - request.Headers.Accept.Clear(); - request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonApiAcceptHeader)); - request.Content = new StringContent(data); - request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType); - - var response = await new HttpClient().SendAsync(request); - Check.That(response).IsNotNull(); - - var api = RestClient.For(serverUrl); - - // Act - var requests = await api.GetRequestsAsync(); - - // Assert - Check.That(requests).HasSize(1); - var requestLogged = requests.First(); - Check.That(requestLogged.Request.Method).IsEqualTo("POST"); - Check.That(requestLogged.Request.Body).IsNotNull(); - Check.That(requestLogged.Request.Body).Contains("T000001"); - } - - [Fact] - public async Task IWireMockAdminApi_GetMappingAsync_WithBodyModelMatcherModel_WithoutMethods_ShouldReturnCorrectMappingModel() - { - // Arrange - var guid = Guid.NewGuid(); - var server = WireMockServer.StartWithAdminInterface(); - var api = RestClient.For(server.Urls[0]); - - // Act - var model = new MappingModel - { - Guid = guid, - Request = new RequestModel - { - Path = "/1", - Body = new BodyModel - { - Matcher = new MatcherModel - { - Name = "RegexMatcher", - Pattern = "hello", - IgnoreCase = true - } - } - }, - Response = new ResponseModel { Body = "world" } - }; - var postMappingResult = await api.PostMappingAsync(model); - - // Assert - postMappingResult.Should().NotBeNull(); - - var mapping = server.Mappings.FirstOrDefault(m => m.Guid == guid); - mapping.Should().NotBeNull(); - - var getMappingResult = await api.GetMappingAsync(guid); - getMappingResult.Should().NotBeNull(); - - getMappingResult.Request.Body.Should().BeEquivalentTo(model.Request.Body); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_GetRequestsAsync_Json() - { - // Arrange - var server = WireMockServer.Start(new WireMockServerSettings - { - StartAdminInterface = true, - Logger = new WireMockNullLogger() - }); - string serverUrl = server.Urls[0]; - string data = "{\"alias\": \"T000001\"}"; - string jsonAcceptHeader = "application/json"; - string jsonApiContentType = "application/json"; - - var request = new HttpRequestMessage(HttpMethod.Post, serverUrl); - request.Headers.Accept.Clear(); - request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonAcceptHeader)); - request.Content = new StringContent(data); - request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType); - var response = await new HttpClient().SendAsync(request); - Check.That(response).IsNotNull(); - - var api = RestClient.For(serverUrl); - - // Act - var requests = await api.GetRequestsAsync(); - - // Assert - Check.That(requests).HasSize(1); - var requestLogged = requests.First(); - Check.That(requestLogged.Request.Method).IsEqualTo("POST"); - Check.That(requestLogged.Request.Body).IsNotNull(); - Check.That(requestLogged.Request.Body).Contains("T000001"); - } - - [Fact] - public async Task IWireMockAdminApi_PostFileAsync_Ascii() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.GetMappingFolder()).Returns("__admin/mappings"); - filesystemHandlerMock.Setup(fs => fs.FolderExists(It.IsAny())).Returns(true); - filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny())); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act - var request = await api.PostFileAsync("filename.txt", "abc"); - - // Assert - Check.That(request.Guid).IsNull(); - Check.That(request.Status).Contains("File"); - - // Verify - filesystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Once); - filesystemHandlerMock.Verify(fs => fs.FolderExists(It.IsAny()), Times.Once); - filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_PutFileAsync_Ascii() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); - filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny())); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act - var request = await api.PutFileAsync("filename.txt", "abc-abc"); - - // Assert - Check.That(request.Guid).IsNull(); - Check.That(request.Status).Contains("File"); - - // Verify - filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once); - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public void IWireMockAdminApi_PutFileAsync_NotFound() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act and Assert - Check.ThatAsyncCode(() => api.PutFileAsync("filename.txt", "xxx")).Throws(); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public void IWireMockAdminApi_GetFileAsync_NotFound() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); - filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes("Here's a string.")); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act and Assert - Check.ThatAsyncCode(() => api.GetFileAsync("filename.txt")).Throws(); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_GetFileAsync_Found() - { - // Arrange - string data = "Here's a string."; - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); - filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes(data)); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act - string file = await api.GetFileAsync("filename.txt"); - - // Assert - Check.That(file).Equals(data); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.Verify(fs => fs.ReadFile(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public async Task IWireMockAdminApi_DeleteFileAsync_Ok() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); - filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny())); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act - await api.DeleteFileAsync("filename.txt"); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.Verify(fs => fs.DeleteFile(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public void IWireMockAdminApi_DeleteFileAsync_NotFound() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); - filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny())); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act and Assert - Check.ThatAsyncCode(() => api.DeleteFileAsync("filename.txt")).Throws(); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - - [Fact] - public void IWireMockAdminApi_FileExistsAsync_NotFound() - { - // Arrange - var filesystemHandlerMock = new Mock(MockBehavior.Strict); - filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); - - var server = WireMockServer.Start(new WireMockServerSettings - { - UseSSL = false, - StartAdminInterface = true, - FileSystemHandler = filesystemHandlerMock.Object - }); - - var api = RestClient.For(server.Urls[0]); - - // Act and Assert - Check.ThatAsyncCode(() => api.FileExistsAsync("filename.txt")).Throws(); - - // Verify - filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); - filesystemHandlerMock.VerifyNoOtherCalls(); - - server.Stop(); - } - } +#if !NET452 && !NET461 +using System; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; +using FluentAssertions; +using Moq; +using NFluent; +using RestEase; +using WireMock.Admin.Mappings; +using WireMock.Admin.Settings; +using WireMock.Client; +using WireMock.Handlers; +using WireMock.Logging; +using WireMock.Models; +using WireMock.Server; +using WireMock.Settings; +using Xunit; + +namespace WireMock.Net.Tests +{ + public class WireMockAdminApiTests + { + [Fact] + public async Task IWireMockAdminApi_GetSettingsAsync() + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var settings = await api.GetSettingsAsync(); + Check.That(settings).IsNotNull(); + } + + [Fact] + public async Task IWireMockAdminApi_PostSettingsAsync() + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var settings = new SettingsModel(); + var status = await api.PostSettingsAsync(settings); + Check.That(status.Status).Equals("Settings updated"); + } + + [Fact] + public async Task IWireMockAdminApi_PutSettingsAsync() + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var settings = new SettingsModel(); + var status = await api.PutSettingsAsync(settings); + Check.That(status.Status).Equals("Settings updated"); + } + + // https://github.com/WireMock-Net/WireMock.Net/issues/325 + [Fact] + public async Task IWireMockAdminApi_PutMappingAsync() + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var model = new MappingModel + { + Request = new RequestModel { Path = "/1" }, + Response = new ResponseModel { Body = "txt", StatusCode = 200 }, + Priority = 500, + Title = "test" + }; + var result = await api.PutMappingAsync(new Guid("a0000000-0000-0000-0000-000000000000"), model); + + // Assert + Check.That(result).IsNotNull(); + Check.That(result.Status).Equals("Mapping added or updated"); + Check.That(result.Guid).IsNotNull(); + + var mapping = server.Mappings.Single(m => m.Priority == 500); + Check.That(mapping).IsNotNull(); + Check.That(mapping.Title).Equals("test"); + + server.Stop(); + } + + [Theory] + [InlineData(null, null)] + [InlineData(-1, -1)] + [InlineData(0, 0)] + [InlineData(200, 200)] + [InlineData("200", "200")] + public async Task IWireMockAdminApi_PostMappingAsync_WithStatusCode(object statusCode, object expectedStatusCode) + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var model = new MappingModel + { + Request = new RequestModel { Path = "/1" }, + Response = new ResponseModel { Body = "txt", StatusCode = statusCode }, + Priority = 500, + Title = "test" + }; + var result = await api.PostMappingAsync(model); + + // Assert + Check.That(result).IsNotNull(); + Check.That(result.Status).IsNotNull(); + Check.That(result.Guid).IsNotNull(); + + var mapping = server.Mappings.Single(m => m.Priority == 500); + Check.That(mapping).IsNotNull(); + Check.That(mapping.Title).Equals("test"); + + var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("http://localhost/1"), "GET", "")); + Check.That(response.Message.StatusCode).Equals(expectedStatusCode); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_PostMappingsAsync() + { + // Arrange + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var model1 = new MappingModel + { + Request = new RequestModel { Path = "/1" }, + Response = new ResponseModel { Body = "txt 1" }, + Title = "test 1" + }; + var model2 = new MappingModel + { + Request = new RequestModel { Path = "/2" }, + Response = new ResponseModel { Body = "txt 2" }, + Title = "test 2" + }; + var result = await api.PostMappingsAsync(new[] { model1, model2 }); + + // Assert + Check.That(result).IsNotNull(); + Check.That(result.Status).IsNotNull(); + Check.That(result.Guid).IsNull(); + Check.That(server.Mappings.Where(m => !m.IsAdminInterface)).HasSize(2); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_FindRequestsAsync() + { + // Arrange + var server = WireMockServer.Start(new WireMockServerSettings + { + StartAdminInterface = true, + Logger = new WireMockNullLogger() + }); + var serverUrl = "http://localhost:" + server.Ports[0]; + await new HttpClient().GetAsync(serverUrl + "/foo"); + var api = RestClient.For(serverUrl); + + // Act + var requests = await api.FindRequestsAsync(new RequestModel { Methods = new[] { "GET" } }); + + // Assert + Check.That(requests).HasSize(1); + var requestLogged = requests.First(); + Check.That(requestLogged.Request.Method).IsEqualTo("GET"); + Check.That(requestLogged.Request.Body).IsNull(); + Check.That(requestLogged.Request.Path).IsEqualTo("/foo"); + } + + [Fact] + public async Task IWireMockAdminApi_GetRequestsAsync() + { + // Arrange + var server = WireMockServer.Start(new WireMockServerSettings + { + StartAdminInterface = true, + Logger = new WireMockNullLogger() + }); + var serverUrl = "http://localhost:" + server.Ports[0]; + await new HttpClient().GetAsync(serverUrl + "/foo"); + var api = RestClient.For(serverUrl); + + // Act + var requests = await api.GetRequestsAsync(); + + // Assert + Check.That(requests).HasSize(1); + var requestLogged = requests.First(); + Check.That(requestLogged.Request.Method).IsEqualTo("GET"); + Check.That(requestLogged.Request.Body).IsNull(); + Check.That(requestLogged.Request.Path).IsEqualTo("/foo"); + } + + [Fact] + public async Task IWireMockAdminApi_GetRequestsAsync_JsonApi() + { + // Arrange + var server = WireMockServer.Start(new WireMockServerSettings + { + StartAdminInterface = true, + Logger = new WireMockNullLogger() + }); + string serverUrl = server.Urls[0]; + string data = "{\"data\":[{\"type\":\"program\",\"attributes\":{\"alias\":\"T000001\",\"title\":\"Title Group Entity\"}}]}"; + string jsonApiAcceptHeader = "application/vnd.api+json"; + string jsonApiContentType = "application/vnd.api+json"; + + var request = new HttpRequestMessage(HttpMethod.Post, serverUrl); + request.Headers.Accept.Clear(); + request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonApiAcceptHeader)); + request.Content = new StringContent(data); + request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType); + + var response = await new HttpClient().SendAsync(request); + Check.That(response).IsNotNull(); + + var api = RestClient.For(serverUrl); + + // Act + var requests = await api.GetRequestsAsync(); + + // Assert + Check.That(requests).HasSize(1); + var requestLogged = requests.First(); + Check.That(requestLogged.Request.Method).IsEqualTo("POST"); + Check.That(requestLogged.Request.Body).IsNotNull(); + Check.That(requestLogged.Request.Body).Contains("T000001"); + } + + [Fact] + public async Task IWireMockAdminApi_GetMappingAsync_WithBodyModelMatcherModel_WithoutMethods_ShouldReturnCorrectMappingModel() + { + // Arrange + var guid = Guid.NewGuid(); + var server = WireMockServer.StartWithAdminInterface(); + var api = RestClient.For(server.Urls[0]); + + // Act + var model = new MappingModel + { + Guid = guid, + Request = new RequestModel + { + Path = "/1", + Body = new BodyModel + { + Matcher = new MatcherModel + { + Name = "RegexMatcher", + Pattern = "hello", + IgnoreCase = true + } + } + }, + Response = new ResponseModel { Body = "world" } + }; + var postMappingResult = await api.PostMappingAsync(model); + + // Assert + postMappingResult.Should().NotBeNull(); + + var mapping = server.Mappings.FirstOrDefault(m => m.Guid == guid); + mapping.Should().NotBeNull(); + + var getMappingResult = await api.GetMappingAsync(guid); + getMappingResult.Should().NotBeNull(); + + getMappingResult.Request.Body.Should().BeEquivalentTo(model.Request.Body); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_GetRequestsAsync_Json() + { + // Arrange + var server = WireMockServer.Start(new WireMockServerSettings + { + StartAdminInterface = true, + Logger = new WireMockNullLogger() + }); + string serverUrl = server.Urls[0]; + string data = "{\"alias\": \"T000001\"}"; + string jsonAcceptHeader = "application/json"; + string jsonApiContentType = "application/json"; + + var request = new HttpRequestMessage(HttpMethod.Post, serverUrl); + request.Headers.Accept.Clear(); + request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonAcceptHeader)); + request.Content = new StringContent(data); + request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType); + var response = await new HttpClient().SendAsync(request); + Check.That(response).IsNotNull(); + + var api = RestClient.For(serverUrl); + + // Act + var requests = await api.GetRequestsAsync(); + + // Assert + Check.That(requests).HasSize(1); + var requestLogged = requests.First(); + Check.That(requestLogged.Request.Method).IsEqualTo("POST"); + Check.That(requestLogged.Request.Body).IsNotNull(); + Check.That(requestLogged.Request.Body).Contains("T000001"); + } + + [Fact] + public async Task IWireMockAdminApi_PostFileAsync_Ascii() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.GetMappingFolder()).Returns("__admin/mappings"); + filesystemHandlerMock.Setup(fs => fs.FolderExists(It.IsAny())).Returns(true); + filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny())); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act + var request = await api.PostFileAsync("filename.txt", "abc"); + + // Assert + Check.That(request.Guid).IsNull(); + Check.That(request.Status).Contains("File"); + + // Verify + filesystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Once); + filesystemHandlerMock.Verify(fs => fs.FolderExists(It.IsAny()), Times.Once); + filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_PutFileAsync_Ascii() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); + filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny())); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act + var request = await api.PutFileAsync("filename.txt", "abc-abc"); + + // Assert + Check.That(request.Guid).IsNull(); + Check.That(request.Status).Contains("File"); + + // Verify + filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once); + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public void IWireMockAdminApi_PutFileAsync_NotFound() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act and Assert + Check.ThatAsyncCode(() => api.PutFileAsync("filename.txt", "xxx")).Throws(); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public void IWireMockAdminApi_GetFileAsync_NotFound() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); + filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes("Here's a string.")); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act and Assert + Check.ThatAsyncCode(() => api.GetFileAsync("filename.txt")).Throws(); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_GetFileAsync_Found() + { + // Arrange + string data = "Here's a string."; + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); + filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes(data)); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act + string file = await api.GetFileAsync("filename.txt"); + + // Assert + Check.That(file).Equals(data); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.Verify(fs => fs.ReadFile(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public async Task IWireMockAdminApi_DeleteFileAsync_Ok() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true); + filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny())); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act + await api.DeleteFileAsync("filename.txt"); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.Verify(fs => fs.DeleteFile(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public void IWireMockAdminApi_DeleteFileAsync_NotFound() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); + filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny())); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act and Assert + Check.ThatAsyncCode(() => api.DeleteFileAsync("filename.txt")).Throws(); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + + [Fact] + public void IWireMockAdminApi_FileExistsAsync_NotFound() + { + // Arrange + var filesystemHandlerMock = new Mock(MockBehavior.Strict); + filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false); + + var server = WireMockServer.Start(new WireMockServerSettings + { + UseSSL = false, + StartAdminInterface = true, + FileSystemHandler = filesystemHandlerMock.Object + }); + + var api = RestClient.For(server.Urls[0]); + + // Act and Assert + Check.ThatAsyncCode(() => api.FileExistsAsync("filename.txt")).Throws(); + + // Verify + filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once); + filesystemHandlerMock.VerifyNoOtherCalls(); + + server.Stop(); + } + } } #endif \ No newline at end of file