예제 #1
0
        public void Send_Taking_Several_Logs_Saves_Log_In_Db_Context()
        {
            var options = new DbContextOptionsBuilder <LogModelContext>()
                          .UseInMemoryDatabase(databaseName: "Test2")
                          .Options;
            var logDataContext = new LogModelContext(options);
            IDbContextProvider         dbContextProvider          = new DbContextProvider(logDataContext);
            IDbEntityBuilder           dbEntityBuilder            = new LogDbModelEntityBuilder();
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, dbEntityBuilder);
            LogModel logData1 = Samples.LogModels.WithTagsAndItems(LogType.Warning);

            logData1.LogId = "LogId1";
            LogModel logData2 = Samples.LogModels.WithTagsAndItems(LogType.Error);

            logData2.LogId = "LogId2";
            LogModel logData3 = Samples.LogModels.WithTagsAndItems(LogType.Info);

            logData3.LogId = "LogId3";

            // Act
            entityFrameworkDestination.Send(new LogModel[] { logData1, logData2, logData3 });

            // Assert
            List <LogDbModel> logs = logDataContext.Logs.ToList();

            Assert.AreEqual(3, logs.Count);
            LogDbModelAsserts.AssertLogModelModelIsEqualToLogModel(logs[0], logData1);
            LogDbModelAsserts.AssertLogModelModelIsEqualToLogModel(logs[1], logData2);
            LogDbModelAsserts.AssertLogModelModelIsEqualToLogModel(logs[2], logData3);
        }
        public void Send_Taking_Context_Provider_And_EntityBuilder_When_Called_With_One_Log()
        {
            // Arrange
            LogModel logData = new LogModel();
            // Context provider.
            var dbContextProviderMock = new Mock <IDbContextProvider>();
            var dbContextMock         = new Mock <DbContext>();

            dbContextProviderMock.Setup(x => x.GetDbContext(logData)).Returns(dbContextMock.Object);
            // Entity builder.
            var    dbEntityBuilderMock = new Mock <IDbEntityBuilder>();
            Object obj = new { };

            dbEntityBuilderMock.Setup(x => x.BuildDbEntity(logData)).Returns(obj);
            // Entity framework destination.
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProviderMock.Object, dbEntityBuilderMock.Object);

            // Act
            entityFrameworkDestination.Send(new LogModel[] { logData });

            // Assert
            // Context object is requested from context provider
            dbContextProviderMock.Verify(x => x.GetDbContext(logData), Times.Once);
            // Db entity is requested from entity builder.
            dbEntityBuilderMock.Verify(x => x.BuildDbEntity(logData), Times.Once);
            // Db entity is added to context .
            dbContextMock.Verify(x => x.Add(obj), Times.Once);
            // Changes in context is saved.
            dbContextMock.Verify(x => x.SaveChanges(), Times.Once);
        }
 public void Ctor_Taking_Context_Provider_And_EntityBuilder_When_Called_With_Null_Entity_Builder_Throws_ArgumentNullException()
 {
     Assert.Catch <ArgumentNullException>(() =>
     {
         // Act
         EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(new Mock <IDbContextProvider>().Object, null as IDbEntityBuilder);
     });
 }
        public void Adding_Entity_Framework_Destination_With_Custom_DbEntity_Builder()
        {
            IDbContextProvider         dbContextProvider          = new DbContextProvider(dbContext);
            IDbEntityBuilder           customDbEntityBuilder      = new Mock <IDbEntityBuilder>().Object;
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, customDbEntityBuilder);

            Logger logger = new Logger();

            logger.AddLogDestinations(entityFrameworkDestination);
        }
        public void Adding_Entity_Framework_Destination_With_Minimal_Configuration()
        {
            IDbContextProvider         dbContextProvider          = new DbContextProvider(dbContext);
            IDbEntityBuilder           dbEntityBuilder            = new LogDbModelEntityBuilder();
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, dbEntityBuilder);

            Logger logger = new Logger();

            logger.AddLogDestinations(entityFrameworkDestination);
        }
        public void Ctor_Taking_Context_Provider_And_EntityBuilder_When_Called_Sets_Dependencies()
        {
            // Arrange
            IDbContextProvider dbContextProvider = new Mock <IDbContextProvider>().Object;
            IDbEntityBuilder   dbEntityBuilder   = new Mock <IDbEntityBuilder>().Object;

            // Act
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, dbEntityBuilder);

            // Assert
            Assert.AreEqual(dbContextProvider, entityFrameworkDestination.ContextProvider);
            Assert.AreEqual(dbEntityBuilder, entityFrameworkDestination.EntityBuilder);
        }
        public async Task SendAsync_Taking_Context_Provider_And_EntityBuilder_When_Called_With_Several_Logs(int N)
        {
            // Arrange
            // logs array
            Dictionary <LogModel, Object> dict = new Dictionary <LogModel, Object>();

            for (int i = 0; i < N; i++)
            {
                dict.Add(new LogModel(), new Object());
            }
            LogModel[] logs    = dict.Keys.ToArray();
            Object[]   objects = dict.Values.ToArray();
            // Context provider.
            var dbContextProviderMock = new Mock <IDbContextProvider>();
            var dbContextMock         = new Mock <DbContext>();

            dbContextProviderMock.Setup(x => x.GetDbContext(It.IsIn(logs))).Returns(dbContextMock.Object);
            // Entity builder.
            var dbEntityBuilderMock = new Mock <IDbEntityBuilder>();

            dbEntityBuilderMock.Setup(x => x.BuildDbEntity(It.IsIn(logs))).Returns((LogModel d) => dict[d]);
            // Entity framework destination.
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProviderMock.Object, dbEntityBuilderMock.Object);
            CancellationToken          cancellationToken          = new CancellationToken();

            // Act
            await entityFrameworkDestination.SendAsync(logs, cancellationToken);

            // Assert
            // Context object is requested from context provider
            dbContextProviderMock.Verify(x => x.GetDbContext(It.IsIn(logs)), Times.Exactly(N));
            // Db entity is requested from entity builder.
            dbEntityBuilderMock.Verify(x => x.BuildDbEntity(It.IsIn(logs)), Times.Exactly(N));
            // Db entity is added to context .
            dbContextMock.Verify(x => x.AddAsync(It.IsIn <Object>(objects), cancellationToken), Times.Exactly(N));
            // Changes in context is saved.
            dbContextMock.Verify(x => x.SaveChangesAsync(cancellationToken), Times.Exactly(N));

            for (int i = 0; i < N; i++)
            {
                // Context object is requested from context provider
                dbContextProviderMock.Verify(x => x.GetDbContext(logs[i]), Times.Exactly(1));
                // Db entity is requested from entity builder.
                dbEntityBuilderMock.Verify(x => x.BuildDbEntity(logs[i]), Times.Exactly(1));
            }
        }
        public void SendAsync_Taking_Context_Provider_And_EntityBuilder_When_Called_With_Cancellation_Token()
        {
            // Arrange
            // Context provider.
            var dbContextProviderMock = new Mock <IDbContextProvider>();
            // Entity builder.
            var dbEntityBuilderMock = new Mock <IDbEntityBuilder>();
            // Entity framework destination.
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProviderMock.Object, dbEntityBuilderMock.Object);
            CancellationToken          cancellationToken          = new CancellationToken(canceled: true);

            // Assert
            Assert.CatchAsync <OperationCanceledException>(async() =>
            {
                // Act
                await entityFrameworkDestination.SendAsync(new LogModel[] { new LogModel() }, cancellationToken);
            });
            dbContextProviderMock.Verify(x => x.GetDbContext(It.IsAny <LogModel>()), Times.Never);
            dbEntityBuilderMock.Verify(x => x.BuildDbEntity(It.IsAny <LogModel>()), Times.Never);
        }
예제 #9
0
        public void Send_Taking_One_Log_Saves_Log_In_Db_Context()
        {
            var options = new DbContextOptionsBuilder <LogModelContext>()
                          .UseInMemoryDatabase(databaseName: "Test1")
                          .Options;
            var logDataContext = new LogModelContext(options);
            IDbContextProvider         dbContextProvider          = new DbContextProvider(logDataContext);
            IDbEntityBuilder           dbEntityBuilder            = new LogDbModelEntityBuilder();
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, dbEntityBuilder);
            LogModel logData = Samples.LogModels.WithTagsAndItems();

            // Act
            entityFrameworkDestination.Send(new LogModel[] { logData });

            // Assert
            List <LogDbModel> logs = logDataContext.Logs.ToList();

            Assert.AreEqual(1, logs.Count);
            LogDbModelAsserts.AssertLogModelModelIsEqualToLogModel(logs[0], logData);
        }
        public void Adding_Entity_Framework_Destination_With_DbEntity_Factory_Method()
        {
            IDbContextProvider dbContextProvider            = new DbContextProvider(dbContext);
            IDbEntityBuilder   factoryMethodDbEntityBuilder = new FactoryMethodDbEntityBuilder((logModel) =>
            {
                return(new MyCustomDbEntity()
                {
                    LogId = logModel.LogId,
                    Context = logModel.Context,
                    Description = logModel.Description,
                    LogType = logModel.LogType,
                    LogDate = logModel.LogDate
                });
            });
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(dbContextProvider, factoryMethodDbEntityBuilder);

            Logger logger = new Logger();

            logger.AddLogDestinations(entityFrameworkDestination);
        }
        public void Adding_Entity_Framework_Destination_With_DbContext_Function()
        {
            IDbContextProvider factoryMethodDbContextProvider = new FactoryMethodDbContextProvider((logModel) =>
            {
                if (logModel.HasTag("App1"))
                {
                    return(dbContext1);
                }
                else
                {
                    return(dbContext2);
                }
            });
            IDbEntityBuilder           dbEntityBuilder            = new LogDbModelEntityBuilder();
            EntityFrameworkDestination entityFrameworkDestination = new EntityFrameworkDestination(factoryMethodDbContextProvider, dbEntityBuilder);

            Logger logger = new Logger();

            logger.AddLogDestinations(entityFrameworkDestination);
        }