From 0edf858caa84e7ea336f10d17391b24e628ce9d1 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 20 Aug 2019 19:22:25 +0000 Subject: [PATCH] Fix parsing Guid (#326) --- .../Server/FluentMockServer.Admin.cs | 15 +++++--- .../FluentMockServerAdminRestClientTests.cs | 37 +++++++++++++++++-- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index 5e8630b71..946c6f0c0 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -366,7 +366,7 @@ private ResponseMessage SettingsUpdate(RequestMessage requestMessage) #region Mapping/{guid} private ResponseMessage MappingGet(RequestMessage requestMessage) { - Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); + Guid guid = ParseGuidFromRequestMessage(requestMessage); var mapping = Mappings.FirstOrDefault(m => !m.IsAdminInterface && m.Guid == guid); if (mapping == null) @@ -382,7 +382,7 @@ private ResponseMessage MappingGet(RequestMessage requestMessage) private ResponseMessage MappingPut(RequestMessage requestMessage) { - Guid guid = Guid.Parse(requestMessage.Path.TrimStart(AdminMappings.ToCharArray())); + Guid guid = ParseGuidFromRequestMessage(requestMessage); var mappingModel = DeserializeObject(requestMessage); Guid? guidFromPut = DeserializeAndAddOrUpdateMapping(mappingModel, guid); @@ -392,7 +392,7 @@ private ResponseMessage MappingPut(RequestMessage requestMessage) private ResponseMessage MappingDelete(RequestMessage requestMessage) { - Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); + Guid guid = ParseGuidFromRequestMessage(requestMessage); if (DeleteMapping(guid)) { @@ -401,6 +401,11 @@ private ResponseMessage MappingDelete(RequestMessage requestMessage) return ResponseMessageBuilder.Create("Mapping not found", 404); } + + private Guid ParseGuidFromRequestMessage(RequestMessage requestMessage) + { + return Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); + } #endregion Mapping/{guid} #region Mappings @@ -543,7 +548,7 @@ private ResponseMessage MappingsDelete(RequestMessage requestMessage) #region Request/{guid} private ResponseMessage RequestGet(RequestMessage requestMessage) { - Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminRequests.Length + 1)); + Guid guid = ParseGuidFromRequestMessage(requestMessage); var entry = LogEntries.FirstOrDefault(r => !r.RequestMessage.Path.StartsWith("/__admin/") && r.Guid == guid); if (entry == null) @@ -559,7 +564,7 @@ private ResponseMessage RequestGet(RequestMessage requestMessage) private ResponseMessage RequestDelete(RequestMessage requestMessage) { - Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminRequests.Length + 1)); + Guid guid = ParseGuidFromRequestMessage(requestMessage); if (DeleteLogEntry(guid)) { diff --git a/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs b/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs index cbfcf2716..117680b4c 100644 --- a/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs +++ b/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs @@ -1,11 +1,12 @@ -using Moq; -using NFluent; -using RestEase; +using System; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; +using Moq; +using NFluent; +using RestEase; using WireMock.Admin.Mappings; using WireMock.Admin.Settings; using WireMock.Client; @@ -57,6 +58,36 @@ public async Task IFluentMockServerAdmin_PutSettingsAsync() Check.That(status.Status).Equals("Settings updated"); } + // https://github.com/WireMock-Net/WireMock.Net/issues/325 + [Fact] + public async Task IFluentMockServerAdmin_PutMappingAsync() + { + // Arrange + var server = FluentMockServer.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(); + } + [Fact] public async Task IFluentMockServerAdmin_PostMappingAsync() {