private static IHttpRequestMessagesCheck WithJsonContent(this IHttpRequestMessagesCheck check, object?jsonObject, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            var jsonString = JsonSerializer.Serialize(jsonObject);

            return(check.WithFilter(x => x.HasContent(jsonString) && x.HasContentHeader("Content-Type", "application/json*"), expectedNumberOfRequests, $"json content '{jsonString}'"));
        }
        private static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (httpVersion == null)
            {
                throw new ArgumentNullException(nameof(httpVersion));
            }

            return(check.WithFilter(x => x.HasHttpVersion(httpVersion), expectedNumberOfRequests, $"HTTP Version '{httpVersion}'"));
        }
        private static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (httpMethod == null)
            {
                throw new ArgumentNullException(nameof(httpMethod));
            }

            return(check.WithFilter(x => x.HasHttpMethod(httpMethod), expectedNumberOfRequests, $"HTTP Method '{httpMethod}'"));
        }
        private static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (string.IsNullOrEmpty(headerName))
            {
                throw new ArgumentNullException(nameof(headerName));
            }

            return(check.WithFilter(x => x.HasRequestHeader(headerName) || x.HasContentHeader(headerName), expectedNumberOfRequests, $"header '{headerName}'"));
        }
        private static IHttpRequestMessagesCheck WithContent(this IHttpRequestMessagesCheck check, string pattern, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (pattern == null)
            {
                throw new ArgumentNullException(nameof(pattern));
            }

            return(check.WithFilter(x => x.HasContent(pattern), expectedNumberOfRequests, $"content '{pattern}'"));
        }
        private static IHttpRequestMessagesCheck WithFormUrlEncodedContent(this IHttpRequestMessagesCheck check, IEnumerable <KeyValuePair <string?, string?> > nameValueCollection, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (nameValueCollection == null)
            {
                throw new ArgumentNullException(nameof(nameValueCollection));
            }

            using var content = new FormUrlEncodedContent(nameValueCollection);
            var contentString = content.ReadAsStringAsync().Result;

            return(check.WithFilter(x => x.HasContent(contentString) && x.HasContentHeader("Content-Type", "application/x-www-form-urlencoded*"), expectedNumberOfRequests, $"form url encoded content '{contentString}'"));
        }
        private static IHttpRequestMessagesCheck WithQueryString(this IHttpRequestMessagesCheck check, string pattern, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (pattern == null)
            {
                throw new ArgumentNullException(nameof(pattern));
            }

            var condition = pattern switch
            {
                "" => "no querystring",
                "*" => "any querystring",
                _ => $"querystring pattern '{pattern}'"
            };

            return(check.WithFilter(x => x.HasQueryString(pattern), expectedNumberOfRequests, condition));
        }
        private static IHttpRequestMessagesCheck WithRequestUri(this IHttpRequestMessagesCheck check, string pattern, int?expectedNumberOfRequests)
        {
            if (check == null)
            {
                throw new ArgumentNullException(nameof(check));
            }

            if (string.IsNullOrEmpty(pattern))
            {
                throw new ArgumentNullException(nameof(pattern));
            }

            var condition = string.Empty;

            if (pattern != "*")
            {
                condition = $"uri pattern '{pattern}'";
            }

            return(check.WithFilter(x => x.HasMatchingUri(pattern), expectedNumberOfRequests, condition));
        }
 /// <summary>
 /// Asserts whether requests were made with a specific header name and value.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="headerName">The name of the header that is expected.</param>
 /// <param name="headerValue">The value of the expected header, supports wildcards.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int expectedNumberOfRequests) => WithHeader(check, headerName, headerValue, (int?)expectedNumberOfRequests);
 /// <summary>
 /// Asserts wheter requests are made with specific url encoded content.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="nameValueCollection">The collection of key/value pairs that should be url encoded.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithFormUrlEncodedContent(this IHttpRequestMessagesCheck check, IEnumerable <KeyValuePair <string?, string?> > nameValueCollection, int expectedNumberOfRequests) => WithFormUrlEncodedContent(check, nameValueCollection, (int?)expectedNumberOfRequests);
 /// <summary>
 /// Asserts wheter requests are made with specific url encoded content.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="nameValueCollection">The collection of key/value pairs that should be url encoded.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithFormUrlEncodedContent(this IHttpRequestMessagesCheck check, IEnumerable <KeyValuePair <string?, string?> > nameValueCollection) => WithFormUrlEncodedContent(check, nameValueCollection, null);
 /// <summary>
 /// Asserts whether requests were made using a specific HTTP Version.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion) => WithHttpVersion(check, httpVersion, null);
 /// <summary>
 /// Asserts wheter requests are made with specific json content.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="jsonObject">The object representation of the expected request content.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithJsonContent(this IHttpRequestMessagesCheck check, object?jsonObject, int expectedNumberOfRequests) => WithJsonContent(check, jsonObject, (int?)expectedNumberOfRequests);
 /// <summary>
 /// Asserts wheter requests are made with specific json content.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="jsonObject">The object representation of the expected request content.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithJsonContent(this IHttpRequestMessagesCheck check, object?jsonObject) => WithJsonContent(check, jsonObject, null);
 /// <summary>
 /// Asserts whether requests were made using a specific HTTP Version.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion, int expectedNumberOfRequests) => WithHttpVersion(check, httpVersion, (int?)expectedNumberOfRequests);
 /// <summary>
 /// Asserts whether requests were made with a given querystring based on a pattern. For asserting the decoded version of the querystring is used.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="pattern">The querystring pattern that is expected.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithQueryString(this IHttpRequestMessagesCheck check, string pattern) => WithQueryString(check, pattern, null);
 /// <summary>
 /// Asserts whether requests were made with a specific header name and value.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="headerName">The name of the header that is expected.</param>
 /// <param name="headerValue">The value of the expected header, supports wildcards.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue) => WithHeader(check, headerName, headerValue, (int?)null);
 /// <summary>
 /// Asserts whether requests were made with a given querystring based on a pattern. For asserting the decoded version of the querystring is used.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="pattern">The querystring pattern that is expected.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithQueryString(this IHttpRequestMessagesCheck check, string pattern, int expectedNumberOfRequests) => WithQueryString(check, pattern, (int?)expectedNumberOfRequests);
 /// <summary>
 /// Asserts whether requests were made with specific content.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="pattern">The expected content, supports wildcards.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithContent(this IHttpRequestMessagesCheck check, string pattern) => WithContent(check, pattern, null);
 /// <summary>
 /// Asserts whether requests were made with a given HTTP Method.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod) => WithHttpMethod(check, httpMethod, null);
 /// <summary>
 /// Asserts whether requests were made with a given HTTP Method.
 /// </summary>
 /// <param name="check">The implementation that hold all the request messages.</param>
 /// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
 /// <param name="expectedNumberOfRequests">The expected number of requests.</param>
 /// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
 public static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod, int expectedNumberOfRequests) => WithHttpMethod(check, httpMethod, (int?)expectedNumberOfRequests);