// Copyright © WireMock.Net #pragma warning disable CS1591 using WireMock.Admin.Requests; using WireMock.Matchers; // ReSharper disable once CheckNamespace namespace WireMock.Client.AwesomeAssertions; public partial class WireMockAdminApiAssertions(IWireMockAdminApi subject, int? callsCount, AssertionChain chain) { public const string Any = "*"; public int? CallsCount { get; } = callsCount; public IReadOnlyList RequestMessages { get; private set; } = subject.GetRequestsAsync().GetAwaiter().GetResult() .Select(logEntry => logEntry.Request) .OfType() .ToList(); public (Func, IReadOnlyList> Filter, Func, bool> Condition) BuildFilterAndCondition(Func predicate) { IReadOnlyList filter(IReadOnlyList requests) => requests.Where(predicate).ToList(); return (filter, requests => (CallsCount is null && filter(requests).Any()) || CallsCount == filter(requests).Count); } public (Func, IReadOnlyList> Filter, Func, bool> Condition) BuildFilterAndCondition(Func expression, IStringMatcher matcher) { return BuildFilterAndCondition(r => matcher.IsMatch(expression(r)).IsPerfect()); } public (Func, IReadOnlyList> Filter, Func, bool> Condition) BuildFilterAndCondition(Func expression, IObjectMatcher matcher) { return BuildFilterAndCondition(r => matcher.IsMatch(expression(r)).IsPerfect()); } public void FilterRequestMessages(Func, IReadOnlyList> filter) { RequestMessages = filter(RequestMessages).ToList(); } }