diff --git a/src/WireMock.Net/Client/IFluentMockServerAdmin.cs b/src/WireMock.Net/Client/IFluentMockServerAdmin.cs
index 48bb2d50..38fdfbee 100644
--- a/src/WireMock.Net/Client/IFluentMockServerAdmin.cs
+++ b/src/WireMock.Net/Client/IFluentMockServerAdmin.cs
@@ -6,7 +6,6 @@ using System.Threading.Tasks;
using WireMock.Admin.Mappings;
using WireMock.Admin.Requests;
using WireMock.Admin.Settings;
-using WireMock.Logging;
namespace WireMock.Client
{
diff --git a/src/WireMock.Net/Owin/OwinRequestMapper.cs b/src/WireMock.Net/Owin/OwinRequestMapper.cs
index 94923178..4ac662f3 100644
--- a/src/WireMock.Net/Owin/OwinRequestMapper.cs
+++ b/src/WireMock.Net/Owin/OwinRequestMapper.cs
@@ -91,8 +91,9 @@ namespace WireMock.Owin
TRACE - Body not supported.
OPTIONS - Body supported but no semantics on usage (maybe in the future).
CONNECT - No defined body semantics
+ PATCH - Body supported.
*/
- return new[] { "PUT", "POST", "OPTIONS" }.Contains(method.ToUpper());
+ return new[] { "PUT", "POST", "OPTIONS", "PATCH" }.Contains(method.ToUpper());
}
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs
index 5b1b1806..b5a43b90 100644
--- a/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs
+++ b/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs
@@ -7,6 +7,14 @@ namespace WireMock.RequestBuilders
///
public interface IMethodRequestBuilder : IHeadersAndCookiesRequestBuilder
{
+ ///
+ /// The using delete.
+ ///
+ ///
+ /// The .
+ ///
+ IRequestBuilder UsingDelete();
+
///
/// The using get.
///
@@ -15,6 +23,14 @@ namespace WireMock.RequestBuilders
///
IRequestBuilder UsingGet();
+ ///
+ /// The using head.
+ ///
+ ///
+ /// The .
+ ///
+ IRequestBuilder UsingHead();
+
///
/// The using post.
///
@@ -24,12 +40,12 @@ namespace WireMock.RequestBuilders
IRequestBuilder UsingPost();
///
- /// The using delete.
+ /// The using patch.
///
///
/// The .
///
- IRequestBuilder UsingDelete();
+ IRequestBuilder UsingPatch();
///
/// The using put.
@@ -39,14 +55,6 @@ namespace WireMock.RequestBuilders
///
IRequestBuilder UsingPut();
- ///
- /// The using head.
- ///
- ///
- /// The .
- ///
- IRequestBuilder UsingHead();
-
///
/// The using any verb.
///
diff --git a/src/WireMock.Net/RequestBuilders/Request.cs b/src/WireMock.Net/RequestBuilders/Request.cs
index d748c266..090d3336 100644
--- a/src/WireMock.Net/RequestBuilders/Request.cs
+++ b/src/WireMock.Net/RequestBuilders/Request.cs
@@ -171,70 +171,49 @@ namespace WireMock.RequestBuilders
return this;
}
- ///
- /// The using get.
- ///
- ///
- /// The .
- ///
- public IRequestBuilder UsingGet()
- {
- _requestMatchers.Add(new RequestMessageMethodMatcher("get"));
- return this;
- }
-
- ///
- /// The using post.
- ///
- ///
- /// The .
- ///
- public IRequestBuilder UsingPost()
- {
- _requestMatchers.Add(new RequestMessageMethodMatcher("post"));
- return this;
- }
-
- ///
- /// The using put.
- ///
- ///
- /// The .
- ///
- public IRequestBuilder UsingPut()
- {
- _requestMatchers.Add(new RequestMessageMethodMatcher("put"));
- return this;
- }
-
- ///
- /// The using delete.
- ///
- ///
- /// The .
- ///
+ ///
public IRequestBuilder UsingDelete()
{
_requestMatchers.Add(new RequestMessageMethodMatcher("delete"));
return this;
}
- ///
- /// The using head.
- ///
- /// The .
+ ///
+ public IRequestBuilder UsingGet()
+ {
+ _requestMatchers.Add(new RequestMessageMethodMatcher("get"));
+ return this;
+ }
+
+ ///
public IRequestBuilder UsingHead()
{
_requestMatchers.Add(new RequestMessageMethodMatcher("head"));
return this;
}
- ///
- /// The using any verb.
- ///
- ///
- /// The .
- ///
+ ///
+ public IRequestBuilder UsingPost()
+ {
+ _requestMatchers.Add(new RequestMessageMethodMatcher("post"));
+ return this;
+ }
+
+ ///
+ public IRequestBuilder UsingPatch()
+ {
+ _requestMatchers.Add(new RequestMessageMethodMatcher("patch"));
+ return this;
+ }
+
+ ///
+ public IRequestBuilder UsingPut()
+ {
+ _requestMatchers.Add(new RequestMessageMethodMatcher("put"));
+ return this;
+ }
+
+ ///
public IRequestBuilder UsingAnyVerb()
{
var matchers = _requestMatchers.Where(m => m is RequestMessageMethodMatcher).ToList();
@@ -246,11 +225,7 @@ namespace WireMock.RequestBuilders
return this;
}
- ///
- /// The using verb.
- ///
- /// The verbs.
- /// The .
+ ///
public IRequestBuilder UsingVerb(params string[] verbs)
{
Check.NotEmpty(verbs, nameof(verbs));
diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs
index 343256d0..deb1f6c7 100644
--- a/test/WireMock.Net.Tests/FluentMockServerTests.cs
+++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs
@@ -175,6 +175,34 @@ namespace WireMock.Net.Tests
Check.That(requestLogged.RequestMessage.BodyAsBytes).IsNull();
}
+ [Fact]
+ public async Task FluentMockServer_Should_respond_to_request_methodPatch()
+ {
+ // given
+ _server = FluentMockServer.Start();
+
+ _server.Given(Request.Create().WithPath("/foo").UsingVerb("patch"))
+ .RespondWith(Response.Create().WithBody("hello patch"));
+
+ // when
+ var msg = new HttpRequestMessage(new HttpMethod("patch"), new Uri("http://localhost:" + _server.Ports[0] + "/foo"))
+ {
+ Content = new StringContent("{\"data\": {\"attr\":\"value\"}}")
+ };
+ var response = await new HttpClient().SendAsync(msg);
+
+ // then
+ Check.That(response.StatusCode).IsEqualTo(HttpStatusCode.OK);
+ var responseBody = await response.Content.ReadAsStringAsync();
+ Check.That(responseBody).IsEqualTo("hello patch");
+
+ Check.That(_server.LogEntries).HasSize(1);
+ var requestLogged = _server.LogEntries.First();
+ Check.That(requestLogged.RequestMessage.Method).IsEqualTo("patch");
+ Check.That(requestLogged.RequestMessage.Body).IsNotNull();
+ Check.That(requestLogged.RequestMessage.Body).IsEqualTo("{\"data\": {\"attr\":\"value\"}}");
+ }
+
[Fact]
public async Task FluentMockServer_Should_respond_to_request_bodyAsString()
{
diff --git a/test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs b/test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs
new file mode 100644
index 00000000..5b4e8170
--- /dev/null
+++ b/test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs
@@ -0,0 +1,113 @@
+using System;
+using System.Text;
+using NFluent;
+using Xunit;
+using WireMock.RequestBuilders;
+using WireMock.Matchers.Request;
+
+namespace WireMock.Net.Tests
+{
+ //[TestFixture]
+ public partial class RequestTests
+ {
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_delete()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingDelete();
+
+ // when
+ string bodyAsString = "whatever";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "Delete", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_get()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingGet();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "GET", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_head()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingHead();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_post()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingPost();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_put()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingPut();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_specify_requests_matching_given_path_and_method_patch()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingPatch();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PATCH", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Should_exclude_requests_matching_given_path_but_not_http_method()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingPut();
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/RequestTests.cs b/test/WireMock.Net.Tests/RequestTests.cs
index b28370f3..c7e4bfba 100644
--- a/test/WireMock.Net.Tests/RequestTests.cs
+++ b/test/WireMock.Net.Tests/RequestTests.cs
@@ -97,92 +97,6 @@ namespace WireMock.Net.Tests
Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
}
- [Fact]
- public void Should_specify_requests_matching_given_path_and_method_put()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingPut();
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_path_and_method_post()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingPost();
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_path_and_method_get()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingGet();
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "GET", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_path_and_method_delete()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingDelete();
-
- // when
- string bodyAsString = "whatever";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "Delete", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_path_and_method_head()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingHead();
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_exclude_requests_matching_given_path_but_not_http_method()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingPut();
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
- }
-
[Fact]
public void Should_exclude_requests_matching_given_http_method_but_not_url()
{
@@ -206,7 +120,7 @@ namespace WireMock.Net.Tests
// when
string bodyAsString = "whatever";
byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new [] { "tata" } } });
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new[] { "tata" } } });
// then
var requestMatchResult = new RequestMatchResult();