SaveMappingToFile #27

This commit is contained in:
Stef Heyenrath
2017-05-12 22:21:55 +02:00
parent 23b795ab1e
commit 4ada6d3567
5 changed files with 151 additions and 44 deletions

View File

@@ -6,10 +6,17 @@
<ApplicationIcon>../../WireMock.Net-Logo.ico</ApplicationIcon> <ApplicationIcon>../../WireMock.Net-Logo.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Remove="__admin\mappings\826aff7c-6208-4a3c-923d-575248907db4.json" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json"> <Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="__admin\mappings\826aff7c-6208-4a3c-923d-575248907db4.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -7,9 +7,9 @@ namespace WireMock.Http
{ {
internal static class HttpClientHelper internal static class HttpClientHelper
{ {
private static HttpClient client = new HttpClient();
public static async Task<ResponseMessage> SendAsync(RequestMessage requestMessage, string url) public static async Task<ResponseMessage> SendAsync(RequestMessage requestMessage, string url)
{
using (var client = new HttpClient())
{ {
var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), url); var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), url);
@@ -49,5 +49,4 @@ namespace WireMock.Http
return responseMessage; return responseMessage;
} }
} }
}
} }

View File

@@ -130,8 +130,22 @@ namespace WireMock.Server
{ {
var responseMessage = await HttpClientHelper.SendAsync(requestMessage, settings.Url); var responseMessage = await HttpClientHelper.SendAsync(requestMessage, settings.Url);
var mapping = ToMapping(requestMessage, responseMessage);
SaveMappingToFile(mapping);
return responseMessage; return responseMessage;
} }
private Mapping ToMapping(RequestMessage requestMessage, ResponseMessage responseMessage)
{
var request = (Request)Request.Create();
request.WithPath(requestMessage.Path);
request.UsingVerb(requestMessage.Method);
var response = (Response)Response.Create(responseMessage);
return new Mapping(Guid.NewGuid(), string.Empty, request, response, 0);
}
#endregion #endregion
#region Settings #region Settings
@@ -211,13 +225,21 @@ namespace WireMock.Server
#region Mappings #region Mappings
private ResponseMessage MappingsSave(RequestMessage requestMessage) private ResponseMessage MappingsSave(RequestMessage requestMessage)
{
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
{
SaveMappingToFile(mapping);
}
return new ResponseMessage { Body = "Mappings saved to disk" };
}
private void SaveMappingToFile(Mapping mapping)
{ {
string folder = Path.Combine(Directory.GetCurrentDirectory(), AdminMappingsFolder); string folder = Path.Combine(Directory.GetCurrentDirectory(), AdminMappingsFolder);
if (!Directory.Exists(folder)) if (!Directory.Exists(folder))
Directory.CreateDirectory(folder); Directory.CreateDirectory(folder);
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
{
var model = ToMappingModel(mapping); var model = ToMappingModel(mapping);
string json = JsonConvert.SerializeObject(model, _settings); string json = JsonConvert.SerializeObject(model, _settings);
string filename = !string.IsNullOrEmpty(mapping.Title) ? SanitizeFileName(mapping.Title) : mapping.Guid.ToString(); string filename = !string.IsNullOrEmpty(mapping.Title) ? SanitizeFileName(mapping.Title) : mapping.Guid.ToString();
@@ -225,9 +247,6 @@ namespace WireMock.Server
File.WriteAllText(Path.Combine(folder, filename + ".json"), json); File.WriteAllText(Path.Combine(folder, filename + ".json"), json);
} }
return new ResponseMessage { Body = "Mappings saved to disk" };
}
private static string SanitizeFileName(string name, char replaceChar = '_') private static string SanitizeFileName(string name, char replaceChar = '_')
{ {
return Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, replaceChar)); return Path.GetInvalidFileNameChars().Aggregate(name, (current, c) => current.Replace(c, replaceChar));