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;
}
}
}