mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-29 22:02:16 +02:00
Allow mapping without Path or Url (#1169)
This commit is contained in:
@@ -623,7 +623,7 @@ public partial class WireMockServer
|
|||||||
{
|
{
|
||||||
var requestModel = DeserializeObject<RequestModel>(requestMessage);
|
var requestModel = DeserializeObject<RequestModel>(requestMessage);
|
||||||
|
|
||||||
var request = (Request)InitRequestBuilder(requestModel, false)!;
|
var request = (Request)InitRequestBuilder(requestModel);
|
||||||
|
|
||||||
var dict = new Dictionary<ILogEntry, RequestMatchResult>();
|
var dict = new Dictionary<ILogEntry, RequestMatchResult>();
|
||||||
foreach (var logEntry in LogEntries.Where(le => !le.RequestMessage.Path.StartsWith("/__admin/")))
|
foreach (var logEntry in LogEntries.Where(le => !le.RequestMessage.Path.StartsWith("/__admin/")))
|
||||||
|
|||||||
@@ -36,17 +36,13 @@ public partial class WireMockServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Guid? ConvertMappingAndRegisterAsRespondProvider(MappingModel mappingModel, Guid? guid = null, string? path = null)
|
private Guid ConvertMappingAndRegisterAsRespondProvider(MappingModel mappingModel, Guid? guid = null, string? path = null)
|
||||||
{
|
{
|
||||||
Guard.NotNull(mappingModel);
|
Guard.NotNull(mappingModel);
|
||||||
Guard.NotNull(mappingModel.Request);
|
Guard.NotNull(mappingModel.Request);
|
||||||
Guard.NotNull(mappingModel.Response);
|
Guard.NotNull(mappingModel.Response);
|
||||||
|
|
||||||
var requestBuilder = InitRequestBuilder(mappingModel.Request, true);
|
var requestBuilder = InitRequestBuilder(mappingModel.Request);
|
||||||
if (requestBuilder == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var respondProvider = Given(requestBuilder, mappingModel.SaveToFile == true);
|
var respondProvider = Given(requestBuilder, mappingModel.SaveToFile == true);
|
||||||
|
|
||||||
@@ -126,9 +122,9 @@ public partial class WireMockServer
|
|||||||
return respondProvider.Guid;
|
return respondProvider.Guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IRequestBuilder? InitRequestBuilder(RequestModel requestModel, bool pathOrUrlRequired)
|
private IRequestBuilder InitRequestBuilder(RequestModel requestModel)
|
||||||
{
|
{
|
||||||
IRequestBuilder requestBuilder = Request.Create();
|
var requestBuilder = Request.Create();
|
||||||
|
|
||||||
if (requestModel.ClientIP != null)
|
if (requestModel.ClientIP != null)
|
||||||
{
|
{
|
||||||
@@ -146,13 +142,11 @@ public partial class WireMockServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pathOrUrlMatchersValid = false;
|
|
||||||
if (requestModel.Path != null)
|
if (requestModel.Path != null)
|
||||||
{
|
{
|
||||||
if (requestModel.Path is string path)
|
if (requestModel.Path is string path)
|
||||||
{
|
{
|
||||||
requestBuilder = requestBuilder.WithPath(path);
|
requestBuilder = requestBuilder.WithPath(path);
|
||||||
pathOrUrlMatchersValid = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -161,7 +155,6 @@ public partial class WireMockServer
|
|||||||
{
|
{
|
||||||
var matchOperator = StringUtils.ParseMatchOperator(pathModel.MatchOperator);
|
var matchOperator = StringUtils.ParseMatchOperator(pathModel.MatchOperator);
|
||||||
requestBuilder = requestBuilder.WithPath(matchOperator, pathModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
requestBuilder = requestBuilder.WithPath(matchOperator, pathModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||||
pathOrUrlMatchersValid = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,7 +163,6 @@ public partial class WireMockServer
|
|||||||
if (requestModel.Url is string url)
|
if (requestModel.Url is string url)
|
||||||
{
|
{
|
||||||
requestBuilder = requestBuilder.WithUrl(url);
|
requestBuilder = requestBuilder.WithUrl(url);
|
||||||
pathOrUrlMatchersValid = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -179,17 +171,10 @@ public partial class WireMockServer
|
|||||||
{
|
{
|
||||||
var matchOperator = StringUtils.ParseMatchOperator(urlModel.MatchOperator);
|
var matchOperator = StringUtils.ParseMatchOperator(urlModel.MatchOperator);
|
||||||
requestBuilder = requestBuilder.WithUrl(matchOperator, urlModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
requestBuilder = requestBuilder.WithUrl(matchOperator, urlModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||||
pathOrUrlMatchersValid = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pathOrUrlRequired && !pathOrUrlMatchersValid)
|
|
||||||
{
|
|
||||||
_settings.Logger.Error("Path or Url matcher is missing for this mapping, this mapping will not be added.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestModel.Methods != null)
|
if (requestModel.Methods != null)
|
||||||
{
|
{
|
||||||
var matchBehaviour = requestModel.MethodsRejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch;
|
var matchBehaviour = requestModel.MethodsRejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch;
|
||||||
@@ -233,7 +218,7 @@ public partial class WireMockServer
|
|||||||
{
|
{
|
||||||
foreach (var paramModel in requestModel.Params.Where(p => p is { Matchers: { } }))
|
foreach (var paramModel in requestModel.Params.Where(p => p is { Matchers: { } }))
|
||||||
{
|
{
|
||||||
bool ignoreCase = paramModel.IgnoreCase == true;
|
var ignoreCase = paramModel.IgnoreCase == true;
|
||||||
requestBuilder = requestBuilder.WithParam(paramModel.Name, ignoreCase, paramModel.Matchers!.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
requestBuilder = requestBuilder.WithParam(paramModel.Name, ignoreCase, paramModel.Matchers!.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -253,7 +238,7 @@ public partial class WireMockServer
|
|||||||
|
|
||||||
private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel)
|
private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel)
|
||||||
{
|
{
|
||||||
IResponseBuilder responseBuilder = Response.Create();
|
var responseBuilder = Response.Create();
|
||||||
|
|
||||||
if (responseModel.Delay > 0)
|
if (responseModel.Delay > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ using FluentAssertions;
|
|||||||
using Moq;
|
using Moq;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NFluent;
|
using NFluent;
|
||||||
using WireMock.Admin.Settings;
|
using RestEase;
|
||||||
|
using WireMock.Client;
|
||||||
using WireMock.Handlers;
|
using WireMock.Handlers;
|
||||||
using WireMock.Logging;
|
using WireMock.Logging;
|
||||||
|
using WireMock.Matchers.Request;
|
||||||
using WireMock.RequestBuilders;
|
using WireMock.RequestBuilders;
|
||||||
using WireMock.ResponseBuilders;
|
using WireMock.ResponseBuilders;
|
||||||
using WireMock.Server;
|
using WireMock.Server;
|
||||||
@@ -244,6 +246,38 @@ public class WireMockServerAdminTests
|
|||||||
loggerMock.Verify(l => l.Info(It.Is<string>(s => s.StartsWith("The Static Mapping folder")), It.IsAny<object[]>()), Times.Once);
|
loggerMock.Verify(l => l.Info(It.Is<string>(s => s.StartsWith("The Static Mapping folder")), It.IsAny<object[]>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task WireMockServer_Admin_Mapping_WithoutPathOrUrl()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
using var server = WireMockServer.StartWithAdminInterface();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
server.Given(Request.Create().UsingGet())
|
||||||
|
.RespondWith(Response.Create());
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var mapping = server.Mappings.First(m => !m.IsAdminInterface);
|
||||||
|
var request = (Request) mapping.RequestMatcher;
|
||||||
|
var pathMatcher = request.GetRequestMessageMatcher<RequestMessagePathMatcher>();
|
||||||
|
pathMatcher.Should().BeNull();
|
||||||
|
|
||||||
|
var api = RestClient.For<IWireMockAdminApi>(server.Url);
|
||||||
|
var mappingModels = await api.GetMappingsAsync();
|
||||||
|
var mappingModel = mappingModels.First();
|
||||||
|
mappingModel.Request.Path.Should().BeNull();
|
||||||
|
mappingModel.Request.Url.Should().BeNull();
|
||||||
|
|
||||||
|
await api.DeleteMappingsAsync();
|
||||||
|
|
||||||
|
await api.PostMappingAsync(mappingModel);
|
||||||
|
await api.GetMappingsAsync();
|
||||||
|
mappingModels = await api.GetMappingsAsync();
|
||||||
|
mappingModel = mappingModels.First();
|
||||||
|
mappingModel.Request.Path.Should().BeNull();
|
||||||
|
mappingModel.Request.Url.Should().BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WireMockServer_Admin_Mappings_WithGuid_Get()
|
public void WireMockServer_Admin_Mappings_WithGuid_Get()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user