コード例 #1
0
        public void ExpensesCategoryMustBeLessOrEqualToBudgetAmount()
        {
            var request = new MonthBudgetRequest
            {
                UserId           = "ingris",
                Amount           = 3000,
                BudgetCategories = new List <BudgetCategoryDto> {
                    new BudgetCategoryDto {
                        Percentage = 80
                    },
                    new BudgetCategoryDto {
                        Percentage = 20, CategoryId = 1
                    }
                }
            };
            var categories = new List <ExpenseCategory> {
                new ExpenseCategory {
                }, new ExpenseCategory {
                    UId = 1
                }
            };

            var budget     = ExpensesTrackerFactory.CreateNewBudget(request, categories);
            var validation = _userBudgetDomainService.IsValidNewUserBudget(budget);

            Assert.IsTrue(validation.IsValid());
            Assert.AreEqual((decimal)3000, budget.BudgetDetails.Sum(c => c.Amount));
        }
コード例 #2
0
        public void CustomCategoryMustHaveOwner()
        {
            var newCategory = ExpensesTrackerFactory.CustomCategory("Coffee", string.Empty);
            var validation  = _DomainService.IsValidNewCustomCategory(newCategory, null);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.CustomCategoriesMustHaveOwner, validation.ValidationErrorMessage);
        }
コード例 #3
0
        public void EmptyCategoryNameNotValid()
        {
            var newCategory = ExpensesTrackerFactory.DefaultCategory(string.Empty);
            var validation  = _DomainService.IsValidNewCategory(newCategory, null);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.InvalidCategoryName, validation.ValidationErrorMessage);
        }
コード例 #4
0
        public void BudgetMustHaveOwnerId()
        {
            var request    = new MonthBudgetRequest {
            };
            var budget     = ExpensesTrackerFactory.CreateNewBudget(request, null);
            var validation = _userBudgetDomainService.IsValidNewUserBudget(budget);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.BudgetMustHaveAnOwner, validation.ValidationErrorMessage);
        }
コード例 #5
0
        public void CantAddDuplicateMissingTrimName()
        {
            var newCategory     = ExpensesTrackerFactory.DefaultCategory(" Coffee ");
            var systemCategoies = new List <ExpenseCategory>()
            {
                new ExpenseCategory {
                    Name = "COFFEE"
                }
            };
            var validation = _DomainService.IsValidNewCategory(newCategory, systemCategoies);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.CantAddDuplicateCategory, validation.ValidationErrorMessage);
        }
コード例 #6
0
        public async Task <MonthBudgetResponse> AddNewUserBudget(MonthBudgetRequest request)
        {
            var categories = await _context.ExpenseCategory.Where(c => c.IsDefault || c.OwnerId == request.UserId).ToListAsync();

            var newBudget = ExpensesTrackerFactory.CreateNewBudget(request, categories);

            var validation = _budgetDomainService.IsValidNewUserBudget(newBudget);

            if (validation.IsValid())
            {
                _context.UserBudget.Add(newBudget);
                await _context.SaveChangesAsync();
            }
            return(MapUserBudgetToResponse(newBudget, !validation.IsValid(), validation));
        }
コード例 #7
0
        public void AllExpensesCategoriesExists()
        {
            var request = new MonthBudgetRequest {
                UserId = "ingris", BudgetCategories = new List <BudgetCategoryDto> {
                    new BudgetCategoryDto {
                    }
                }
            };
            var categories = new List <ExpenseCategory> {
            };
            var budget     = ExpensesTrackerFactory.CreateNewBudget(request, categories);
            var validation = _userBudgetDomainService.IsValidNewUserBudget(budget);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.ExpensesCategoriesMustExists, validation.ValidationErrorMessage);
        }
コード例 #8
0
        public async Task <NewCategoryResponse> CreateDefaultCategory(ExpenseCategoryRequest request)
        {
            var categories = await _context.ExpenseCategory.Where(c => c.IsDefault == true).ToListAsync();

            var newCategory = ExpensesTrackerFactory.DefaultCategory(request.CategoryName);

            var validation = _domainService.IsValidNewCategory(newCategory, categories);

            if (validation.IsValid())
            {
                _context.ExpenseCategory.Add(newCategory);
                int result = await _context.SaveChangesAsync();

                return(new NewCategoryResponse {
                    CategoryId = newCategory.UId
                });
            }
            return(new NewCategoryResponse {
                ValidationMessage = validation.ValidationErrorMessage
            });
        }
コード例 #9
0
        public void ExpensesCategoryMustBeLessOrEqualTo100Percent()
        {
            var request = new MonthBudgetRequest
            {
                UserId           = "ingris",
                Amount           = 3000,
                BudgetCategories = new List <BudgetCategoryDto> {
                    new BudgetCategoryDto {
                        Percentage = 120,
                    }
                }
            };
            var categories = new List <ExpenseCategory> {
                new ExpenseCategory {
                }
            };
            var budget     = ExpensesTrackerFactory.CreateNewBudget(request, categories);
            var validation = _userBudgetDomainService.IsValidNewUserBudget(budget);

            Assert.IsFalse(validation.IsValid());
            Assert.AreEqual(Messages.ExpesesCategoriesExceed100Percent, validation.ValidationErrorMessage);
        }
コード例 #10
0
        internal async Task <ActionResult <NewCategoryResponse> > CreateCustomCategory(ExpenseCategoryRequest request)
        {
            var userId     = request.UserId;
            var categories = await _context.ExpenseCategory.Where(c => c.IsDefault || c.OwnerId == userId).ToListAsync();

            var newCategory = ExpensesTrackerFactory.CustomCategory(request.CategoryName, userId);

            var validation = _domainService.IsValidNewCustomCategory(newCategory, categories);

            if (validation.IsValid())
            {
                _context.ExpenseCategory.Add(newCategory);
                int result = await _context.SaveChangesAsync();

                return(new NewCategoryResponse {
                    CategoryId = newCategory.UId, UserId = newCategory.OwnerId
                });
            }
            return(new NewCategoryResponse {
                ValidationMessage = validation.ValidationErrorMessage
            });
        }
コード例 #11
0
        internal async Task <ExpensesResponse> AddNewExpense(ExpenseRequest userBudget)
        {
            var userId           = userBudget.UserId;
            var budgetCategoryId = Convert.ToInt32(userBudget.CategoryId);
            var budgetCategory   = await
                                   _context.BudgetDetail.Include(c => c.UserBudget).FirstOrDefaultAsync(c => c.UId == budgetCategoryId && c.UserBudget.UserId == userId);

            if (budgetCategory != null)
            {
                var newExpense =
                    ExpensesTrackerFactory.CreateNewExpense(budgetCategory, userBudget.Description, userBudget.ExpendedValue, userBudget.TransactionDate);

                _context.Expenses.Add(newExpense);
                await _context.SaveChangesAsync();

                return(MapExpense(newExpense));
            }
            else
            {
                return(new ExpensesResponse {
                    ValidationMessage = Messages.CannotAddExpenses
                });
            }
        }