Fix parsing Guid (#326)

This commit is contained in:
Stef Heyenrath
2019-08-20 19:22:25 +00:00
committed by GitHub
parent 4c74d1a4cc
commit 0edf858caa
2 changed files with 44 additions and 8 deletions

View File

@@ -366,7 +366,7 @@ namespace WireMock.Server
#region Mapping/{guid} #region Mapping/{guid}
private ResponseMessage MappingGet(RequestMessage requestMessage) 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); var mapping = Mappings.FirstOrDefault(m => !m.IsAdminInterface && m.Guid == guid);
if (mapping == null) if (mapping == null)
@@ -382,7 +382,7 @@ namespace WireMock.Server
private ResponseMessage MappingPut(RequestMessage requestMessage) private ResponseMessage MappingPut(RequestMessage requestMessage)
{ {
Guid guid = Guid.Parse(requestMessage.Path.TrimStart(AdminMappings.ToCharArray())); Guid guid = ParseGuidFromRequestMessage(requestMessage);
var mappingModel = DeserializeObject<MappingModel>(requestMessage); var mappingModel = DeserializeObject<MappingModel>(requestMessage);
Guid? guidFromPut = DeserializeAndAddOrUpdateMapping(mappingModel, guid); Guid? guidFromPut = DeserializeAndAddOrUpdateMapping(mappingModel, guid);
@@ -392,7 +392,7 @@ namespace WireMock.Server
private ResponseMessage MappingDelete(RequestMessage requestMessage) private ResponseMessage MappingDelete(RequestMessage requestMessage)
{ {
Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1)); Guid guid = ParseGuidFromRequestMessage(requestMessage);
if (DeleteMapping(guid)) if (DeleteMapping(guid))
{ {
@@ -401,6 +401,11 @@ namespace WireMock.Server
return ResponseMessageBuilder.Create("Mapping not found", 404); return ResponseMessageBuilder.Create("Mapping not found", 404);
} }
private Guid ParseGuidFromRequestMessage(RequestMessage requestMessage)
{
return Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1));
}
#endregion Mapping/{guid} #endregion Mapping/{guid}
#region Mappings #region Mappings
@@ -543,7 +548,7 @@ namespace WireMock.Server
#region Request/{guid} #region Request/{guid}
private ResponseMessage RequestGet(RequestMessage requestMessage) 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); var entry = LogEntries.FirstOrDefault(r => !r.RequestMessage.Path.StartsWith("/__admin/") && r.Guid == guid);
if (entry == null) if (entry == null)
@@ -559,7 +564,7 @@ namespace WireMock.Server
private ResponseMessage RequestDelete(RequestMessage requestMessage) private ResponseMessage RequestDelete(RequestMessage requestMessage)
{ {
Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminRequests.Length + 1)); Guid guid = ParseGuidFromRequestMessage(requestMessage);
if (DeleteLogEntry(guid)) if (DeleteLogEntry(guid))
{ {

View File

@@ -1,11 +1,12 @@
using Moq; using System;
using NFluent;
using RestEase;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Moq;
using NFluent;
using RestEase;
using WireMock.Admin.Mappings; using WireMock.Admin.Mappings;
using WireMock.Admin.Settings; using WireMock.Admin.Settings;
using WireMock.Client; using WireMock.Client;
@@ -57,6 +58,36 @@ namespace WireMock.Net.Tests
Check.That(status.Status).Equals("Settings updated"); 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<IFluentMockServerAdmin>(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] [Fact]
public async Task IFluentMockServerAdmin_PostMappingAsync() public async Task IFluentMockServerAdmin_PostMappingAsync()
{ {