From 208303729e0ae0d784d025acdd6c96022336985e Mon Sep 17 00:00:00 2001 From: Alastair Crabtree Date: Sun, 19 Nov 2017 19:44:05 +0000 Subject: [PATCH] bug: Fix admin api client definition returning the wrong types (#65) * bug: Fix admin api client definition returning the wrong types - IFluentMockServerAdmin get, find and get all requests should return a log entry model - Add tests for get and find using the rest ease api client * Fix Build status and rename tests --- README.md | 2 +- .../Client/IFluentMockServerAdmin.cs | 7 +- .../Server/FluentMockServer.Admin.cs | 2 +- .../FluentMockServerAdminRestClientTests.cs | 64 +++++++++++++++++++ 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs diff --git a/README.md b/README.md index cbf918d4..0803ea91 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # WireMock.Net A C# .NET version based on [mock4net](https://github.com/alexvictoor/mock4net) which mimics the functionality from the JAVA based http://WireMock.org -[![Build status](https://ci.appveyor.com/api/projects/status/b3n6q3ygbww4lyls?svg=true)](https://ci.appveyor.com/project/WireMock-Net/wiremock-net) +[![Build status](https://ci.appveyor.com/api/projects/status/b3n6q3ygbww4lyls?svg=true)](https://ci.appveyor.com/project/StefH/wiremock-net) [![codecov](https://codecov.io/gh/WireMock-Net/WireMock.Net/branch/master/graph/badge.svg)](https://codecov.io/gh/WireMock-Net/WireMock.Net) [![Coverage Status](https://coveralls.io/repos/github/WireMock-Net/WireMock.Net/badge.svg?branch=master)](https://coveralls.io/github/WireMock-Net/WireMock.Net?branch=master) [![GitHub issues](https://img.shields.io/github/issues/WireMock-Net/WireMock.Net.svg)](https://github.com/WireMock-Net/WireMock.Net/issues) diff --git a/src/WireMock.Net/Client/IFluentMockServerAdmin.cs b/src/WireMock.Net/Client/IFluentMockServerAdmin.cs index 82dc2e0c..48bb2d50 100644 --- a/src/WireMock.Net/Client/IFluentMockServerAdmin.cs +++ b/src/WireMock.Net/Client/IFluentMockServerAdmin.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using WireMock.Admin.Mappings; using WireMock.Admin.Requests; using WireMock.Admin.Settings; +using WireMock.Logging; namespace WireMock.Client { @@ -103,7 +104,7 @@ namespace WireMock.Client /// /// LogRequestModels [Get("__admin/requests")] - Task> GetRequestsAsync(); + Task> GetRequestsAsync(); /// /// Delete all requests. @@ -123,7 +124,7 @@ namespace WireMock.Client /// The Guid /// MappingModel [Get("__admin/requests/{guid}")] - Task GetRequestAsync([Path] Guid guid); + Task GetRequestAsync([Path] Guid guid); /// /// Delete a request based on the guid @@ -137,7 +138,7 @@ namespace WireMock.Client /// /// The RequestModel [Post("__admin/requests/find")] - Task> FindRequestsAsync([Body] RequestModel model); + Task> FindRequestsAsync([Body] RequestModel model); /// /// Get all scenarios diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index 3ee8f64b..9acef03b 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -486,7 +486,7 @@ namespace WireMock.Server } } - var result = dict.OrderBy(x => x.Value.AverageTotalScore).Select(x => x.Key); + var result = dict.OrderBy(x => x.Value.AverageTotalScore).Select(x => x.Key).Select(ToLogEntryModel); return ToJson(result); } diff --git a/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs b/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs new file mode 100644 index 00000000..3e1ba093 --- /dev/null +++ b/test/WireMock.Net.Tests/FluentMockServerAdminRestClientTests.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using NFluent; +using RestEase; +using WireMock.Admin.Mappings; +using WireMock.Client; +using WireMock.Server; +using WireMock.Settings; +using Xunit; + +namespace WireMock.Net.Tests +{ + public class FluentMockServerAdminRestClientTests : IDisposable + { + public void Dispose() + { + _server?.Stop(); + } + + private FluentMockServer _server; + + [Fact] + public async Task IFluentMockServerAdmin_FindRequestsAsync() + { + // given + _server = FluentMockServer.Start(new FluentMockServerSettings { StartAdminInterface = true }); + var serverUrl = "http://localhost:" + _server.Ports[0]; + await new HttpClient().GetAsync(serverUrl + "/foo"); + var api = RestClient.For(serverUrl); + + // when + var requests = await api.FindRequestsAsync(new RequestModel { Methods = new[] { "get" } }); + + // then + 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 IFluentMockServerAdmin_GetRequestsAsync() + { + // given + _server = FluentMockServer.Start(new FluentMockServerSettings { StartAdminInterface = true }); + var serverUrl = "http://localhost:" + _server.Ports[0]; + await new HttpClient().GetAsync(serverUrl + "/foo"); + var api = RestClient.For(serverUrl); + + // when + var requests = await api.GetRequestsAsync(); + + // then + 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"); + } + } +} \ No newline at end of file