public async Task SaveChanges_WithFoundCategory_UpdatesBudgettedPercentage() { AutoMocker mocker = new AutoMocker().WithDefaults(); using var factory = mocker.WithDbScope(); using var context = factory.Create(); context.ExpenseCategories.Add(new ExpenseCategory { ID = 42, CategoryName = "CategoryName", Name = "Name", BudgetedAmount = 100 }); await context.SaveChangesAsync(); var vm = mocker.CreateInstance <BudgetViewModel>(); var expenseCategory = await ExpenseCategoryViewModelEx.Create(mocker.Get <Func <BudgetContext> >(), new ExpenseCategory { ID = 42 }); expenseCategory.EditingCategory = "CategoryNameChanged"; expenseCategory.EditingName = "NameChanged"; expenseCategory.EditAmount = 10; expenseCategory.EditIsAmountType = false; bool result = await vm.SaveChanges(expenseCategory); Assert.IsTrue(result); using var verificationContext = factory.Create(); var existing = await verificationContext.ExpenseCategories.FindAsync(42); Assert.AreEqual("CategoryNameChanged", existing.CategoryName); Assert.AreEqual("NameChanged", existing.Name); Assert.AreEqual(0, existing.BudgetedAmount); Assert.AreEqual(10, existing.BudgetedPercentage); }
public void Receive(OpenHistory message) { var history = ((MainWindowViewModel)DataContext).History; ExpenseCategoryViewModelEx category = message.ExpenseCategory; if (!history.FilterCategories.Any(x => x.ID == category.ExpenseCategoryID) && history.ExpenseCategories.FirstOrDefault(x => x.ID == category.ExpenseCategoryID) is ExpenseCategory foundCategory) { history.FilterCategories.Clear(); history.FilterCategories.Add(foundCategory); } TabControl.SelectedIndex = 1; }
public async Task SaveChanges_CategoryNotFound_ReturnsFalse() { AutoMocker mocker = new AutoMocker().WithDefaults(); using var _ = mocker.WithDbScope(); var vm = mocker.CreateInstance <BudgetViewModel>(); var expenseCategory = await ExpenseCategoryViewModelEx.Create(mocker.Get <Func <BudgetContext> >(), new ExpenseCategory { ID = 42 }); bool result = await vm.SaveChanges(expenseCategory); Assert.IsFalse(result); }
public async Task Create_WithIgnoreBudgetItems_DoesNotCountThemInTotal() { AutoMocker mocker = new(); using var factory = mocker.WithDbScope(); var expenseCategory1 = new ExpenseCategory(); var expenseCategory2 = new ExpenseCategory(); var now = DateTime.Now; using var setupContext = factory.Create(); setupContext.AddRange(expenseCategory1, expenseCategory2); await setupContext.SaveChangesAsync(); await setupContext.AddIncome("Income 1", now, false, (300, expenseCategory1.ID)); await setupContext.AddIncome("Income 2", now, true, (200, expenseCategory1.ID)); await setupContext.AddTransaction("Transaction 1", now, false, (100, expenseCategory1.ID)); await setupContext.AddTransaction("Transaction 2", now, true, (150, expenseCategory1.ID)); await setupContext.AddTransfer("Transfer 1", now, false, 50, expenseCategory1, expenseCategory2); await setupContext.AddTransfer("Transfer 2", now, true, 25, expenseCategory1, expenseCategory2); var vm1 = await ExpenseCategoryViewModelEx.Create(() => factory.Create(), expenseCategory1, now); var vm2 = await ExpenseCategoryViewModelEx.Create(() => factory.Create(), expenseCategory2, now); // Balance always shows current even for items that ignore budget Assert.AreEqual(175, vm1.Balance); //(Income 300 + 200) - (Transaction 100 + 150) - (Transfer 50 + 25) Assert.AreEqual(250, vm1.MonthlyAllocations); //Income 300 - Transfer Out 50 Assert.AreEqual(100, vm1.MonthlyExpenses); //Transaction 100 Assert.AreEqual(75, vm2.Balance); //Transfer 50 + Transfer 25 Assert.AreEqual(50, vm2.MonthlyAllocations); //Transfer 50 Assert.AreEqual(0, vm2.MonthlyExpenses); }
public async Task Create_SpecifyingMonth_LoadsData() { AutoMocker mocker = new(); using var factory = mocker.WithDbScope(); var expenseCategory = new ExpenseCategory(); var now = DateTime.Now; var twoMonthsAgo = now.AddMonths(-2); var lastMonth = now.AddMonths(-1); var setupContext = factory.Create(); setupContext.AddRange(expenseCategory); await setupContext.SaveChangesAsync(); await setupContext.AddTransaction(expenseCategory.ID, 100, "Transaction 1", twoMonthsAgo); await setupContext.AddIncome("Income 1", twoMonthsAgo, (300, expenseCategory.ID)); await setupContext.AddTransaction(expenseCategory.ID, 200, "Transaction 2", lastMonth); await setupContext.AddIncome("Income 2", lastMonth, (300, expenseCategory.ID)); await setupContext.AddTransaction(expenseCategory.ID, 300, "Transaction 3", now); await setupContext.AddIncome("Income 3", now, (300, expenseCategory.ID)); var vm = await ExpenseCategoryViewModelEx.Create(() => factory.Create(), expenseCategory, lastMonth); // Balance always shows current even if we query a previous month Assert.AreEqual(300, vm.Balance); Assert.AreEqual(300, vm.MonthlyAllocations); Assert.AreEqual(200, vm.MonthlyExpenses); }