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