using System; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Moq; using Xunit; namespace Cap.Consistency.Test { public class ConsistencyMessageManagerTest { [Fact] public void EnsureDefaultServicesDefaultsWithStoreWorks() { var services = new ServiceCollection() .AddTransient, NoopMessageStore>(); services.AddConsistency(); services.AddSingleton(); services.AddLogging(); var manager = services.BuildServiceProvider() .GetRequiredService>(); Assert.NotNull(manager); } [Fact] public void AddMessageManagerWithCustomerMannagerReturnsSameInstance() { var services = new ServiceCollection() .AddTransient, NoopMessageStore>() .AddSingleton(); services.AddLogging(); services.AddConsistency() .AddConsistencyMessageManager(); var provider = services.BuildServiceProvider(); Assert.Same(provider.GetRequiredService>(), provider.GetRequiredService()); } public class CustomMessageManager : ConsistencyMessageManager { public CustomMessageManager() : base(new Mock>().Object, null, null) { } } [Fact] public async Task CreateCallsStore() { var store = new Mock>(); var message = new TestConsistencyMessage { Time = DateTime.Now }; store.Setup(x => x.CreateAsync(message, CancellationToken.None)).ReturnsAsync(OperateResult.Success).Verifiable(); var messageManager = TestConsistencyMessageManager(store.Object); var result = await messageManager.CreateAsync(message); Assert.True(result.Succeeded); store.VerifyAll(); } public ConsistencyMessageManager TestConsistencyMessageManager(IConsistencyMessageStore store = null) where TMessage : class { store = store ?? new Mock>().Object; var mockLogger = new Mock>>().Object; var manager = new ConsistencyMessageManager(store, null, mockLogger); return manager; } } }