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