public async Task Accept_ShouldCreateAudit() { //Arrange var provider = SetUpHelper.GetServiceProvider(); var scopeFactory = provider.GetService <IServiceScopeFactory>(); IFireForgetEventHandler faf = new FireForgetEventHandler(scopeFactory); IAuditServiceFireForget auditServiceFireForget = new AuditServiceFireForget(faf, null); var repository = provider.GetService <IAuditRepository>(); int?ukPrn = 12345670; //Act auditServiceFireForget.Accept(new ServiceModel.Audit() { Action = 1, Message = "test", Severity = 0, Ukprn = ukPrn, User = "******" }); // Delaying for 2000 milliseconds to allow fire and forget to complete in time before we assert. await Task.Delay(2000); // Assert var result = repository.GetMany(m => m.Ukprn == ukPrn); result.FirstOrDefault().Ukprn.Should().Be(ukPrn); }
public async Task Execute_ShouldCreateAuditAsync() { // Arrrange var dummyAudit = new ServiceModel.Audit(); var mockAuditService = Mock.Of <IAuditService>(MockBehavior.Strict); var serviceProvider = Mock.Of <IServiceProvider>(MockBehavior.Strict); var serviceScope = Mock.Of <IServiceScope>(MockBehavior.Strict); var serviceScopeFactory = Mock.Of <IServiceScopeFactory>(MockBehavior.Strict); Mock.Get(mockAuditService) .Setup(x => x.CreateAsync(dummyAudit)) .Returns(Task.CompletedTask); Mock.Get(serviceScope).SetupGet(x => x.ServiceProvider).Returns(serviceProvider); Mock.Get(serviceScopeFactory) .Setup(x => x.CreateScope()) .Returns(serviceScope); Mock.Get(serviceProvider) .Setup(x => x.GetService(typeof(IAuditService))) .Returns(mockAuditService); Mock.Get(serviceProvider) .Setup(x => x.GetService(typeof(IServiceScopeFactory))) .Returns(serviceScopeFactory); // Act var fireForgetEventHandler = new FireForgetEventHandler(serviceScopeFactory); fireForgetEventHandler.Execute(async auditService => await auditService.CreateAsync(dummyAudit)); // We execute run in a separate thread then the current one so we need to delay to assert. await Task.Delay(100); //Assert Mock.Get(serviceScopeFactory).Verify(x => x.CreateScope(), Times.Once); Mock.Get(serviceScope).VerifyGet(x => x.ServiceProvider, Times.Once); Mock.Get(serviceProvider).Verify(x => x.GetService(typeof(IAuditService)), Times.Once); Mock.Get(mockAuditService).Verify(x => x.CreateAsync(dummyAudit), Times.Once); }