Esempio n. 1
0
        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);
        }