mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-23 08:48:28 +02:00
\__admin\mappings\save (issue #21)
This commit is contained in:
@@ -22,7 +22,7 @@ namespace WireMock.Server
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class FluentMockServer
|
public partial class FluentMockServer
|
||||||
{
|
{
|
||||||
private const string AdminMappingsFolder = @"\__admin\mappings";
|
private const string AdminMappingsFolder = @"\__admin\mappings\";
|
||||||
private const string AdminMappings = "/__admin/mappings";
|
private const string AdminMappings = "/__admin/mappings";
|
||||||
private const string AdminRequests = "/__admin/requests";
|
private const string AdminRequests = "/__admin/requests";
|
||||||
private readonly RegexMatcher _adminMappingsGuidPathMatcher = new RegexMatcher(@"^\/__admin\/mappings\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
|
private readonly RegexMatcher _adminMappingsGuidPathMatcher = new RegexMatcher(@"^\/__admin\/mappings\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
|
||||||
@@ -30,8 +30,8 @@ namespace WireMock.Server
|
|||||||
|
|
||||||
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
|
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
|
||||||
{
|
{
|
||||||
Formatting = Formatting.None,
|
Formatting = Formatting.Indented,
|
||||||
NullValueHandling = NullValueHandling.Ignore
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
};
|
};
|
||||||
|
|
||||||
private void ReadStaticMappings()
|
private void ReadStaticMappings()
|
||||||
@@ -41,7 +41,7 @@ namespace WireMock.Server
|
|||||||
|
|
||||||
foreach (string filename in Directory.EnumerateFiles(Directory.GetCurrentDirectory() + AdminMappingsFolder))
|
foreach (string filename in Directory.EnumerateFiles(Directory.GetCurrentDirectory() + AdminMappingsFolder))
|
||||||
{
|
{
|
||||||
var json = File.OpenText(filename).ReadToEnd();
|
var json = File.ReadAllText(filename);
|
||||||
DeserializeAndAddMapping(json, Guid.Parse(Path.GetFileNameWithoutExtension(filename)));
|
DeserializeAndAddMapping(json, Guid.Parse(Path.GetFileNameWithoutExtension(filename)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,6 +59,9 @@ namespace WireMock.Server
|
|||||||
Given(Request.Create().WithPath(_adminMappingsGuidPathMatcher).UsingDelete()).RespondWith(new DynamicResponseProvider(MappingDelete));
|
Given(Request.Create().WithPath(_adminMappingsGuidPathMatcher).UsingDelete()).RespondWith(new DynamicResponseProvider(MappingDelete));
|
||||||
|
|
||||||
|
|
||||||
|
// __admin/mappings/save
|
||||||
|
Given(Request.Create().WithPath(AdminMappings + "/save").UsingPost()).RespondWith(new DynamicResponseProvider(MappingsSave));
|
||||||
|
|
||||||
// __admin/requests
|
// __admin/requests
|
||||||
Given(Request.Create().WithPath(AdminRequests).UsingGet()).RespondWith(new DynamicResponseProvider(RequestsGet));
|
Given(Request.Create().WithPath(AdminRequests).UsingGet()).RespondWith(new DynamicResponseProvider(RequestsGet));
|
||||||
Given(Request.Create().WithPath(AdminRequests).UsingDelete()).RespondWith(new DynamicResponseProvider(RequestsDelete));
|
Given(Request.Create().WithPath(AdminRequests).UsingDelete()).RespondWith(new DynamicResponseProvider(RequestsDelete));
|
||||||
@@ -72,7 +75,7 @@ namespace WireMock.Server
|
|||||||
private ResponseMessage MappingGet(RequestMessage requestMessage)
|
private ResponseMessage MappingGet(RequestMessage requestMessage)
|
||||||
{
|
{
|
||||||
Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1));
|
Guid guid = Guid.Parse(requestMessage.Path.Substring(AdminMappings.Length + 1));
|
||||||
var mapping = Mappings.FirstOrDefault(m => !(m.Provider is DynamicResponseProvider) && m.Guid == guid);
|
var mapping = Mappings.FirstOrDefault(m => !m.IsAdminInterface && m.Guid == guid);
|
||||||
|
|
||||||
if (mapping == null)
|
if (mapping == null)
|
||||||
return new ResponseMessage { StatusCode = 404, Body = "Mapping not found" };
|
return new ResponseMessage { StatusCode = 404, Body = "Mapping not found" };
|
||||||
@@ -115,10 +118,27 @@ namespace WireMock.Server
|
|||||||
#endregion Mapping/{guid}
|
#endregion Mapping/{guid}
|
||||||
|
|
||||||
#region Mappings
|
#region Mappings
|
||||||
|
private ResponseMessage MappingsSave(RequestMessage requestMessage)
|
||||||
|
{
|
||||||
|
string folder = Directory.GetCurrentDirectory() + AdminMappingsFolder;
|
||||||
|
if (!Directory.Exists(folder))
|
||||||
|
Directory.CreateDirectory(folder);
|
||||||
|
|
||||||
|
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
|
||||||
|
{
|
||||||
|
var model = ToMappingModel(mapping);
|
||||||
|
string json = JsonConvert.SerializeObject(model, _settings);
|
||||||
|
|
||||||
|
File.WriteAllText(Path.Combine(folder, mapping.Guid + ".json"), json);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseMessage { Body = "Mappings saved to disk" };
|
||||||
|
}
|
||||||
|
|
||||||
private ResponseMessage MappingsGet(RequestMessage requestMessage)
|
private ResponseMessage MappingsGet(RequestMessage requestMessage)
|
||||||
{
|
{
|
||||||
var result = new List<MappingModel>();
|
var result = new List<MappingModel>();
|
||||||
foreach (var mapping in Mappings.Where(m => !(m.Provider is DynamicResponseProvider)))
|
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
|
||||||
{
|
{
|
||||||
var model = ToMappingModel(mapping);
|
var model = ToMappingModel(mapping);
|
||||||
result.Add(model);
|
result.Add(model);
|
||||||
@@ -288,8 +308,6 @@ namespace WireMock.Server
|
|||||||
|
|
||||||
if (mappingModel.Request.Methods != null)
|
if (mappingModel.Request.Methods != null)
|
||||||
requestBuilder = requestBuilder.UsingVerb(mappingModel.Request.Methods);
|
requestBuilder = requestBuilder.UsingVerb(mappingModel.Request.Methods);
|
||||||
else
|
|
||||||
requestBuilder = requestBuilder.UsingAnyVerb();
|
|
||||||
|
|
||||||
if (mappingModel.Request.Headers != null)
|
if (mappingModel.Request.Headers != null)
|
||||||
{
|
{
|
||||||
@@ -383,14 +401,14 @@ namespace WireMock.Server
|
|||||||
|
|
||||||
Methods = methodMatcher?.Methods,
|
Methods = methodMatcher?.Methods,
|
||||||
|
|
||||||
Headers = headerMatchers != null && headerMatchers.Any() ? headerMatchers?.Select(hm => new HeaderModel
|
Headers = headerMatchers != null && headerMatchers.Any() ? headerMatchers.Select(hm => new HeaderModel
|
||||||
{
|
{
|
||||||
Name = hm.Name,
|
Name = hm.Name,
|
||||||
Matchers = Map(hm.Matchers),
|
Matchers = Map(hm.Matchers),
|
||||||
Funcs = Map(hm.Funcs)
|
Funcs = Map(hm.Funcs)
|
||||||
}).ToList() : null,
|
}).ToList() : null,
|
||||||
|
|
||||||
Cookies = cookieMatchers != null && cookieMatchers.Any() ? cookieMatchers?.Select(cm => new CookieModel
|
Cookies = cookieMatchers != null && cookieMatchers.Any() ? cookieMatchers.Select(cm => new CookieModel
|
||||||
{
|
{
|
||||||
Name = cm.Name,
|
Name = cm.Name,
|
||||||
Matchers = Map(cm.Matchers),
|
Matchers = Map(cm.Matchers),
|
||||||
|
|||||||
Reference in New Issue
Block a user