diff --git a/WireMock.Net Solution.sln.DotSettings b/WireMock.Net Solution.sln.DotSettings
index 6c092492..5504e424 100644
--- a/WireMock.Net Solution.sln.DotSettings
+++ b/WireMock.Net Solution.sln.DotSettings
@@ -16,6 +16,7 @@
True
True
True
+ True
True
True
True
diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs
index 7c477175..52a58d3f 100644
--- a/src/WireMock.Net/Server/WireMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs
@@ -188,16 +188,13 @@ public partial class WireMockServer
if (FileHelper.TryReadMappingFileWithRetryAndDelay(_settings.FileSystemHandler, path, out var value))
{
var mappingModels = DeserializeJsonToArray(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);
}
diff --git a/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs b/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs
index 5285a523..3c732ff6 100644
--- a/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs
+++ b/src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs
@@ -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(requestModel.ClientIP);
- if (clientIPModel?.Matchers != null)
+ if (clientIPModel.Matchers != null)
{
requestBuilder = requestBuilder.WithPath(clientIPModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray());
}
@@ -119,7 +139,7 @@ public partial class WireMockServer
else
{
var pathModel = JsonUtils.ParseJTokenToObject(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().ToArray());
@@ -137,7 +157,7 @@ public partial class WireMockServer
else
{
var urlModel = JsonUtils.ParseJTokenToObject(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().ToArray());
diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj
index 37f522c2..a85488e0 100644
--- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj
+++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj
@@ -73,7 +73,7 @@
-
+
diff --git a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs
index 4d5f0669..9fea0a0c 100644
--- a/test/WireMock.Net.Tests/WireMockAdminApiTests.cs
+++ b/test/WireMock.Net.Tests/WireMockAdminApiTests.cs
@@ -19,539 +19,589 @@ using WireMock.Server;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests
+namespace WireMock.Net.Tests;
+
+public class WireMockAdminApiTests
{
- public class WireMockAdminApiTests
+ [Fact]
+ public async Task IWireMockAdminApi_GetSettingsAsync()
{
- [Fact]
- public async Task IWireMockAdminApi_GetSettingsAsync()
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var settings = await api.GetSettingsAsync().ConfigureAwait(false);
+ Check.That(settings).IsNotNull();
+ }
+
+ [Fact]
+ public async Task IWireMockAdminApi_PostSettingsAsync()
+ {
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var settings = new SettingsModel();
+ var status = await api.PostSettingsAsync(settings).ConfigureAwait(false);
+ Check.That(status.Status).Equals("Settings updated");
+ }
+
+ [Fact]
+ public async Task IWireMockAdminApi_PutSettingsAsync()
+ {
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var settings = new SettingsModel();
+ var status = await api.PutSettingsAsync(settings).ConfigureAwait(false);
+ Check.That(status.Status).Equals("Settings updated");
+ }
+
+ // https://github.com/WireMock-Net/WireMock.Net/issues/325
+ [Fact]
+ public async Task IWireMockAdminApi_PutMappingAsync()
+ {
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var model = new MappingModel
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
+ 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).ConfigureAwait(false);
- // Act
- var settings = await api.GetSettingsAsync().ConfigureAwait(false);
- Check.That(settings).IsNotNull();
- }
+ // Assert
+ Check.That(result).IsNotNull();
+ Check.That(result.Status).Equals("Mapping added or updated");
+ Check.That(result.Guid).IsNotNull();
- [Fact]
- public async Task IWireMockAdminApi_PostSettingsAsync()
+ var mapping = server.Mappings.Single(m => m.Priority == 500);
+ Check.That(mapping).IsNotNull();
+ Check.That(mapping.Title).Equals("test");
+
+ server.Stop();
+ }
+
+ [Theory]
+ [InlineData(null, null)]
+ [InlineData(-1, -1)]
+ [InlineData(0, 0)]
+ [InlineData(200, 200)]
+ [InlineData("200", "200")]
+ public async Task IWireMockAdminApi_PostMappingAsync_WithStatusCode(object statusCode, object expectedStatusCode)
+ {
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var model = new MappingModel
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
+ Request = new RequestModel { Path = "/1" },
+ Response = new ResponseModel { Body = "txt", StatusCode = statusCode },
+ Priority = 500,
+ Title = "test"
+ };
+ var result = await api.PostMappingAsync(model).ConfigureAwait(false);
- // Act
- var settings = new SettingsModel();
- var status = await api.PostSettingsAsync(settings).ConfigureAwait(false);
- Check.That(status.Status).Equals("Settings updated");
- }
+ // Assert
+ Check.That(result).IsNotNull();
+ Check.That(result.Status).IsNotNull();
+ Check.That(result.Guid).IsNotNull();
- [Fact]
- public async Task IWireMockAdminApi_PutSettingsAsync()
+ var mapping = server.Mappings.Single(m => m.Priority == 500);
+ Check.That(mapping).IsNotNull();
+ Check.That(mapping.Title).Equals("test");
+
+ var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("http://localhost/1"), "GET", "")).ConfigureAwait(false);
+ Check.That(response.Message.StatusCode).Equals(expectedStatusCode);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public async Task IWireMockAdminApi_PostMappingsAsync()
+ {
+ // Arrange
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var model1 = new MappingModel
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
-
- // Act
- var settings = new SettingsModel();
- var status = await api.PutSettingsAsync(settings).ConfigureAwait(false);
- Check.That(status.Status).Equals("Settings updated");
- }
-
- // https://github.com/WireMock-Net/WireMock.Net/issues/325
- [Fact]
- public async Task IWireMockAdminApi_PutMappingAsync()
+ Request = new RequestModel { Path = "/1" },
+ Response = new ResponseModel { Body = "txt 1" },
+ Title = "test 1"
+ };
+ var model2 = new MappingModel
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
+ Request = new RequestModel { Path = "/2" },
+ Response = new ResponseModel { Body = "txt 2" },
+ Title = "test 2"
+ };
+ var result = await api.PostMappingsAsync(new[] { model1, model2 }).ConfigureAwait(false);
- // Act
- var model = new MappingModel
- {
- Request = new RequestModel { Path = "/1" },
- Response = new ResponseModel { Body = "txt", StatusCode = 200 },
- Priority = 500,
- Title = "test"
+ // Assert
+ Check.That(result).IsNotNull();
+ Check.That(result.Status).IsNotNull();
+ Check.That(result.Guid).IsNull();
+ Check.That(server.Mappings.Where(m => !m.IsAdminInterface)).HasSize(2);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public async Task IWireMockAdminApi_PostMappingsAsync_WithDuplicateGuids_Should_Return_400()
+ {
+ // Arrange
+ var guid = Guid.Parse("1b731398-4a5b-457f-a6e3-d65e541c428f");
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var model1WithGuid = new MappingModel
+ {
+ Guid = guid,
+ Request = new RequestModel { Path = "/1g" },
+ Response = new ResponseModel { Body = "txt 1g" },
+ Title = "test 1g"
+ };
+ var model2WithGuid = new MappingModel
+ {
+ Guid = guid,
+ Request = new RequestModel { Path = "/2g" },
+ Response = new ResponseModel { Body = "txt 2g" },
+ Title = "test 2g"
+ };
+ var model1 = new MappingModel
+ {
+ Request = new RequestModel { Path = "/1" },
+ Response = new ResponseModel { Body = "txt 1" },
+ Title = "test 1"
+ };
+ var model2 = new MappingModel
+ {
+ Request = new RequestModel { Path = "/2" },
+ Response = new ResponseModel { Body = "txt 2" },
+ Title = "test 2"
+ };
+
+ var models = new[]
+ {
+ model1WithGuid,
+ model2WithGuid,
+ model1,
+ model2
};
- var result = await api.PutMappingAsync(new Guid("a0000000-0000-0000-0000-000000000000"), model).ConfigureAwait(false);
- // Assert
- Check.That(result).IsNotNull();
- Check.That(result.Status).Equals("Mapping added or updated");
- Check.That(result.Guid).IsNotNull();
+ var sutMethod = async () => await api.PostMappingsAsync(models);
+ var exceptionAssertions = await sutMethod.Should().ThrowAsync();
+ exceptionAssertions.Which.Content.Should().Be(@"{""Status"":""The following Guids are duplicate : '1b731398-4a5b-457f-a6e3-d65e541c428f' (Parameter 'mappingModels')""}");
- var mapping = server.Mappings.Single(m => m.Priority == 500);
- Check.That(mapping).IsNotNull();
- Check.That(mapping.Title).Equals("test");
+ server.Stop();
+ }
- server.Stop();
- }
-
- [Theory]
- [InlineData(null, null)]
- [InlineData(-1, -1)]
- [InlineData(0, 0)]
- [InlineData(200, 200)]
- [InlineData("200", "200")]
- public async Task IWireMockAdminApi_PostMappingAsync_WithStatusCode(object statusCode, object expectedStatusCode)
+ [Fact]
+ public async Task IWireMockAdminApi_FindRequestsAsync()
+ {
+ // Arrange
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
+ StartAdminInterface = true,
+ Logger = new WireMockNullLogger()
+ });
+ var serverUrl = "http://localhost:" + server.Ports[0];
+ await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false);
+ var api = RestClient.For(serverUrl);
- // Act
- var model = new MappingModel
- {
- Request = new RequestModel { Path = "/1" },
- Response = new ResponseModel { Body = "txt", StatusCode = statusCode },
- Priority = 500,
- Title = "test"
- };
- var result = await api.PostMappingAsync(model).ConfigureAwait(false);
+ // Act
+ var requests = await api.FindRequestsAsync(new RequestModel { Methods = new[] { "GET" } }).ConfigureAwait(false);
- // Assert
- Check.That(result).IsNotNull();
- Check.That(result.Status).IsNotNull();
- Check.That(result.Guid).IsNotNull();
+ // Assert
+ Check.That(requests).HasSize(1);
+ var requestLogged = requests.First();
+ Check.That(requestLogged.Request.Method).IsEqualTo("GET");
+ Check.That(requestLogged.Request.Body).IsNull();
+ Check.That(requestLogged.Request.Path).IsEqualTo("/foo");
+ }
- var mapping = server.Mappings.Single(m => m.Priority == 500);
- Check.That(mapping).IsNotNull();
- Check.That(mapping.Title).Equals("test");
-
- var response = await mapping.ProvideResponseAsync(new RequestMessage(new UrlDetails("http://localhost/1"), "GET", "")).ConfigureAwait(false);
- Check.That(response.Message.StatusCode).Equals(expectedStatusCode);
-
- server.Stop();
- }
-
- [Fact]
- public async Task IWireMockAdminApi_PostMappingsAsync()
+ [Fact]
+ public async Task IWireMockAdminApi_GetRequestsAsync()
+ {
+ // Arrange
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
+ StartAdminInterface = true,
+ Logger = new WireMockNullLogger()
+ });
+ var serverUrl = "http://localhost:" + server.Ports[0];
+ await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false);
+ var api = RestClient.For(serverUrl);
- // Act
- var model1 = new MappingModel
- {
- Request = new RequestModel { Path = "/1" },
- Response = new ResponseModel { Body = "txt 1" },
- Title = "test 1"
- };
- var model2 = new MappingModel
- {
- Request = new RequestModel { Path = "/2" },
- Response = new ResponseModel { Body = "txt 2" },
- Title = "test 2"
- };
- var result = await api.PostMappingsAsync(new[] { model1, model2 }).ConfigureAwait(false);
+ // Act
+ var requests = await api.GetRequestsAsync().ConfigureAwait(false);
- // Assert
- Check.That(result).IsNotNull();
- Check.That(result.Status).IsNotNull();
- Check.That(result.Guid).IsNull();
- Check.That(server.Mappings.Where(m => !m.IsAdminInterface)).HasSize(2);
+ // Assert
+ Check.That(requests).HasSize(1);
+ var requestLogged = requests.First();
+ Check.That(requestLogged.Request.Method).IsEqualTo("GET");
+ Check.That(requestLogged.Request.Body).IsNull();
+ Check.That(requestLogged.Request.Path).IsEqualTo("/foo");
+ }
- server.Stop();
- }
-
- [Fact]
- public async Task IWireMockAdminApi_FindRequestsAsync()
+ [Fact]
+ public async Task IWireMockAdminApi_GetRequestsAsync_JsonApi()
+ {
+ // Arrange
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- StartAdminInterface = true,
- Logger = new WireMockNullLogger()
- });
- var serverUrl = "http://localhost:" + server.Ports[0];
- await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false);
- var api = RestClient.For(serverUrl);
+ StartAdminInterface = true,
+ Logger = new WireMockNullLogger()
+ });
+ string serverUrl = server.Urls[0];
+ string data = "{\"data\":[{\"type\":\"program\",\"attributes\":{\"alias\":\"T000001\",\"title\":\"Title Group Entity\"}}]}";
+ string jsonApiAcceptHeader = "application/vnd.api+json";
+ string jsonApiContentType = "application/vnd.api+json";
- // Act
- var requests = await api.FindRequestsAsync(new RequestModel { Methods = new[] { "GET" } }).ConfigureAwait(false);
+ var request = new HttpRequestMessage(HttpMethod.Post, serverUrl);
+ request.Headers.Accept.Clear();
+ request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonApiAcceptHeader));
+ request.Content = new StringContent(data);
+ request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType);
- // Assert
- Check.That(requests).HasSize(1);
- var requestLogged = requests.First();
- Check.That(requestLogged.Request.Method).IsEqualTo("GET");
- Check.That(requestLogged.Request.Body).IsNull();
- Check.That(requestLogged.Request.Path).IsEqualTo("/foo");
- }
+ var response = await new HttpClient().SendAsync(request);
+ Check.That(response).IsNotNull();
- [Fact]
- public async Task IWireMockAdminApi_GetRequestsAsync()
+ var api = RestClient.For(serverUrl);
+
+ // Act
+ var requests = await api.GetRequestsAsync().ConfigureAwait(false);
+
+ // Assert
+ Check.That(requests).HasSize(1);
+ var requestLogged = requests.First();
+ Check.That(requestLogged.Request.Method).IsEqualTo("POST");
+ Check.That(requestLogged.Request.Body).IsNotNull();
+ Check.That(requestLogged.Request.Body).Contains("T000001");
+ }
+
+ [Fact]
+ public async Task IWireMockAdminApi_GetMappingAsync_WithBodyModelMatcherModel_WithoutMethods_ShouldReturnCorrectMappingModel()
+ {
+ // Arrange
+ var guid = Guid.NewGuid();
+ var server = WireMockServer.StartWithAdminInterface();
+ var api = RestClient.For(server.Urls[0]);
+
+ // Act
+ var model = new MappingModel
{
- // Arrange
- var server = WireMockServer.Start(new WireMockServerSettings
+ Guid = guid,
+ Request = new RequestModel
{
- StartAdminInterface = true,
- Logger = new WireMockNullLogger()
- });
- var serverUrl = "http://localhost:" + server.Ports[0];
- await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false);
- var api = RestClient.For(serverUrl);
-
- // Act
- var requests = await api.GetRequestsAsync().ConfigureAwait(false);
-
- // Assert
- Check.That(requests).HasSize(1);
- var requestLogged = requests.First();
- Check.That(requestLogged.Request.Method).IsEqualTo("GET");
- Check.That(requestLogged.Request.Body).IsNull();
- Check.That(requestLogged.Request.Path).IsEqualTo("/foo");
- }
-
- [Fact]
- public async Task IWireMockAdminApi_GetRequestsAsync_JsonApi()
- {
- // Arrange
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- StartAdminInterface = true,
- Logger = new WireMockNullLogger()
- });
- string serverUrl = server.Urls[0];
- string data = "{\"data\":[{\"type\":\"program\",\"attributes\":{\"alias\":\"T000001\",\"title\":\"Title Group Entity\"}}]}";
- string jsonApiAcceptHeader = "application/vnd.api+json";
- string jsonApiContentType = "application/vnd.api+json";
-
- var request = new HttpRequestMessage(HttpMethod.Post, serverUrl);
- request.Headers.Accept.Clear();
- request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonApiAcceptHeader));
- request.Content = new StringContent(data);
- request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType);
-
- var response = await new HttpClient().SendAsync(request);
- Check.That(response).IsNotNull();
-
- var api = RestClient.For(serverUrl);
-
- // Act
- var requests = await api.GetRequestsAsync().ConfigureAwait(false);
-
- // Assert
- Check.That(requests).HasSize(1);
- var requestLogged = requests.First();
- Check.That(requestLogged.Request.Method).IsEqualTo("POST");
- Check.That(requestLogged.Request.Body).IsNotNull();
- Check.That(requestLogged.Request.Body).Contains("T000001");
- }
-
- [Fact]
- public async Task IWireMockAdminApi_GetMappingAsync_WithBodyModelMatcherModel_WithoutMethods_ShouldReturnCorrectMappingModel()
- {
- // Arrange
- var guid = Guid.NewGuid();
- var server = WireMockServer.StartWithAdminInterface();
- var api = RestClient.For(server.Urls[0]);
-
- // Act
- var model = new MappingModel
- {
- Guid = guid,
- Request = new RequestModel
+ Path = "/1",
+ Body = new BodyModel
{
- Path = "/1",
- Body = new BodyModel
+ Matcher = new MatcherModel
{
- Matcher = new MatcherModel
- {
- Name = "RegexMatcher",
- Pattern = "hello",
- IgnoreCase = true
- }
+ Name = "RegexMatcher",
+ Pattern = "hello",
+ IgnoreCase = true
}
- },
- Response = new ResponseModel { Body = "world" }
- };
- var postMappingResult = await api.PostMappingAsync(model).ConfigureAwait(false);
+ }
+ },
+ Response = new ResponseModel { Body = "world" }
+ };
+ var postMappingResult = await api.PostMappingAsync(model).ConfigureAwait(false);
- // Assert
- postMappingResult.Should().NotBeNull();
+ // Assert
+ postMappingResult.Should().NotBeNull();
- var mapping = server.Mappings.FirstOrDefault(m => m.Guid == guid);
- mapping.Should().NotBeNull();
+ var mapping = server.Mappings.FirstOrDefault(m => m.Guid == guid);
+ mapping.Should().NotBeNull();
- var getMappingResult = await api.GetMappingAsync(guid).ConfigureAwait(false);
- getMappingResult.Should().NotBeNull();
+ var getMappingResult = await api.GetMappingAsync(guid).ConfigureAwait(false);
+ getMappingResult.Should().NotBeNull();
- getMappingResult.Request.Body.Should().BeEquivalentTo(model.Request.Body);
+ getMappingResult.Request.Body.Should().BeEquivalentTo(model.Request.Body);
- server.Stop();
- }
+ server.Stop();
+ }
- [Fact]
- public async Task IWireMockAdminApi_GetRequestsAsync_Json()
+ [Fact]
+ public async Task IWireMockAdminApi_GetRequestsAsync_Json()
+ {
+ // Arrange
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- StartAdminInterface = true,
- Logger = new WireMockNullLogger()
- });
- string serverUrl = server.Urls[0];
- string data = "{\"alias\": \"T000001\"}";
- string jsonAcceptHeader = "application/json";
- string jsonApiContentType = "application/json";
+ StartAdminInterface = true,
+ Logger = new WireMockNullLogger()
+ });
+ string serverUrl = server.Urls[0];
+ string data = "{\"alias\": \"T000001\"}";
+ string jsonAcceptHeader = "application/json";
+ string jsonApiContentType = "application/json";
- var request = new HttpRequestMessage(HttpMethod.Post, serverUrl);
- request.Headers.Accept.Clear();
- request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonAcceptHeader));
- request.Content = new StringContent(data);
- request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType);
- var response = await new HttpClient().SendAsync(request);
- Check.That(response).IsNotNull();
+ var request = new HttpRequestMessage(HttpMethod.Post, serverUrl);
+ request.Headers.Accept.Clear();
+ request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(jsonAcceptHeader));
+ request.Content = new StringContent(data);
+ request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonApiContentType);
+ var response = await new HttpClient().SendAsync(request);
+ Check.That(response).IsNotNull();
- var api = RestClient.For(serverUrl);
+ var api = RestClient.For(serverUrl);
- // Act
- var requests = await api.GetRequestsAsync().ConfigureAwait(false);
+ // Act
+ var requests = await api.GetRequestsAsync().ConfigureAwait(false);
- // Assert
- Check.That(requests).HasSize(1);
- var requestLogged = requests.First();
- Check.That(requestLogged.Request.Method).IsEqualTo("POST");
- Check.That(requestLogged.Request.Body).IsNotNull();
- Check.That(requestLogged.Request.Body).Contains("T000001");
- }
+ // Assert
+ Check.That(requests).HasSize(1);
+ var requestLogged = requests.First();
+ Check.That(requestLogged.Request.Method).IsEqualTo("POST");
+ Check.That(requestLogged.Request.Body).IsNotNull();
+ Check.That(requestLogged.Request.Body).Contains("T000001");
+ }
- [Fact]
- public async Task IWireMockAdminApi_PostFileAsync_Ascii()
+ [Fact]
+ public async Task IWireMockAdminApi_PostFileAsync_Ascii()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.GetMappingFolder()).Returns("__admin/mappings");
+ filesystemHandlerMock.Setup(fs => fs.FolderExists(It.IsAny())).Returns(true);
+ filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny()));
+
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.GetMappingFolder()).Returns("__admin/mappings");
- filesystemHandlerMock.Setup(fs => fs.FolderExists(It.IsAny())).Returns(true);
- filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny()));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act
+ var request = await api.PostFileAsync("filename.txt", "abc").ConfigureAwait(false);
- // Act
- var request = await api.PostFileAsync("filename.txt", "abc").ConfigureAwait(false);
+ // Assert
+ Check.That(request.Guid).IsNull();
+ Check.That(request.Status).Contains("File");
- // Assert
- Check.That(request.Guid).IsNull();
- Check.That(request.Status).Contains("File");
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Once);
+ filesystemHandlerMock.Verify(fs => fs.FolderExists(It.IsAny()), Times.Once);
+ filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Once);
- filesystemHandlerMock.Verify(fs => fs.FolderExists(It.IsAny()), Times.Once);
- filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public async Task IWireMockAdminApi_PutFileAsync_Ascii()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
+ filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny()));
- [Fact]
- public async Task IWireMockAdminApi_PutFileAsync_Ascii()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
- filesystemHandlerMock.Setup(fs => fs.WriteFile(It.IsAny(), It.IsAny()));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act
+ var request = await api.PutFileAsync("filename.txt", "abc-abc").ConfigureAwait(false);
- // Act
- var request = await api.PutFileAsync("filename.txt", "abc-abc").ConfigureAwait(false);
+ // Assert
+ Check.That(request.Guid).IsNull();
+ Check.That(request.Status).Contains("File");
- // Assert
- Check.That(request.Guid).IsNull();
- Check.That(request.Status).Contains("File");
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once);
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.WriteFile(It.Is(p => p == "filename.txt"), It.IsAny()), Times.Once);
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public void IWireMockAdminApi_PutFileAsync_NotFound()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
- [Fact]
- public void IWireMockAdminApi_PutFileAsync_NotFound()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act and Assert
+ Check.ThatAsyncCode(() => api.PutFileAsync("filename.txt", "xxx")).Throws();
- // Act and Assert
- Check.ThatAsyncCode(() => api.PutFileAsync("filename.txt", "xxx")).Throws();
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public void IWireMockAdminApi_GetFileAsync_NotFound()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
+ filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes("Here's a string."));
- [Fact]
- public void IWireMockAdminApi_GetFileAsync_NotFound()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
- filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes("Here's a string."));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act and Assert
+ Check.ThatAsyncCode(() => api.GetFileAsync("filename.txt")).Throws();
- // Act and Assert
- Check.ThatAsyncCode(() => api.GetFileAsync("filename.txt")).Throws();
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public async Task IWireMockAdminApi_GetFileAsync_Found()
+ {
+ // Arrange
+ string data = "Here's a string.";
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
+ filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes(data));
- [Fact]
- public async Task IWireMockAdminApi_GetFileAsync_Found()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- string data = "Here's a string.";
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
- filesystemHandlerMock.Setup(fs => fs.ReadFile(It.IsAny())).Returns(Encoding.ASCII.GetBytes(data));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act
+ string file = await api.GetFileAsync("filename.txt").ConfigureAwait(false);
- // Act
- string file = await api.GetFileAsync("filename.txt").ConfigureAwait(false);
+ // Assert
+ Check.That(file).Equals(data);
- // Assert
- Check.That(file).Equals(data);
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.Verify(fs => fs.ReadFile(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.Verify(fs => fs.ReadFile(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public async Task IWireMockAdminApi_DeleteFileAsync_Ok()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
+ filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny()));
- [Fact]
- public async Task IWireMockAdminApi_DeleteFileAsync_Ok()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(true);
- filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny()));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act
+ await api.DeleteFileAsync("filename.txt").ConfigureAwait(false);
- // Act
- await api.DeleteFileAsync("filename.txt").ConfigureAwait(false);
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.Verify(fs => fs.DeleteFile(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.Verify(fs => fs.DeleteFile(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public void IWireMockAdminApi_DeleteFileAsync_NotFound()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
+ filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny()));
- [Fact]
- public void IWireMockAdminApi_DeleteFileAsync_NotFound()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
- filesystemHandlerMock.Setup(fs => fs.DeleteFile(It.IsAny()));
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act and Assert
+ Check.ThatAsyncCode(() => api.DeleteFileAsync("filename.txt")).Throws();
- // Act and Assert
- Check.ThatAsyncCode(() => api.DeleteFileAsync("filename.txt")).Throws();
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
+ server.Stop();
+ }
- server.Stop();
- }
+ [Fact]
+ public void IWireMockAdminApi_FileExistsAsync_NotFound()
+ {
+ // Arrange
+ var filesystemHandlerMock = new Mock(MockBehavior.Strict);
+ filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
- [Fact]
- public void IWireMockAdminApi_FileExistsAsync_NotFound()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Arrange
- var filesystemHandlerMock = new Mock(MockBehavior.Strict);
- filesystemHandlerMock.Setup(fs => fs.FileExists(It.IsAny())).Returns(false);
+ UseSSL = false,
+ StartAdminInterface = true,
+ FileSystemHandler = filesystemHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- UseSSL = false,
- StartAdminInterface = true,
- FileSystemHandler = filesystemHandlerMock.Object
- });
+ var api = RestClient.For(server.Urls[0]);
- var api = RestClient.For(server.Urls[0]);
+ // Act and Assert
+ Check.ThatAsyncCode(() => api.FileExistsAsync("filename.txt")).Throws();
- // Act and Assert
- Check.ThatAsyncCode(() => api.FileExistsAsync("filename.txt")).Throws();
+ // Verify
+ filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
+ filesystemHandlerMock.VerifyNoOtherCalls();
- // Verify
- filesystemHandlerMock.Verify(fs => fs.FileExists(It.Is(p => p == "filename.txt")), Times.Once);
- filesystemHandlerMock.VerifyNoOtherCalls();
-
- server.Stop();
- }
+ server.Stop();
}
}
#endif
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/WireMockServer.Admin.cs b/test/WireMock.Net.Tests/WireMockServer.Admin.cs
index bea1916c..f299c17d 100644
--- a/test/WireMock.Net.Tests/WireMockServer.Admin.cs
+++ b/test/WireMock.Net.Tests/WireMockServer.Admin.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
@@ -17,467 +16,466 @@ using WireMock.Server;
using WireMock.Settings;
using Xunit;
-namespace WireMock.Net.Tests
+namespace WireMock.Net.Tests;
+
+public class WireMockServerAdminTests
{
- public class WireMockServerAdminTests
+ // For for AppVeyor + OpenCover
+ private string GetCurrentFolder()
{
- // For for AppVeyor + OpenCover
- private string GetCurrentFolder()
+ string current = Directory.GetCurrentDirectory();
+ //if (!current.EndsWith("WireMock.Net.Tests"))
+ // return Path.Combine(current, "test", "WireMock.Net.Tests");
+
+ return current;
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ResetMappings()
+ {
+ var server = WireMockServer.Start();
+ string folder = Path.Combine(GetCurrentFolder(), "__admin", "mappings");
+ server.ReadStaticMappings(folder);
+
+ Check.That(server.Mappings).HasSize(6);
+ Check.That(server.MappingModels).HasSize(6);
+
+ // Act
+ server.ResetMappings();
+
+ // Assert
+ Check.That(server.Mappings).HasSize(0);
+ Check.That(server.MappingModels).HasSize(0);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_SaveStaticMappings()
+ {
+ // Assign
+ string guid = "791a3f31-6946-aaaa-8e6f-0237c7441111";
+ var staticMappingHandlerMock = new Mock();
+ staticMappingHandlerMock.Setup(m => m.GetMappingFolder()).Returns("folder");
+ staticMappingHandlerMock.Setup(m => m.FolderExists(It.IsAny())).Returns(true);
+ staticMappingHandlerMock.Setup(m => m.WriteMappingFile(It.IsAny(), It.IsAny()));
+
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- string current = Directory.GetCurrentDirectory();
- //if (!current.EndsWith("WireMock.Net.Tests"))
- // return Path.Combine(current, "test", "WireMock.Net.Tests");
+ FileSystemHandler = staticMappingHandlerMock.Object
+ });
- return current;
- }
+ server
+ .Given(Request.Create().WithPath($"/foo_{Guid.NewGuid()}"))
+ .WithGuid(guid)
+ .RespondWith(Response.Create().WithBody("save test"));
- [Fact]
- public void WireMockServer_Admin_ResetMappings()
+ // Act
+ server.SaveStaticMappings();
+
+ // Assert and Verify
+ staticMappingHandlerMock.Verify(m => m.GetMappingFolder(), Times.Once);
+ staticMappingHandlerMock.Verify(m => m.FolderExists("folder"), Times.Once);
+ staticMappingHandlerMock.Verify(m => m.WriteMappingFile(Path.Combine("folder", guid + ".json"), It.IsAny()), Times.Once);
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMapping_WithNonGuidFilename()
+ {
+ var guid = Guid.Parse("04ee4872-9efd-4770-90d3-88d445265d0d");
+ string title = "documentdb_root_title";
+
+ var server = WireMockServer.Start();
+
+ string path = Path.Combine(GetCurrentFolder(), "__admin", "mappings", "documentdb_root.json");
+ server.ReadStaticMappingAndAddOrUpdate(path);
+
+ var mappings = server.Mappings.ToArray();
+ Check.That(mappings).HasSize(1);
+
+ Check.That(mappings.First().RequestMatcher).IsNotNull();
+ Check.That(mappings.First().Provider).IsNotNull();
+ Check.That(mappings.First().Guid).Equals(guid);
+ Check.That(mappings.First().Title).Equals(title);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMapping_WithGuidFilename()
+ {
+ string guid = "00000002-ee28-4f29-ae63-1ac9b0802d86";
+
+ var server = WireMockServer.Start();
+ string path = Path.Combine(GetCurrentFolder(), "__admin", "mappings", guid + ".json");
+ server.ReadStaticMappingAndAddOrUpdate(path);
+
+ var mappings = server.Mappings.ToArray();
+ Check.That(mappings).HasSize(1);
+
+ Check.That(mappings.First().RequestMatcher).IsNotNull();
+ Check.That(mappings.First().Provider).IsNotNull();
+ Check.That(mappings.First().Guid).Equals(Guid.Parse(guid));
+ Check.That(mappings.First().Title).IsNullOrEmpty();
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMapping_WithArray()
+ {
+ var server = WireMockServer.Start();
+
+ string path = Path.Combine(GetCurrentFolder(), "__admin", "mappings", "array.json");
+ server.ReadStaticMappingAndAddOrUpdate(path);
+
+ var mappings = server.Mappings.ToArray();
+ Check.That(mappings).HasSize(2);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMapping_WithResponseBodyFromFile()
+ {
+ string guid = "00000002-ee28-4f29-ae63-1ac9b0802d87";
+
+ string path = Path.Combine(GetCurrentFolder(), "__admin", "mappings", guid + ".json");
+ string json = File.ReadAllText(path);
+
+ string responseBodyFilePath = Path.Combine(GetCurrentFolder(), "responsebody.json");
+
+ dynamic jsonObj = JsonConvert.DeserializeObject(json);
+ jsonObj["Response"]["BodyAsFile"] = responseBodyFilePath;
+
+ string output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
+ File.WriteAllText(path, output);
+
+ var server = WireMockServer.Start();
+ server.ReadStaticMappingAndAddOrUpdate(path);
+
+ var mappings = server.Mappings.ToArray();
+ Check.That(mappings).HasSize(1);
+
+ Check.That(mappings.First().RequestMatcher).IsNotNull();
+ Check.That(mappings.First().Provider).IsNotNull();
+ Check.That(mappings.First().Guid).Equals(Guid.Parse(guid));
+ Check.That(mappings.First().Title).IsNullOrEmpty();
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMappings_FolderExistsIsTrue()
+ {
+ // Assign
+ var staticMappingHandlerMock = new Mock();
+ staticMappingHandlerMock.Setup(m => m.GetMappingFolder()).Returns("folder");
+ staticMappingHandlerMock.Setup(m => m.FolderExists(It.IsAny())).Returns(true);
+ staticMappingHandlerMock.Setup(m => m.EnumerateFiles(It.IsAny(), It.IsAny())).Returns(new string[0]);
+
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- var server = WireMockServer.Start();
- string folder = Path.Combine(GetCurrentFolder(), "__admin", "mappings");
- server.ReadStaticMappings(folder);
+ FileSystemHandler = staticMappingHandlerMock.Object
+ });
- Check.That(server.Mappings).HasSize(6);
- Check.That(server.MappingModels).HasSize(6);
+ // Act
+ server.ReadStaticMappings();
- // Act
- server.ResetMappings();
+ // Assert and Verify
+ staticMappingHandlerMock.Verify(m => m.GetMappingFolder(), Times.Once);
+ staticMappingHandlerMock.Verify(m => m.FolderExists("folder"), Times.Once);
+ staticMappingHandlerMock.Verify(m => m.EnumerateFiles("folder", false), Times.Once);
+ }
- // Assert
- Check.That(server.Mappings).HasSize(0);
- Check.That(server.MappingModels).HasSize(0);
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMappingAndAddOrUpdate()
+ {
+ // Assign
+ string mapping = "{\"Request\": {\"Path\": {\"Matchers\": [{\"Name\": \"WildcardMatcher\",\"Pattern\": \"/static/mapping\"}]},\"Methods\": [\"get\"]},\"Response\": {\"BodyAsJson\": { \"body\": \"static mapping\" }}}";
+ var staticMappingHandlerMock = new Mock();
+ staticMappingHandlerMock.Setup(m => m.ReadMappingFile(It.IsAny())).Returns(mapping);
- server.Stop();
- }
-
- [Fact]
- public void WireMockServer_Admin_SaveStaticMappings()
+ var server = WireMockServer.Start(new WireMockServerSettings
{
- // Assign
- string guid = "791a3f31-6946-aaaa-8e6f-0237c7441111";
- var staticMappingHandlerMock = new Mock();
- staticMappingHandlerMock.Setup(m => m.GetMappingFolder()).Returns("folder");
- staticMappingHandlerMock.Setup(m => m.FolderExists(It.IsAny())).Returns(true);
- staticMappingHandlerMock.Setup(m => m.WriteMappingFile(It.IsAny(), It.IsAny()));
+ FileSystemHandler = staticMappingHandlerMock.Object
+ });
- var server = WireMockServer.Start(new WireMockServerSettings
- {
- FileSystemHandler = staticMappingHandlerMock.Object
- });
+ // Act
+ server.ReadStaticMappingAndAddOrUpdate(@"c:\test.json");
- server
- .Given(Request.Create().WithPath($"/foo_{Guid.NewGuid()}"))
- .WithGuid(guid)
- .RespondWith(Response.Create().WithBody("save test"));
+ // Assert and Verify
+ staticMappingHandlerMock.Verify(m => m.ReadMappingFile(@"c:\test.json"), Times.Once);
+ }
- // Act
- server.SaveStaticMappings();
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMappings()
+ {
+ var server = WireMockServer.Start();
- // Assert and Verify
- staticMappingHandlerMock.Verify(m => m.GetMappingFolder(), Times.Once);
- staticMappingHandlerMock.Verify(m => m.FolderExists("folder"), Times.Once);
- staticMappingHandlerMock.Verify(m => m.WriteMappingFile(Path.Combine("folder", guid + ".json"), It.IsAny()), Times.Once);
- }
+ string folder = Path.Combine(GetCurrentFolder(), "__admin", "mappings");
+ server.ReadStaticMappings(folder);
- [Fact]
- public void WireMockServer_Admin_ReadStaticMapping_WithNonGuidFilename()
+ var mappings = server.Mappings.ToArray();
+ Check.That(mappings).HasSize(6);
+
+ server.Stop();
+ }
+
+ [Fact]
+ public void WireMockServer_Admin_ReadStaticMappings_FolderDoesNotExist()
+ {
+ // Assign
+ var loggerMock = new Mock();
+ loggerMock.Setup(l => l.Info(It.IsAny(), It.IsAny