public async Task<bool> AddOrUpdateAsync(Budget entity)
        {
            if (entity == null)
                throw new ArgumentNullException(nameof(entity));

            var existingBudget = entity.Guid == Guid.Empty
                ? null
                : await Budgets.FindAsync(entity.Guid);

            Budgets.AddOrUpdate(x => x.Guid, entity);
            await this.SaveChangesAsync();
            return existingBudget == null;
        }
        public void ValidateBudget_ValidBudget_ReturnTrue()
        {
            var budget = new Budget
            {
                Name = "Test Name",
                StartDate = DateTime.Now,
                EndDate = DateTime.Now.AddDays(1),
                Limit = 10
            };

            var budgetService = new BudgetService(ProvidersFactory.GetNewBudgetsProviders(),
                ProvidersFactory.GetNewTransactionsProviders());
            Assert.DoesNotThrow(() => budgetService.Validate(budget));
        }
        public void ValidateBudget_LimitLessThanZero_ThrowException()
        {
            var budget = new Budget
            {
                Name = "Test Name",
                StartDate = DateTime.Now,
                EndDate = DateTime.Now.AddDays(1),
                Limit = -10
            };

            var budgetService = new BudgetService(ProvidersFactory.GetNewBudgetsProviders(),
                ProvidersFactory.GetNewTransactionsProviders());
            budgetService.Validate(budget);
        }
        public void ValidateBudget_EmptyName_ThrowException()
        {
            var budget = new Budget
            {
                Name = string.Empty,
                StartDate = DateTime.Now,
                EndDate = DateTime.Now.AddDays(1),
                Limit = 10
            };

            var budgetService = new BudgetService(ProvidersFactory.GetNewBudgetsProviders(),
                ProvidersFactory.GetNewTransactionsProviders());
            budgetService.Validate(budget);
        }
        public async Task<DeletedEntity<Budget>> DeteleAsync(Budget entity)
        {
            var budgetToDelete = entity.Guid == Guid.Empty
                ? null
                : await Budgets.FindAsync(entity.Guid);

            BudgetAccessRights.RemoveRange(budgetToDelete.AccessRights);

            var deletedBudget = budgetToDelete == null
                ? null
                : Budgets.Remove(budgetToDelete);

            await this.SaveChangesAsync();
            return new DeletedEntity<Budget>(deletedBudget);
        }
 public async Task<bool> AddOrUpdateAsync(Budget entity)
 {
     await Task.CompletedTask;
     return false;
 }
 public async Task<DeletedEntity<Budget>> DeteleAsync(Budget entity)
 {
     await Task.CompletedTask;
     return new DeletedEntity<Budget>(null);
 }
 public void ValidateBudget_NullBudget_ThrowException(Budget budget)
 {
     var budgetService = new BudgetService(ProvidersFactory.GetNewBudgetsProviders(),
         ProvidersFactory.GetNewTransactionsProviders());
     budgetService.Validate(budget);
 }
        public async Task<DeletedEntity<Budget>> DeteleAsync(Budget entity)
        {
            var budgetToDelete = entity.Guid == Guid.Empty
                ? null
                : await Budgets.FindAsync(entity.Guid);

            budgetToDelete.Transactions.Clear();
            var deletedBudget = budgetToDelete == null
                ? null
                : Budgets.Remove(budgetToDelete);

            await this.SaveChangesAsync();
            return new DeletedEntity<Budget>(deletedBudget);
        }
 /// <summary>
 ///     Changes limit of the budget according to the wallet currency
 /// </summary>
 /// <param name="budget">Budget to change limit</param>
 /// <param name="walletCurrency">Currency of a wallet, according to this currency will be the transaction currency changed</param>
 /// <param name="oldCurrency">Old currency of a wallet</param>
 public static void ChangeCurrency(Budget budget, Currency walletCurrency, Currency oldCurrency)
 {
     budget.Limit = budget.Limit*
                    ExchangeRateReader.GetExchangeRate(oldCurrency.Code, walletCurrency.Code);
 }