mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-18 23:33:47 +01:00
Add check for duplicate Guids when posting multiple mappings in one request (#795)
* Add check for DuplicateGuids * Add check for duplicate Guids when posting mapping(s) * mappingModels * fix ut
This commit is contained in:
@@ -188,16 +188,13 @@ public partial class WireMockServer
|
||||
if (FileHelper.TryReadMappingFileWithRetryAndDelay(_settings.FileSystemHandler, path, out var value))
|
||||
{
|
||||
var mappingModels = DeserializeJsonToArray<MappingModel>(value);
|
||||
foreach (var mappingModel in mappingModels)
|
||||
if (mappingModels.Length == 1 && Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename))
|
||||
{
|
||||
if (mappingModels.Length == 1 && Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename))
|
||||
{
|
||||
ConvertMappingAndRegisterAsRespondProvider(mappingModel, guidFromFilename, path);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertMappingAndRegisterAsRespondProvider(mappingModel, null, path);
|
||||
}
|
||||
ConvertMappingAndRegisterAsRespondProvider(mappingModels[0], guidFromFilename, path);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertMappingsAndRegisterAsRespondProvider(mappingModels, path);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -422,10 +419,7 @@ public partial class WireMockServer
|
||||
return ResponseMessageBuilder.Create("Mapping added", 201, guid);
|
||||
}
|
||||
|
||||
foreach (var mappingModel in mappingModels)
|
||||
{
|
||||
ConvertMappingAndRegisterAsRespondProvider(mappingModel);
|
||||
}
|
||||
ConvertMappingsAndRegisterAsRespondProvider(mappingModels);
|
||||
|
||||
return ResponseMessageBuilder.Create("Mappings added", 201);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,25 @@ namespace WireMock.Server;
|
||||
|
||||
public partial class WireMockServer
|
||||
{
|
||||
private void ConvertMappingsAndRegisterAsRespondProvider(MappingModel[] mappingModels, string? path = null)
|
||||
{
|
||||
var duplicateGuids = mappingModels
|
||||
.Where(m => m.Guid != null)
|
||||
.GroupBy(m => m.Guid)
|
||||
.Where(g => g.Count() > 1)
|
||||
.Select(g => $"'{g.Key}'")
|
||||
.ToArray();
|
||||
if (duplicateGuids.Any())
|
||||
{
|
||||
throw new ArgumentException($"The following Guids are duplicate : {string.Join(",", duplicateGuids)}", nameof(mappingModels));
|
||||
}
|
||||
|
||||
foreach (var mappingModel in mappingModels)
|
||||
{
|
||||
ConvertMappingAndRegisterAsRespondProvider(mappingModel, null, path);
|
||||
}
|
||||
}
|
||||
|
||||
private Guid? ConvertMappingAndRegisterAsRespondProvider(MappingModel mappingModel, Guid? guid = null, string? path = null)
|
||||
{
|
||||
Guard.NotNull(mappingModel);
|
||||
@@ -37,9 +56,10 @@ public partial class WireMockServer
|
||||
respondProvider = respondProvider.WithGuid(mappingModel.Guid.Value);
|
||||
}
|
||||
|
||||
if (mappingModel.TimeSettings != null)
|
||||
var timeSettings = TimeSettingsMapper.Map(mappingModel.TimeSettings);
|
||||
if (timeSettings != null)
|
||||
{
|
||||
respondProvider = respondProvider.WithTimeSettings(TimeSettingsMapper.Map(mappingModel.TimeSettings));
|
||||
respondProvider = respondProvider.WithTimeSettings(timeSettings);
|
||||
}
|
||||
|
||||
if (path != null)
|
||||
@@ -101,7 +121,7 @@ public partial class WireMockServer
|
||||
else
|
||||
{
|
||||
var clientIPModel = JsonUtils.ParseJTokenToObject<ClientIPModel>(requestModel.ClientIP);
|
||||
if (clientIPModel?.Matchers != null)
|
||||
if (clientIPModel.Matchers != null)
|
||||
{
|
||||
requestBuilder = requestBuilder.WithPath(clientIPModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||
}
|
||||
@@ -119,7 +139,7 @@ public partial class WireMockServer
|
||||
else
|
||||
{
|
||||
var pathModel = JsonUtils.ParseJTokenToObject<PathModel>(requestModel.Path);
|
||||
if (pathModel?.Matchers != null)
|
||||
if (pathModel.Matchers != null)
|
||||
{
|
||||
var matchOperator = StringUtils.ParseMatchOperator(pathModel.MatchOperator);
|
||||
requestBuilder = requestBuilder.WithPath(matchOperator, pathModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||
@@ -137,7 +157,7 @@ public partial class WireMockServer
|
||||
else
|
||||
{
|
||||
var urlModel = JsonUtils.ParseJTokenToObject<UrlModel>(requestModel.Url);
|
||||
if (urlModel?.Matchers != null)
|
||||
if (urlModel.Matchers != null)
|
||||
{
|
||||
var matchOperator = StringUtils.ParseMatchOperator(urlModel.MatchOperator);
|
||||
requestBuilder = requestBuilder.WithUrl(matchOperator, urlModel.Matchers.Select(_matcherMapper.Map).OfType<IStringMatcher>().ToArray());
|
||||
|
||||
Reference in New Issue
Block a user