diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index c4d365f9..d3b2d3b5 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -49,9 +49,10 @@ namespace WireMock.Server // __admin/request/{guid} Given(Request.Create().WithPath(_adminRequestsGuidPathMatcher).UsingGet()).RespondWith(new DynamicResponseProvider(RequestGet)); + Given(Request.Create().WithPath(_adminRequestsGuidPathMatcher).UsingDelete()).RespondWith(new DynamicResponseProvider(RequestDelete)); } - #region Mapping + #region Mapping/{guid} private ResponseMessage MappingGet(RequestMessage requestMessage) { Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); @@ -90,11 +91,12 @@ namespace WireMock.Server { Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); - DeleteMapping(guid); + if (DeleteMapping(guid)) + return new ResponseMessage { Body = "Mapping removed" }; - return new ResponseMessage { Body = "Mapping removed" }; + return new ResponseMessage { Body = "Mapping not found" }; } - #endregion Mapping + #endregion Mapping/{guid} #region Mappings private ResponseMessage MappingsGet(RequestMessage requestMessage) @@ -140,7 +142,7 @@ namespace WireMock.Server } #endregion Mappings - #region Request + #region Request/{guid} private ResponseMessage RequestGet(RequestMessage requestMessage) { Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminRequests.Length + 1)); @@ -153,7 +155,17 @@ namespace WireMock.Server return ToJson(model); } - #endregion Request + + private ResponseMessage RequestDelete(RequestMessage requestMessage) + { + Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminRequests.Length + 1)); + + if (DeleteLogEntry(guid)) + return new ResponseMessage { Body = "Request removed" }; + + return new ResponseMessage { Body = "Request not found" }; + } + #endregion Request/{guid} #region Requests private ResponseMessage RequestsGet(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs index d30ab586..7d2e5db4 100644 --- a/src/WireMock.Net/Server/FluentMockServer.cs +++ b/src/WireMock.Net/Server/FluentMockServer.cs @@ -141,6 +141,27 @@ namespace WireMock.Server } } + /// + /// Deletes the mapping. + /// + /// The unique identifier. + [PublicAPI] + public bool DeleteLogEntry(Guid guid) + { + lock (((ICollection)_logEntries).SyncRoot) + { + // Check a logentry exists with the same GUID, if so, remove it. + var existing = _logEntries.FirstOrDefault(m => m.Guid == guid); + if (existing != null) + { + _logEntries.Remove(existing); + return true; + } + + return false; + } + } + /// /// Resets the mappings. /// @@ -153,9 +174,11 @@ namespace WireMock.Server } /// - /// Resets the mappings. + /// Deletes the mapping. /// - public void DeleteMapping(Guid guid) + /// The unique identifier. + [PublicAPI] + public bool DeleteMapping(Guid guid) { lock (((ICollection)_mappings).SyncRoot) { @@ -164,7 +187,10 @@ namespace WireMock.Server if (existingMapping != null) { _mappings.Remove(existingMapping); + return true; } + + return false; } }