Exemple #1
0
        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());
                }
            }
        }
Exemple #2
0
        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");
                }
            }
        }
Exemple #3
0
        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());
                }
            }
        }
Exemple #4
0
        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();
            }
        }
Exemple #5
0
        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");
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #10
0
        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;
        }
Exemple #12
0
        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");
            }
        }
Exemple #13
0
        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");
            }
        }