From 9e9eadf6934f5988302bd2bd15bd8bb83440ebef Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 1 Jul 2018 11:10:34 +0200 Subject: [PATCH] 1.0.4.4 (#156) --- CHANGELOG.md | 7 +++ GitReleaseNotes.txt | 2 +- .../SimpleCommandLineParser.cs | 1 + .../WireMock.Net.StandAlone.csproj | 2 +- .../Owin/GlobalExceptionMiddleware.cs | 2 +- src/WireMock.Net/Owin/WireMockMiddleware.cs | 10 +++-- src/WireMock.Net/ResponseMessageBuilder.cs | 26 +++++++++++ .../Server/FluentMockServer.Admin.cs | 43 +++++++------------ src/WireMock.Net/Server/FluentMockServer.cs | 2 +- src/WireMock.Net/WireMock.Net.csproj | 2 +- 10 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 src/WireMock.Net/ResponseMessageBuilder.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index b07efea5..1b4d0f16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 1.0.4.4 (01 July 2018) + + - [#156](https://github.com/WireMock-Net/WireMock.Net/issues/156) - Feature: when adding / updating a mapping : return more details + +Commits: ... + + # 1.0.4.3 (30 June 2018) - [#159](https://github.com/WireMock-Net/WireMock.Net/issues/159) - Bug: IRequestBuilder.WithParam broken for key-only matching +fix diff --git a/GitReleaseNotes.txt b/GitReleaseNotes.txt index 9a64689e..d877023d 100644 --- a/GitReleaseNotes.txt +++ b/GitReleaseNotes.txt @@ -1,5 +1,5 @@ https://github.com/GitTools/GitReleaseNotes -GitReleaseNotes.exe . /OutputFile CHANGELOG.md /Version 1.0.4.3 +GitReleaseNotes.exe . /OutputFile CHANGELOG.md /Version 1.0.4.4 GitReleaseNotes.exe . /OutputFile CHANGELOG.md /allTags diff --git a/src/WireMock.Net.StandAlone/SimpleCommandLineParser.cs b/src/WireMock.Net.StandAlone/SimpleCommandLineParser.cs index 8ff982ca..d99e682e 100644 --- a/src/WireMock.Net.StandAlone/SimpleCommandLineParser.cs +++ b/src/WireMock.Net.StandAlone/SimpleCommandLineParser.cs @@ -41,6 +41,7 @@ namespace WireMock.Net.StandAlone Arguments[currentName] = values.ToArray(); } } + public bool Contains(string name) { return Arguments.ContainsKey(name); diff --git a/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj b/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj index e6b4fcff..3ca7879c 100644 --- a/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj +++ b/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj @@ -3,7 +3,7 @@ Lightweight StandAlone Http Mocking Server for .Net. WireMock.Net.StandAlone - 1.0.4.3 + 1.0.4.4 Stef Heyenrath net452;net46;netstandard1.3;netstandard2.0 true diff --git a/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs b/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs index c2c199ae..0c0703dc 100644 --- a/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs +++ b/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs @@ -49,7 +49,7 @@ namespace WireMock.Owin catch (Exception ex) { _options.Logger.Error("HttpStatusCode set to 500 {0}", ex); - await _responseMapper.MapAsync(new ResponseMessage { StatusCode = 500, Body = JsonConvert.SerializeObject(ex) }, ctx.Response); + await _responseMapper.MapAsync(ResponseMessageBuilder.Create(JsonConvert.SerializeObject(ex), 500), ctx.Response); } } } diff --git a/src/WireMock.Net/Owin/WireMockMiddleware.cs b/src/WireMock.Net/Owin/WireMockMiddleware.cs index 321c2ad5..97fb90dd 100644 --- a/src/WireMock.Net/Owin/WireMockMiddleware.cs +++ b/src/WireMock.Net/Owin/WireMockMiddleware.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using WireMock.Logging; using WireMock.Matchers.Request; @@ -6,6 +7,7 @@ using System.Linq; using WireMock.Matchers; using WireMock.Util; using Newtonsoft.Json; +using WireMock.Admin.Mappings; using WireMock.Http; using WireMock.Serialization; #if !NETSTANDARD @@ -22,6 +24,8 @@ namespace WireMock.Owin internal class WireMockMiddleware #endif { + private readonly IDictionary> _contentTypeJsonHeaders = new Dictionary> { { HttpKnownHeaderNames.ContentType, new WireMockList { "application/json" } } }; + private static readonly Task CompletedTask = Task.FromResult(false); private readonly WireMockMiddlewareOptions _options; @@ -98,7 +102,7 @@ namespace WireMock.Owin { logRequest = true; _options.Logger.Warn("HttpStatusCode set to 404 : No matching mapping found"); - response = new ResponseMessage { StatusCode = 404, Body = "No matching mapping found" }; + response = ResponseMessageBuilder.Create("No matching mapping found", 404); return; } @@ -110,7 +114,7 @@ namespace WireMock.Owin if (!present || _options.AuthorizationMatcher.IsMatch(authorization.ToString()) < MatchScores.Perfect) { _options.Logger.Error("HttpStatusCode set to 401"); - response = new ResponseMessage { StatusCode = 401 }; + response = ResponseMessageBuilder.Create(null, 401); return; } } @@ -130,7 +134,7 @@ namespace WireMock.Owin catch (Exception ex) { _options.Logger.Error("HttpStatusCode set to 500"); - response = new ResponseMessage { StatusCode = 500, Body = JsonConvert.SerializeObject(ex) }; + response = ResponseMessageBuilder.Create(JsonConvert.SerializeObject(ex), 500); } finally { diff --git a/src/WireMock.Net/ResponseMessageBuilder.cs b/src/WireMock.Net/ResponseMessageBuilder.cs new file mode 100644 index 00000000..cefe5d36 --- /dev/null +++ b/src/WireMock.Net/ResponseMessageBuilder.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using WireMock.Admin.Mappings; +using WireMock.Http; +using WireMock.Util; + +namespace WireMock +{ + internal static class ResponseMessageBuilder + { + private static string ContentTypeJson = "application/json"; + private static readonly IDictionary> ContentTypeJsonHeaders = new Dictionary> { { HttpKnownHeaderNames.ContentType, new WireMockList { ContentTypeJson } } }; + + internal static ResponseMessage Create(string message, int statusCode = 200, Guid? guid = null) + { + var response = new ResponseMessage + { + StatusCode = statusCode, + Headers = ContentTypeJsonHeaders, + BodyAsJson = message != null ? new StatusModel { Status = message, Guid = guid } : null + }; + + return response; + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index 13aecb41..ddb397cd 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -37,7 +37,6 @@ namespace WireMock.Server private const string AdminScenarios = "/__admin/scenarios"; private readonly RegexMatcher _adminMappingsGuidPathMatcher = new RegexMatcher(MatchBehaviour.AcceptOnMatch, @"^\/__admin\/mappings\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$"); private readonly RegexMatcher _adminRequestsGuidPathMatcher = new RegexMatcher(MatchBehaviour.AcceptOnMatch, @"^\/__admin\/requests\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$"); - private readonly IDictionary> _contentTypeJsonHeaders = new Dictionary> { { HttpKnownHeaderNames.ContentType, new WireMockList { ContentTypeJson } } }; private readonly JsonSerializerSettings _settings = new JsonSerializerSettings { @@ -284,7 +283,7 @@ namespace WireMock.Server _options.RequestProcessingDelay = TimeSpan.FromMilliseconds(settings.GlobalProcessingDelay.Value); } - return CreateResponseMessage("Settings updated"); + return ResponseMessageBuilder.Create("Settings updated"); } #endregion Settings @@ -297,7 +296,7 @@ namespace WireMock.Server if (mapping == null) { _logger.Warn("HttpStatusCode set to 404 : Mapping not found"); - return CreateResponseMessage("Mapping not found", 404); + return ResponseMessageBuilder.Create("Mapping not found", 404); } var model = MappingConverter.ToMappingModel(mapping); @@ -312,7 +311,7 @@ namespace WireMock.Server var mappingModel = DeserializeObject(requestMessage); DeserializeAndAddOrUpdateMapping(mappingModel, guid); - return CreateResponseMessage("Mapping added or updated", 200, guid); + return ResponseMessageBuilder.Create("Mapping added or updated", 200, guid); } private ResponseMessage MappingDelete(RequestMessage requestMessage) @@ -321,10 +320,10 @@ namespace WireMock.Server if (DeleteMapping(guid)) { - return CreateResponseMessage("Mapping removed", 200, guid); + return ResponseMessageBuilder.Create("Mapping removed", 200, guid); } - return CreateResponseMessage("Mapping not found", 404); + return ResponseMessageBuilder.Create("Mapping not found", 404); } #endregion Mapping/{guid} @@ -336,7 +335,7 @@ namespace WireMock.Server SaveMappingToFile(mapping); } - return CreateResponseMessage("Mappings saved to disk"); + return ResponseMessageBuilder.Create("Mappings saved to disk"); } private void SaveMappingToFile(Mapping mapping) @@ -384,15 +383,15 @@ namespace WireMock.Server catch (ArgumentException a) { _logger.Error("HttpStatusCode set to 400 {0}", a); - return CreateResponseMessage(a.Message, 400); + return ResponseMessageBuilder.Create(a.Message, 400); } catch (Exception e) { _logger.Error("HttpStatusCode set to 500 {0}", e); - return CreateResponseMessage(e.ToString(), 500); + return ResponseMessageBuilder.Create(e.ToString(), 500); } - return CreateResponseMessage("Mapping added", 201, guid); + return ResponseMessageBuilder.Create("Mapping added", 201, guid); } private Guid DeserializeAndAddOrUpdateMapping(MappingModel mappingModel, Guid? guid = null, string path = null) @@ -448,7 +447,7 @@ namespace WireMock.Server ResetScenarios(); - return CreateResponseMessage("Mappings deleted"); + return ResponseMessageBuilder.Create("Mappings deleted"); } #endregion Mappings @@ -461,7 +460,7 @@ namespace WireMock.Server if (entry == null) { _logger.Warn("HttpStatusCode set to 404 : Request not found"); - return CreateResponseMessage("Request not found", 404); + return ResponseMessageBuilder.Create("Request not found", 404); } var model = LogEntryMapper.Map(entry); @@ -475,10 +474,10 @@ namespace WireMock.Server if (DeleteLogEntry(guid)) { - return CreateResponseMessage("Request removed"); + return ResponseMessageBuilder.Create("Request removed"); } - return CreateResponseMessage("Request not found", 404); + return ResponseMessageBuilder.Create("Request not found", 404); } #endregion Request/{guid} @@ -496,7 +495,7 @@ namespace WireMock.Server { ResetLogEntries(); - return CreateResponseMessage("Requests deleted"); + return ResponseMessageBuilder.Create("Requests deleted"); } #endregion Requests @@ -539,7 +538,7 @@ namespace WireMock.Server { ResetScenarios(); - return CreateResponseMessage("Scenarios reset"); + return ResponseMessageBuilder.Create("Scenarios reset"); } #endregion @@ -728,17 +727,5 @@ namespace WireMock.Server JsonConvert.DeserializeObject(requestMessage.Body) : ((JObject)requestMessage.BodyAsJson).ToObject(); } - - private ResponseMessage CreateResponseMessage(string message, int statusCode = 200, Guid? guid = null) - { - var response = new ResponseMessage - { - StatusCode = statusCode, - Headers = _contentTypeJsonHeaders, - BodyAsJson = new StatusModel { Status = message, Guid = guid } - }; - - return response; - } } } \ No newline at end of file diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs index 11e66aa1..732a0f4c 100644 --- a/src/WireMock.Net/Server/FluentMockServer.cs +++ b/src/WireMock.Net/Server/FluentMockServer.cs @@ -264,7 +264,7 @@ namespace WireMock.Server Given(Request.Create().WithPath("/*").UsingAnyMethod()) .WithGuid(Guid.Parse("90008000-0000-4444-a17e-669cd84f1f05")) .AtPriority(1000) - .RespondWith(new DynamicResponseProvider(request => new ResponseMessage { StatusCode = 404, Body = "No matching mapping found" })); + .RespondWith(new DynamicResponseProvider(request => ResponseMessageBuilder.Create("No matching mapping found", 404))); } /// diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index 457babe6..1e304c8a 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -3,7 +3,7 @@ Lightweight Http Mocking Server for .Net, inspired by WireMock from the Java landscape. WireMock.Net - 1.0.4.3 + 1.0.4.4 Stef Heyenrath net452;net46;netstandard1.3;netstandard2.0 true