diff --git a/examples/WireMock.Net.Client/Program.cs b/examples/WireMock.Net.Client/Program.cs index b885318a..f9651fbc 100644 --- a/examples/WireMock.Net.Client/Program.cs +++ b/examples/WireMock.Net.Client/Program.cs @@ -82,6 +82,51 @@ class Program ) ); + mappingBuilder.Given(m => m + .WithRequest(req => req + .WithPath("/testRequestWithQueryParams") + .UsingGet() + .WithParams(p => p.WithParam("param1", pb => pb.WithExactMatcher("value1"))) + ).WithResponse(rsp => rsp + .WithHeaders(h => h.Add("Content-Type", "application/json")) + .WithStatusCode(200) + .WithBodyAsJson(new + { + status = "ok" + }, true) + ) + ); + + mappingBuilder.Given(m => m + .WithRequest(req => req + .WithPath("/testRequestWithHeaders") + .UsingGet() + .WithHeaders(h => h.WithHeader("Accept", hb => hb.WithExactMatcher("application/json"))) + ).WithResponse(rsp => rsp + .WithHeaders(h => h.Add("Content-Type", "application/json")) + .WithStatusCode(200) + .WithBodyAsJson(new + { + status = "ok" + }, true) + ) + ); + + mappingBuilder.Given(m => m + .WithRequest(req => req + .WithPath("/testRequestWithCookie") + .UsingGet() + .WithCookies(c => c.WithCookie("cookie1", cb => cb.WithExactMatcher("cookievalue1"))) + ).WithResponse(rsp => rsp + .WithHeaders(h => h.Add("Content-Type", "application/json")) + .WithStatusCode(200) + .WithBodyAsJson(new + { + status = "ok" + }, true) + ) + ); + var result = await mappingBuilder.BuildAndPostAsync().ConfigureAwait(false); Console.WriteLine($"result = {JsonConvert.SerializeObject(result)}"); diff --git a/src/WireMock.Net.Abstractions/BuilderExtensions/ArrayMatcherModelBuilder.cs b/src/WireMock.Net.Abstractions/BuilderExtensions/ArrayMatcherModelBuilder.cs new file mode 100644 index 00000000..95595ed6 --- /dev/null +++ b/src/WireMock.Net.Abstractions/BuilderExtensions/ArrayMatcherModelBuilder.cs @@ -0,0 +1,39 @@ +// Copyright © WireMock.Net + +namespace WireMock.Admin.Mappings; + +public partial class ArrayMatcherModelBuilder +{ + public ArrayMatcherModelBuilder WithExactMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("ExactMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public ArrayMatcherModelBuilder WithWildcardMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("WildcardMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public ArrayMatcherModelBuilder WithRegexMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("RegexMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public ArrayMatcherModelBuilder WithNotNullOrEmptyMatcher(bool rejectOnMatch = false) + { + return Add(mb => mb + .WithName("NotNullOrEmptyMatcher") + .WithRejectOnMatch(rejectOnMatch) + ); + } + + private ArrayMatcherModelBuilder WithMatcher(string name, object pattern, bool rejectOnMatch, bool ignoreCase = false) + { + return Add(mb => mb + .WithName(name) + .WithPattern(pattern) + .WithRejectOnMatch(rejectOnMatch) + .WithIgnoreCase(ignoreCase) + ); + } +} diff --git a/src/WireMock.Net.Abstractions/BuilderExtensions/IListCookieModelBuilder.cs b/src/WireMock.Net.Abstractions/BuilderExtensions/IListCookieModelBuilder.cs new file mode 100644 index 00000000..613f24a2 --- /dev/null +++ b/src/WireMock.Net.Abstractions/BuilderExtensions/IListCookieModelBuilder.cs @@ -0,0 +1,19 @@ +// Copyright © WireMock.Net + +using System; +using System.Collections.Generic; +using System.Text; + +namespace WireMock.Admin.Mappings; + +public partial class IListCookieModelBuilder +{ + public IListCookieModelBuilder WithCookie(string name, Action action, bool rejectOnMatch = false) + { + return Add(cookieBuilder => cookieBuilder + .WithName(name) + .WithRejectOnMatch(rejectOnMatch) + .WithMatchers(matchersBuilder => action(matchersBuilder)) + ); + } +} diff --git a/src/WireMock.Net.Abstractions/BuilderExtensions/IListHeaderModelBuilder.cs b/src/WireMock.Net.Abstractions/BuilderExtensions/IListHeaderModelBuilder.cs new file mode 100644 index 00000000..6cf96b0a --- /dev/null +++ b/src/WireMock.Net.Abstractions/BuilderExtensions/IListHeaderModelBuilder.cs @@ -0,0 +1,19 @@ +// Copyright © WireMock.Net + +using System; +using System.Collections.Generic; +using System.Text; + +namespace WireMock.Admin.Mappings; + +public partial class IListHeaderModelBuilder +{ + public IListHeaderModelBuilder WithHeader(string name, Action action, bool rejectOnMatch = false) + { + return Add(headerBuilder => headerBuilder + .WithName(name) + .WithRejectOnMatch(rejectOnMatch) + .WithMatchers(matchersBuilder => action(matchersBuilder)) + ); + } +} diff --git a/src/WireMock.Net.Abstractions/BuilderExtensions/IListMatcherModelBuilder.cs b/src/WireMock.Net.Abstractions/BuilderExtensions/IListMatcherModelBuilder.cs new file mode 100644 index 00000000..eba7f13b --- /dev/null +++ b/src/WireMock.Net.Abstractions/BuilderExtensions/IListMatcherModelBuilder.cs @@ -0,0 +1,39 @@ +// Copyright © WireMock.Net + +namespace WireMock.Admin.Mappings; + +public partial class IListMatcherModelBuilder +{ + public IListMatcherModelBuilder WithExactMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("ExactMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public IListMatcherModelBuilder WithWildcardMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("WildcardMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public IListMatcherModelBuilder WithRegexMatcher(object pattern, bool rejectOnMatch = false, bool ignoreCase = false) + { + return WithMatcher("RegexMatcher", pattern, rejectOnMatch, ignoreCase); + } + + public IListMatcherModelBuilder WithNotNullOrEmptyMatcher(bool rejectOnMatch = false) + { + return Add(mb => mb + .WithName("NotNullOrEmptyMatcher") + .WithRejectOnMatch(rejectOnMatch) + ); + } + + private IListMatcherModelBuilder WithMatcher(string name, object pattern, bool rejectOnMatch, bool ignoreCase = false) + { + return Add(mb => mb + .WithName(name) + .WithPattern(pattern) + .WithRejectOnMatch(rejectOnMatch) + .WithIgnoreCase(ignoreCase) + ); + } +} diff --git a/src/WireMock.Net.Abstractions/BuilderExtensions/IListParamModelBuilder.cs b/src/WireMock.Net.Abstractions/BuilderExtensions/IListParamModelBuilder.cs new file mode 100644 index 00000000..03efd29a --- /dev/null +++ b/src/WireMock.Net.Abstractions/BuilderExtensions/IListParamModelBuilder.cs @@ -0,0 +1,17 @@ +// Copyright © WireMock.Net + +using System; + +namespace WireMock.Admin.Mappings; + +public partial class IListParamModelBuilder +{ + public IListParamModelBuilder WithParam(string name, Action action, bool rejectOnMatch = false) + { + return Add(paramBuilder => paramBuilder + .WithName(name) + .WithRejectOnMatch(rejectOnMatch) + .WithMatchers(matchersBuilder => action(matchersBuilder)) + ); + } +} \ No newline at end of file