Ejemplo n.º 1
0
        public void CheckDatabaseSchemaAgainstEntityFrameworkExpectedSchema()
        {
            const string databaseName = "SFA.DAS.EmployerFinanceV2.Database";

            var configuration = new ConfigurationBuilder().AddAzureTableStorage(EmployerFinanceConfigurationKeys.Base).Build();
            var employerFinanceConfiguration = configuration.GetEmployerFinanceSection <EmployerFinanceConfiguration>();

            using (var connection = new SqlConnection(employerFinanceConfiguration.DatabaseConnectionString))
            {
                var optionsBuilder = new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseSqlServer(connection);

                using (var context = new EmployerFinanceDbContext(optionsBuilder.Options))
                {
                    var config = new CompareEfSqlConfig
                    {
                        TablesToIgnoreCommaDelimited = "ClientOutboxData,OutboxData,SchemaVersions,Users"
                    };

                    config.IgnoreTheseErrors(
                        $"EXTRA IN DATABASE: {databaseName}->Index 'AccountPayeSchemes', index constraint name. Found = AK_AccountPayeSchemes_AccountId_EmployerReferenceNumber{Environment.NewLine}" +
                        $"EXTRA IN DATABASE: {databaseName}->Index 'LevyDeclarationSagas', index constraint name. Found = UK_LevyDeclarationSagas_PayrollPeriod{Environment.NewLine}" +
                        $"EXTRA IN DATABASE: {databaseName}->Index 'LevyDeclarationSagas', index constraint name. Found = UK_LevyDeclarationSagas_PayrollPeriod_AccountPayeSchemeId");

                    var comparer  = new CompareEfSql(config);
                    var hasErrors = comparer.CompareEfWithDb(context);

                    hasErrors.Should().BeFalse(comparer.GetAllErrors);
                }
            }
        }
 public EmployerFinanceDbBuilder(
     DbBuilderDependentRepositories dependentRepositories,
     EmployerFinanceDbContext dbContext)
 {
     DependentRepositories = dependentRepositories;
     _dbContext            = dbContext;
 }
        private EmployerFinanceDbContext GetFinanceDbContext(IContext context)
        {
            var db = new EmployerFinanceDbContext(context.GetInstance <LevyDeclarationProviderConfiguration>().DatabaseConnectionString);

            db.Database.BeginTransaction();
            return(db);
        }
        public ProcessLevyDeclarationsCommandHandlerTestsFixture()
        {
            Fixture           = new Fixture();
            Now               = DateTime.UtcNow;
            UnitOfWorkContext = new UnitOfWorkContext();

            EmployerReferenceNumbers = new List <string>
            {
                "AAA111",
                "BBB222",
                "CCC333"
            };

            Accounts = new List <Account>
            {
                Fixture.Create <Account>(),
                Fixture.Create <Account>()
            };

            AccountPayeSchemes = new List <AccountPayeScheme>
            {
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[0], Now).Set(aps => aps.Id, 1),
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[1], Now).Set(aps => aps.Id, 2),
                new AccountPayeScheme(Accounts[1], EmployerReferenceNumbers[2], Now).Set(aps => aps.Id, 3)
            };

            Command = new ProcessLevyDeclarationsCommand(Now);
            Db      = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);

            Db.AccountPayeSchemes.AddRange(AccountPayeSchemes);
            Db.SaveChanges();

            Handler = new ProcessLevyDeclarationsCommandHandler(Db);
        }
        public static async Task <TransferAllowance> GetTransferAllowance(this EmployerFinanceDbContext db, long accountId, decimal transferAllowancePercentage)
        {
            var transferAllowance = await db.SqlQueryAsync <TransferAllowance>(
                "[employer_financial].[GetAccountTransferAllowance] @accountId = {0}, @allowancePercentage = {1}",
                accountId,
                transferAllowancePercentage).ConfigureAwait(false);

            return(transferAllowance.SingleOrDefault() ?? new TransferAllowance());
        }
Ejemplo n.º 6
0
 public GetTransferConnectionInvitationAuthorizationQueryHandler(
     Lazy <EmployerAccountsDbContext> accountDb,
     EmployerFinanceDbContext financeDb,
     EmployerFinanceConfiguration configuration,
     IAuthorizationService authorizationService)
 {
     _accountDb            = accountDb;
     _financeDb            = financeDb;
     _configuration        = configuration;
     _authorizationService = authorizationService;
 }
Ejemplo n.º 7
0
        public static Task ImportProviders(this EmployerFinanceDbContext db, DataTable providersDataTable)
        {
            var providers = new SqlParameter("providers", SqlDbType.Structured)
            {
                TypeName = "Providers",
                Value    = providersDataTable
            };

            var now = new SqlParameter("now", DateTime.UtcNow);

            return(db.ExecuteSqlCommandAsync("EXEC ImportProviders @providers, @now", providers, now));
        }
        public RunProcessLevyDeclarationsSagaTaskCommandHandlerTestsFixture()
        {
            Now = DateTime.UtcNow;
            AccountPayeSchemeId = 1;
            AccountId           = 2;
            ImportPayeSchemeLevyDeclarationsCommand = new ImportPayeSchemeLevyDeclarationsCommand(SagaId, Now, AccountPayeSchemeId);
            UpdateAccountLevyDeclarationTransactionBalancesCommand = new UpdateAccountLevyDeclarationTransactionBalancesCommand(SagaId, AccountId);
            Db       = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
            Handler  = new RunLevyDeclarationSagaTaskCommandHandler(Db);
            NextTask = new Mock <RequestHandlerDelegate <Unit> >();

            NextTask.Setup(t => t()).Callback(() => NextTaskInvoked = DateTime.UtcNow).ReturnsAsync(Unit.Value);
        }
Ejemplo n.º 9
0
        public ProcessLevyDeclarationsAdHocCommandHandlerTestsFixture()
        {
            Fixture           = new Fixture();
            Now               = DateTime.UtcNow;
            UnitOfWorkContext = new UnitOfWorkContext();
            //todo:
            //AccountPayeScheme = Fixture.Create<AccountPayeScheme>().Set(aps => aps.Id, 1);
            AccountPayeScheme = new AccountPayeScheme(Fixture.Create <Account>(), "AAA111", Fixture.Create <DateTime>()).Set(aps => aps.Id, 1);
            Command           = new ProcessLevyDeclarationsAdHocCommand(Now, AccountPayeScheme.Id);
            Db = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);

            Db.AccountPayeSchemes.Add(AccountPayeScheme);
            Db.SaveChanges();

            Handler = new ProcessLevyDeclarationsAdHocCommandHandler(Db);
        }
Ejemplo n.º 10
0
        public UpdateLevyDeclarationTransactionBalancesCommandHandlerTestsFixture()
        {
            Fixture = new Fixture();
            Now     = DateTime.UtcNow;

            EmployerReferenceNumbers = new List <string>
            {
                "AAA111",
                "BBB222",
                "CCC333"
            };

            Accounts = new List <Account>
            {
                Fixture.Create <Account>().Set(a => a.Id, 1),
                Fixture.Create <Account>().Set(a => a.Id, 2)
            };

            AccountPayeSchemes = new List <AccountPayeScheme>
            {
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[0], Now).Set(aps => aps.Id, 3),
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[1], Now).Set(aps => aps.Id, 4),
                new AccountPayeScheme(Accounts[1], EmployerReferenceNumbers[2], Now).Set(aps => aps.Id, 5)
            };

            Saga = ObjectActivator.CreateInstance <LevyDeclarationSaga>().Set(s => s.Id, 6);

            LevyDeclarationSagaTasks = AccountPayeSchemes
                                       .Select(aps => LevyDeclarationSagaTask.CreateImportPayeSchemeLevyDeclarationsTask(Saga.Id, aps.Id))
                                       .ToList();

            Command        = new UpdateLevyDeclarationTransactionBalancesCommand(Saga.Id);
            Db             = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
            UniformSession = new Mock <IUniformSession>();

            Db.AccountPayeSchemes.AddRange(AccountPayeSchemes);
            Db.LevyDeclarationSagas.Add(Saga);
            Db.LevyDeclarationSagaTasks.AddRange(LevyDeclarationSagaTasks);
            Db.SaveChanges();

            Handler = new UpdateLevyDeclarationTransactionBalancesCommandHandler(Db, UniformSession.Object);
        }
        public UpdateProcessLevyDeclarationsSagaProgressCommandHandlerTestsFixture()
        {
            Fixture           = new Fixture();
            Now               = DateTime.UtcNow;
            UnitOfWorkContext = new UnitOfWorkContext();

            PayeSchemeRefs = new List <string>
            {
                "AAA111",
                "BBB222",
                "CCC333"
            };

            Accounts = new List <Account>
            {
                Fixture.Create <Account>(),
                Fixture.Create <Account>()
            };

            AccountPayeSchemes = new List <AccountPayeScheme>
            {
                new AccountPayeScheme(Accounts[0], PayeSchemeRefs[0], Now).Set(aps => aps.Id, 1),
                new AccountPayeScheme(Accounts[0], PayeSchemeRefs[1], Now).Set(aps => aps.Id, 2),
                new AccountPayeScheme(Accounts[1], PayeSchemeRefs[2], Now).Set(aps => aps.Id, 3)
            };

            Saga = ObjectActivator.CreateInstance <LevyDeclarationSaga>()
                   .Set(s => s.Id, 4)
                   .Set(s => s.PayrollPeriod, Now);

            Command = new UpdateLevyDeclarationSagaProgressCommand(Saga.Id);

            Db             = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
            UniformSession = new Mock <IUniformSession>();

            Db.AccountPayeSchemes.AddRange(AccountPayeSchemes);
            Db.LevyDeclarationSagas.Add(Saga);
            Db.SaveChanges();

            Handler = new UpdateLevyDeclarationSagaProgressCommandHandler(Db, UniformSession.Object);
        }
        public ImportLevyDeclarationsCommandHandlerTestsFixture()
        {
            Fixture = new Fixture();
            Now     = DateTime.UtcNow;

            EmployerReferenceNumbers = new List <string>
            {
                "AAA111",
                "BBB222",
                "CCC333"
            };

            Accounts = new List <Account>
            {
                Fixture.Create <Account>(),
                Fixture.Create <Account>()
            };

            AccountPayeSchemes = new List <AccountPayeScheme>
            {
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[0], Now).Set(aps => aps.Id, 1),
                new AccountPayeScheme(Accounts[0], EmployerReferenceNumbers[1], Now).Set(aps => aps.Id, 2),
                new AccountPayeScheme(Accounts[1], EmployerReferenceNumbers[2], Now).Set(aps => aps.Id, 3)
            };

            //todo: not sure why this doesn't work
            //ExcludedAccountPayeScheme = Fixture.Create<AccountPayeScheme>().Set(aps => aps.Id, 4);
            ExcludedAccountPayeScheme = new AccountPayeScheme(Fixture.Create <Account>(), "DDD444", Fixture.Create <DateTime>()).Set(aps => aps.Id, 4);

            Command        = new ImportLevyDeclarationsCommand(5, Now, AccountPayeSchemes.Max(aps => aps.Id));
            Db             = new EmployerFinanceDbContext(new DbContextOptionsBuilder <EmployerFinanceDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
            UniformSession = new Mock <IUniformSession>();

            Db.AccountPayeSchemes.AddRange(AccountPayeSchemes.Append(ExcludedAccountPayeScheme));
            Db.SaveChanges();

            Handler = new ImportLevyDeclarationsCommandHandler(Db, UniformSession.Object);
        }
Ejemplo n.º 13
0
        public async Task CreateFinanceStatistics()
        {
            var fixture = new Fixture();

            var financeDbContext = new EmployerFinanceDbContext(_configuration.DatabaseConnectionString);
            var lazyDb           = new Lazy <EmployerFinanceDbContext>(() => financeDbContext);
            var levyRepository   = new DasLevyRepository(_configuration, Mock.Of <ILog>(), lazyDb);

            financeDbContext.Database.BeginTransaction();

            try
            {
                await levyRepository.CreatePayments(new List <PaymentDetails>
                {
                    fixture
                    .Build <PaymentDetails>()
                    .With(details => details.CollectionPeriodId, "R05")
                    // could put sanitised collection period and delivery period values in for mth and year
                    .With(details => details.PeriodEnd, "R12")
                    .With(details => details.EmployerAccountVersion, $"ver-{DateTime.Now.Ticks.ToString().Substring(4,10)}")
                    .With(details => details.ApprenticeshipVersion, $"ver-{DateTime.Now.Ticks.ToString().Substring(4,10)}")
                    .Without(details => details.FrameworkCode)
                    .Without(details => details.PathwayCode)
                    .Without(details => details.PathwayName)
                    .Create()
                });

                financeDbContext.Database.CurrentTransaction.Commit();
            }
            catch (Exception e)
            {
                financeDbContext.Database.CurrentTransaction.Rollback();
                Console.WriteLine(e);
                throw;
            }
        }
Ejemplo n.º 14
0
 public GetTransferAllowanceQueryHandler(EmployerFinanceDbContext db, LevyDeclarationProviderConfiguration configuration)
 {
     _db            = db;
     _configuration = configuration;
 }
 public GetTransferTransactionDetailsQueryHandler(EmployerFinanceDbContext dbContext,
                                                  IPublicHashingService publicHashingService)
 {
     _dbContext            = dbContext;
     _publicHashingService = publicHashingService;
 }
Ejemplo n.º 16
0
 public TransferAllowanceService(EmployerFinanceDbContext db, EmployerFinanceConfiguration configuration)
 {
     _db            = db;
     _configuration = configuration;
 }
 public UpdateLevyDeclarationTransactionBalancesCommandHandler(EmployerFinanceDbContext db, IUniformSession uniformSession)
 {
     _db             = db;
     _uniformSession = uniformSession;
 }
 public UpdateLevyDeclarationSagaProgressCommandHandler(EmployerFinanceDbContext db, IUniformSession uniformSession)
 {
     _db             = db;
     _uniformSession = uniformSession;
 }
Ejemplo n.º 19
0
 public GetTransferAllowanceQueryHandler(EmployerFinanceDbContext db, EmployerFinanceConfiguration configuration)
 {
     _db            = db;
     _configuration = configuration;
 }
 public RunLevyDeclarationSagaTaskCommandHandler(EmployerFinanceDbContext db)
 {
     _db = db;
 }
 public ProcessLevyDeclarationsAdHocCommandHandler(EmployerFinanceDbContext db)
 {
     _db = db;
 }
Ejemplo n.º 22
0
 public ImportLevyDeclarationsCommandHandler(EmployerFinanceDbContext db, IUniformSession uniformSession)
 {
     _db             = db;
     _uniformSession = uniformSession;
 }
 public GetFinancialStatisticsQueryHandler(EmployerFinanceDbContext financeDb)
 {
     _financeDb = financeDb;
 }