Ejemplo n.º 1
0
        public async void Topup_BothBalancesIncreased()
        {
            const string incomeTypeName = "Новый тип дохода";

            using (var session = await CreateDefaultSession())
            {
                session.CreateDefaultEntities();
                var balance      = session.DebitCardAccount.Balance;
                var availBalance = session.DebitCardAccount.AvailBalance;
                var model        = new TopupAccountModel
                {
                    Correction        = false,
                    AccountId         = session.DebitCardAccount.Id,
                    AddIncomeTypeName = incomeTypeName,
                    TopupDate         = DateTime.Today,
                    Amount            = 15000,
                };
                var commands = session.CreateAccountCommands();
                var income   = await commands.Topup(model);

                var incomeType = await session.UnitOfWork.GetNamedModelQueryRepository <IncomeType>()
                                 .GetByName(session.UserSession.UserId, incomeTypeName);

                income.Total.ShouldBeEquivalentTo(model.Amount);
                income.DateTime.ShouldBeEquivalentTo(model.TopupDate);
                income.AccountId.ShouldBeEquivalentTo(model.AccountId);
                income.IncomeTypeId.ShouldBeEquivalentTo(incomeType.Id);
                var account = await session.LoadEntity <Account>(session.DebitCardAccount.Id);

                account.Balance.ShouldBeEquivalentTo(balance + model.Amount);
                account.AvailBalance.ShouldBeEquivalentTo(availBalance + model.Amount);
            }
        }
Ejemplo n.º 2
0
        public async void Topup_CreatedSingleTransaction()
        {
            const string incomeTypeName = "Новый тип дохода";

            using (var session = await CreateDefaultSession())
            {
                session.CreateDefaultEntities();
                var model = new TopupAccountModel
                {
                    Correction        = false,
                    AccountId         = session.DebitCardAccount.Id,
                    AddIncomeTypeName = incomeTypeName,
                    TopupDate         = DateTime.Today,
                    Amount            = 15000,
                };
                var commands = session.CreateAccountCommands();
                var income   = await commands.Topup(model);

                var transactoionQueries = session.CreateTransactionQueries();
                var transaction         = await transactoionQueries.GetIncomeTransaction(session.DebitCardAccount.Id, income.Id);

                transaction.ShouldBeEquivalentTo(new TransactionModel
                {
                    OwnerId       = session.UserSession.UserId,
                    InitiatorId   = session.DebitCardAccount.Id,
                    DateTime      = income.DateTime,
                    BillId        = null,
                    IncomeId      = income.Id,
                    ParticipantId = null,
                    Total         = income.Total,
                    Balance       = session.DebitCardAccount.Balance + income.Total
                }, opt => opt.Excluding(x => x.Id));
            }
        }
Ejemplo n.º 3
0
        public async Task <IncomeItemModel> Topup(TopupAccountModel topup)
        {
            var account = await _repository.LoadAsync <Account>(topup.AccountId).ConfigureAwait(false);

            var incomeTypeId = topup.IncomeTypeId;

            if (incomeTypeId == null)
            {
                var incomeType = new IncomeType
                {
                    Name    = topup.AddIncomeTypeName,
                    OwnerId = _currentSession.UserId
                };
                _repository.Create(incomeType);
                await _repository.SaveChangesAsync().ConfigureAwait(false);

                incomeTypeId = incomeType.Id;
            }

            var income = new IncomeItemModel
            {
                AccountId    = account.Id,
                DateTime     = topup.TopupDate,
                IncomeTypeId = incomeTypeId.Value,
                Total        = topup.Amount,
                IsCorrection = topup.Correction,
            };

            await _incomeItemCommands.Update(income).ConfigureAwait(false);

            await _repository.SaveChangesAsync().ConfigureAwait(false);

            return(income);
        }
Ejemplo n.º 4
0
        public async void Delete_Correction_OnlyAvailBalanceDecreased()
        {
            EntityIdSet     ids;
            IncomeItemModel income;

            using (var session = await CreateDefaultSession())
            {
                ids = session.CreateDefaultEntities();
                var balance      = session.DebitCardAccount.Balance;
                var availBalance = session.DebitCardAccount.AvailBalance;
                var model        = new TopupAccountModel
                {
                    Correction        = true,
                    AccountId         = session.DebitCardAccount.Id,
                    AddIncomeTypeName = session.SalaryIncome.Name,
                    TopupDate         = DateTime.Today,
                    Amount            = 15000,
                };
                var commands = session.CreateAccountCommands();
                income = await commands.Topup(model);

                var account = await session.LoadEntity <Account>(ids.DebitCardAccountId);

                account.Balance.ShouldBeEquivalentTo(balance);
                account.AvailBalance.ShouldBeEquivalentTo(availBalance + model.Amount);
            }

            using (var session = await CreateDefaultSession(ids))
            {
                var commands = session.CreateIncomeCommands();
                await commands.Delete(income.Id, false);

                var account = await session.LoadEntity <Account>(ids.DebitCardAccountId);

                account.Balance.ShouldBeEquivalentTo(session.DebitCardAccount.Balance);
                account.AvailBalance.ShouldBeEquivalentTo(session.DebitCardAccount.AvailBalance - income.Total);
            }
        }
Ejemplo n.º 5
0
        public async void Topup_Correction_OnlyAvailBalanceIncreased()
        {
            using (var session = await CreateDefaultSession())
            {
                session.CreateDefaultEntities();
                var balance      = session.DebitCardAccount.Balance;
                var availBalance = session.DebitCardAccount.AvailBalance;
                var model        = new TopupAccountModel
                {
                    Correction        = true,
                    AccountId         = session.DebitCardAccount.Id,
                    AddIncomeTypeName = session.SalaryIncome.Name,
                    TopupDate         = DateTime.Today,
                    Amount            = 15000,
                };
                var commands = session.CreateAccountCommands();
                await commands.Topup(model);

                var account = await session.UnitOfWork.GetQueryRepository <Account>().GetById(session.DebitCardAccount.Id);

                account.Balance.ShouldBeEquivalentTo(balance);
                account.AvailBalance.ShouldBeEquivalentTo(availBalance + model.Amount);
            }
        }