Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }