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