public async Task TestValidation(int num, bool hasErrors, bool doNotValidateSaveChanges) { //SETUP var config = new GenericBizRunnerConfig { TurnOffCaching = true, DoNotValidateSaveChanges = doNotValidateSaveChanges }; var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var utData = NonDiBizSetup.SetupDtoMapping <ServiceLayerBizInDto>(config); utData.AddDtoMapping <ServiceLayerBizOutDto>(); var bizInstance = new BizActionInOutWriteDbAsync(context); var runner = new ActionServiceInOutAsync <IBizActionInOutWriteDbAsync, BizDataIn, BizDataOut>(true, utData.WrappedConfig); var inDto = new ServiceLayerBizInDto { Num = num }; //ATTEMPT var data = await runner.RunBizActionDbAndInstanceAsync <ServiceLayerBizOutDto>(context, bizInstance, inDto); //VERIFY bizInstance.HasErrors.ShouldEqual(hasErrors); if (hasErrors) { context.LogEntries.Any().ShouldBeFalse(); } else { context.LogEntries.Single().LogText.ShouldEqual(num.ToString()); } } }
public void TestNormalValidateActionsBasedOnConfig(bool doNotValidate, bool hasErrors) { //SETUP var config = new GenericBizRunnerConfig { TurnOffCaching = true, DoNotValidateSaveChanges = doNotValidate }; var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var bizInstance = new BizActionInOnlyWriteDb(context); var runner = new ActionService <IBizActionInOnlyWriteDb>(context, bizInstance, _mapper, config); var input = new BizDataIn { Num = 1 }; //ATTEMPT runner.RunBizAction(input); //VERIFY bizInstance.HasErrors.ShouldEqual(hasErrors); if (hasErrors) { context.LogEntries.Any().ShouldBeFalse(); } else { context.LogEntries.Single().LogText.ShouldEqual("1"); } } }
public void TestValidation(int num, bool hasErrors, bool doNotValidateSaveChanges) { //SETUP var config = new GenericBizRunnerConfig { TurnOffCaching = true, DoNotValidateSaveChanges = doNotValidateSaveChanges }; var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var mapper = SetupHelpers.CreateMapper <ServiceLayerBizInDto, ServiceLayerBizOutDto>(); var bizInstance = new BizActionInOutWriteDb(context); var runner = new ActionServiceInOut <IBizActionInOutWriteDb, BizDataIn, BizDataOut>(true, config); var inDto = new ServiceLayerBizInDto { Num = num }; //ATTEMPT var data = runner.RunBizActionDbAndInstance <ServiceLayerBizOutDto>(context, bizInstance, mapper, inDto); //VERIFY bizInstance.HasErrors.ShouldEqual(hasErrors); if (hasErrors) { context.LogEntries.Any().ShouldBeFalse(); } else { context.LogEntries.Single().LogText.ShouldEqual(num.ToString()); } } }
public void ForceValidateOn() { //SETUP var config = new GenericBizRunnerConfig { TurnOffCaching = true, DoNotValidateSaveChanges = true }; var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var bizInstance = new BizActionInOnlyWriteDbForceValidateOn(context); var runner = new ActionService <IBizActionInOnlyWriteDbForceValidateOn>(context, bizInstance, _mapper, config); var input = new BizDataIn { Num = 1 }; //ATTEMPT runner.RunBizAction(input); //VERIFY runner.Status.HasErrors.ShouldBeTrue(); context.LogEntries.Any().ShouldBeFalse(); } }
public void ForceValidateOff() { //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var config = new GenericBizRunnerConfig { TurnOffCaching = true }; var utData = NonDiBizSetup.SetupDtoMapping <ServiceLayerBizInDto>(config); utData.AddDtoMapping <ServiceLayerBizOutDto>(); var bizInstance = new BizActionInOnlyWriteDbForceValidateOff(context); var runner = new ActionService <IBizActionInOnlyWriteDbForceValidateOff>(context, bizInstance, utData.WrappedConfig); var input = new BizDataIn { Num = 1 }; //ATTEMPT runner.RunBizAction(input); //VERIFY runner.Status.HasErrors.ShouldBeFalse(); context.LogEntries.Single().LogText.ShouldEqual("1"); } }
public void TestSqlErrorHandlerNotInPlace() { //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); context.UniqueEntities.Add(new UniqueEntity { UniqueString = "Hello" }); context.SaveChanges(); var config = new GenericBizRunnerConfig { TurnOffCaching = true }; var bizInstance = new BizActionCheckSqlErrorHandlerWriteDb(context); var runner = new ActionService <IBizActionCheckSqlErrorHandlerWriteDb>(context, bizInstance, _mapper, config); //ATTEMPT var ex = Assert.Throws <DbUpdateException>(() => runner.RunBizAction("Hello")); //VERIFY ex.InnerException.Message.ShouldEqual("SQLite Error 19: 'UNIQUE constraint failed: UniqueEntities.UniqueString'."); } }
public async Task TestBeforeSaveChangesMethodProvidedWithError() { //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var config = new GenericBizRunnerConfig() { BeforeSaveChanges = FailOnBadWord }; //ATTEMPT context.Add(new UniqueEntity { UniqueString = "bad word" }); var status = await context.SaveChangesWithValidationAsync(config); //VERIFY status.HasErrors.ShouldBeTrue(); status.GetAllErrors().ShouldEqual("The UniqueEntity class contained a bad word."); } using (var context = new TestDbContext(options)) { context.UniqueEntities.Count().ShouldEqual(0); } }
public void TestCreateTodoOk() { //SETUP var options = SqliteInMemory.CreateOptions <ExampleDbContext>(); using (var context = new ExampleDbContext(options)) { context.Database.EnsureCreated(); context.SeedDatabase(); var controller = new ToDoController(); var noCachingConfig = new GenericBizRunnerConfig { TurnOffCaching = true }; var utData = new NonDiBizSetup(noCachingConfig); var bizInstance = new CreateTodoBizLogic(context); var service = new ActionService <ICreateTodoBizLogic>(context, bizInstance, utData.WrappedConfig); //ATTEMPT var dto = new CreateTodoDto() { Name = "Test", Difficulty = 3, }; var response = controller.Post(dto, service); //VERIFY response.GetStatusCode().ShouldEqual(201); var rStatus = response.CheckCreateResponse("GetSingleTodo", new { id = 7 }, context.TodoItems.Find(7)); rStatus.IsValid.ShouldBeTrue(rStatus.GetAllErrors()); rStatus.Message.ShouldEqual("Success"); } }
public void TestBeforeSaveChangesMethodProvidedNoError() { //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); var config = new GenericBizRunnerConfig() { BeforeSaveChanges = FailOnBadWord }; //ATTEMPT context.Add(new UniqueEntity { UniqueString = "good word" }); var status = context.SaveChangesWithValidation(config); //VERIFY status.HasErrors.ShouldBeFalse(status.GetAllErrors()); } using (var context = new TestDbContext(options)) { context.UniqueEntities.Count().ShouldEqual(1); } }
public TestGetDtoAndResetDtoAsync() { var config = new GenericBizRunnerConfig { TurnOffCaching = true }; var utData = new NonDiBizSetup(config); _wrappedConfig = utData.WrappedConfig; }
public TestActionServiceInOut() { var config = new GenericBizRunnerConfig { TurnOffCaching = true }; var utData = NonDiBizSetup.SetupDtoMapping <ServiceLayerBizInDto>(config); utData.AddDtoMapping <ServiceLayerBizOutDto>(); _wrappedConfig = utData.WrappedConfig; }
public async Task TestSqlErrorHandlerWorksOkAsync(int sqlErrorCode, bool shouldThrowException) { IStatusGeneric CatchUniqueError(Exception e, DbContext context) { var dbUpdateEx = e as DbUpdateException; var sqliteError = dbUpdateEx?.InnerException as SqliteException; return(sqliteError?.SqliteErrorCode == sqlErrorCode ? new StatusGenericHandler().AddError("Unique constraint failed") : null); } //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); context.UniqueEntities.Add(new UniqueEntity { UniqueString = "Hello" }); context.SaveChanges(); var config = new GenericBizRunnerConfig { TurnOffCaching = true, SaveChangesExceptionHandler = CatchUniqueError }; var utData = NonDiBizSetup.SetupDtoMapping <ServiceLayerBizInDto>(config); utData.AddDtoMapping <ServiceLayerBizOutDto>(); var bizInstance = new BizActionCheckSqlErrorHandlerWriteDbAsync(context); var runner = new ActionServiceAsync <IBizActionCheckSqlErrorHandlerWriteDbAsync>(context, bizInstance, utData.WrappedConfig); //ATTEMPT try { await runner.RunBizActionAsync("Hello"); } //VERIFY catch (Exception e) { shouldThrowException.ShouldBeTrue(); return; } shouldThrowException.ShouldBeFalse(); runner.Status.GetAllErrors().ShouldEqual("Unique constraint failed"); } }
public void TestSqlErrorHandlerWorksEvenIfValidationIsTurnedOff() { IStatusGeneric CatchUniqueError(Exception e, DbContext context) { var dbUpdateEx = e as DbUpdateException; var sqliteError = dbUpdateEx?.InnerException as SqliteException; return(sqliteError?.SqliteErrorCode == 19 ? new StatusGenericHandler().AddError("Unique constraint failed") : null); } //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); using (var context = new TestDbContext(options)) { context.Database.EnsureCreated(); context.UniqueEntities.Add(new UniqueEntity { UniqueString = "Hello" }); context.SaveChanges(); var config = new GenericBizRunnerConfig { TurnOffCaching = true, DoNotValidateSaveChanges = true, SaveChangesExceptionHandler = CatchUniqueError }; var utData = NonDiBizSetup.SetupDtoMapping <ServiceLayerBizInDto>(config); utData.AddDtoMapping <ServiceLayerBizOutDto>(); var bizInstance = new BizActionCheckSqlErrorHandlerWriteDb(context); var runner = new ActionService <IBizActionCheckSqlErrorHandlerWriteDb>(context, bizInstance, utData.WrappedConfig); //ATTEMPT runner.RunBizAction("Hello"); //VERIFY runner.Status.GetAllErrors().ShouldEqual("Unique constraint failed"); } }
public void TestGenericBizRunnerAutoFacModuleAddConfig() { //SETUP var options = SqliteInMemory.CreateOptions <TestDbContext>(); var builder = new ContainerBuilder(); builder.RegisterInstance(options).SingleInstance(); builder.RegisterType <TestDbContext>().As <TestDbContext>().InstancePerLifetimeScope(); builder.RegisterType <BizActionInOnlyWriteDb>().As <IBizActionInOnlyWriteDb>().InstancePerLifetimeScope(); builder.RegisterInstance(SetupHelpers.CreateMapper <ServiceLayerBizInDto>()).As <IMapper>().SingleInstance(); //ATTEMPT var config = new GenericBizRunnerConfig { DoNotValidateSaveChanges = true }; builder.RegisterModule(new BizRunnerDiModule <TestDbContext> { SpecificConfig = config }); var container = builder.Build(); //VERIFY using (var lifetimeScope = container.BeginLifetimeScope()) { var dbContext = lifetimeScope.Resolve <TestDbContext>(); dbContext.Database.EnsureCreated(); var runner = lifetimeScope.Resolve <IActionService <IBizActionInOnlyWriteDb> >(); runner.RunBizAction(new BizDataIn { Num = 1 }); dbContext.LogEntries.Single().LogText.ShouldEqual("1"); } }