using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Linq; using JetBrains.Annotations; using WireMock.Logging; using WireMock.Matchers; using WireMock.Matchers.Request; namespace WireMock.Server { public partial class FluentMockServer { /// /// Occurs when [log entries changed]. /// [PublicAPI] public event NotifyCollectionChangedEventHandler LogEntriesChanged { add => _options.LogEntries.CollectionChanged += value; remove => _options.LogEntries.CollectionChanged -= value; } /// /// Gets the request logs. /// [PublicAPI] public IEnumerable LogEntries => new ReadOnlyCollection(_options.LogEntries.ToList()); /// /// The search log-entries based on matchers. /// /// The matchers. /// The . [PublicAPI] public IEnumerable FindLogEntries([NotNull] params IRequestMatcher[] matchers) { var results = new Dictionary(); foreach (var log in _options.LogEntries.ToList()) { var requestMatchResult = new RequestMatchResult(); foreach (var matcher in matchers) { matcher.GetMatchingScore(log.RequestMessage, requestMatchResult); } if (requestMatchResult.AverageTotalScore > MatchScores.AlmostPerfect) { results.Add(log, requestMatchResult); } } return new ReadOnlyCollection(results.OrderBy(x => x.Value).Select(x => x.Key).ToList()); } /// /// Resets the LogEntries. /// [PublicAPI] public void ResetLogEntries() { _options.LogEntries.Clear(); } /// /// Deletes a LogEntry. /// /// The unique identifier. [PublicAPI] public bool DeleteLogEntry(Guid guid) { // Check a logentry exists with the same GUID, if so, remove it. var existing = _options.LogEntries.ToList().FirstOrDefault(m => m.Guid == guid); if (existing != null) { _options.LogEntries.Remove(existing); return true; } return false; } } }