public void TotalAmount_ChangingItemAmounts_ExpectTotalAmountChangedEvent()
        {
            // Create group with budget items
            List <BudgetItem> items = new List <BudgetItem>()
            {
                new BudgetItem("test item 1"),
                new BudgetItem("test item 2"),
                new BudgetItem("test item 3")
            };
            var group = new BudgetGroup("Housing", budgetItems: items);
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            bool wasChanged = false;

            viewModel.PropertyChanged += (o, e) =>
            {
                if (e.PropertyName == nameof(viewModel.TotalAmount))
                {
                    wasChanged = true;
                }
            };

            // TEST: changing item amounts should trigger property changed
            group.BudgetItems[1].Amount = 234.56m;

            // Validate event and final value
            wasChanged.Should().BeTrue();
            viewModel.TotalAmount.Should().Be(group.TotalAmount.ToCurrencyString());
        }
        public void TotalAmount_ChangingItemAmounts_ExpectTotalAmountChangedEvent()
        {
            var items = new List <BudgetItem>
            {
                new BudgetItem("1", "item 1"),
                new BudgetItem("2", "item 2"),
                new BudgetItem("3", "item 3"),
            };

            var  group      = new BudgetGroup("1", "group 1", budgetItems: items);
            var  viewModel  = new BudgetGroupViewModel(group);
            bool wasChanged = false;

            viewModel.PropertyChanged += (o, e) =>
            {
                if (e.PropertyName == nameof(viewModel.TotalAmount))
                {
                    wasChanged = true;
                }
            };

            group.BudgetItems[1].Amount = 234.56m;
            wasChanged.Should().BeTrue();
            viewModel.TotalAmount.Should().Be(group.TotalAmount.ToCurrencyString());
        }
Esempio n. 3
0
        public BasicExpensesIntroPage(BudgetGroupViewModel budgetGroup)
        {
            InitializeComponent();
            BindingContext = budgetGroup;

            contentView.ContinueButtonAction = async() => await Navigation.PushAsync(new TransportationPage(Dependencies.ProfileViewModel.Budget.TransportationGroup));
        }
        public TransportationPage(BudgetGroupViewModel budgetGroupViewModel)
        {
            InitializeComponent();
            BindingContext = budgetGroupViewModel;

            contentView.ContinueButtonAction = async() => await Navigation.PushAsync(new IntroPage());
        }
Esempio n. 5
0
        public IncomeIntroPage(BudgetGroupViewModel budgetGroup)
        {
            InitializeComponent();

            BindingContext = budgetGroup;

            contentView.ContinueButtonAction = async() => await Navigation.PushAsync(new IncomePage(budgetGroup));
        }
        public void IsTotalAmountZero_AllZeroItemsAmount_ExpectTrue()
        {
            var items = new List <BudgetItem>
            {
                new BudgetItem("1", "test 1"),
                new BudgetItem("2", "test 2"),
                new BudgetItem("3", "test 3")
            };

            var group     = new BudgetGroup("1", "name", budgetItems: items);
            var viewModel = new BudgetGroupViewModel(group);

            viewModel.IsTotalAmountZero.Should().BeTrue();
        }
        public void IsTotalAmountZero_NonZeroItemAmounts_ExpectFalse()
        {
            var items = new List <BudgetItem>
            {
                new BudgetItem("1", "test 1"),
                new BudgetItem("2", "test 2", 100m),
                new BudgetItem("3", "test 3")
            };

            var group     = new BudgetGroup("1", "name", budgetItems: items);
            var viewModel = new BudgetGroupViewModel(group);

            viewModel.IsTotalAmountZero.Should().BeFalse();
        }
        public void AddNewBudgetItem_ExpectNewItemInViewModel()
        {
            // Create a group and view model with no budget items
            var group = new BudgetGroup("Housing");
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            // TEST: add new item from the view model
            viewModel.AddNewBudgetItem();

            // Confirm a new budget item as created in the backing group, and in the view model
            group.BudgetItems.Count.Should().Be(1);
            viewModel.BudgetItems.Count.Should().Be(1);
            viewModel.BudgetItems[0].BudgetItem.Should().Be(group.BudgetItems[0]);
        }
        public void IsTotalAmountZero_NonZeroItemAmounts_ExpectFalse()
        {
            // Create group with budget items
            List <BudgetItem> items = new List <BudgetItem>()
            {
                new BudgetItem("test item 1"),
                new BudgetItem("test item 2", amount: 123.45m),
                new BudgetItem("test item 3")
            };
            var group = new BudgetGroup("Housing", budgetItems: items);

            // TEST: a view model representing a group with all zero items
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            viewModel.IsTotalAmountZero.Should().BeFalse();
        }
        public void BudgetItems_DeleteItemGroup_ViewModelDeleted()
        {
            var items = new List <BudgetItem>
            {
                new BudgetItem("id1", "name1"),
                new BudgetItem("id2", "name2", 12.34m, BudgetItemType.Debt),
            };

            var group = new BudgetGroup("id", "group name", budgetItems: items);
            var budgetGroupViewModel = new BudgetGroupViewModel(group);

            var itemDeleted = group.BudgetItems[0];

            group.BudgetItems.RemoveAt(0);
            budgetGroupViewModel.BudgetItems.Count.Should().Be(1);
            budgetGroupViewModel.BudgetItems.Any(item => item.BudgetItem == itemDeleted).Should().BeFalse();
        }
        public void IsTotalAmountZero_ChangingItemAmounts_ExpectChangingTrueFalse()
        {
            var items = new List <BudgetItem>
            {
                new BudgetItem("1", "item 1"),
                new BudgetItem("2", "item 2"),
                new BudgetItem("3", "item 3"),
            };
            var group     = new BudgetGroup("1", "group 1", budgetItems: items);
            var viewModel = new BudgetGroupViewModel(group);

            viewModel.IsTotalAmountZero.Should().BeTrue();
            group.BudgetItems[1].Amount = 234.56m;
            viewModel.IsTotalAmountZero.Should().BeFalse();
            group.BudgetItems[1].Amount = 0;
            viewModel.IsTotalAmountZero.Should().BeTrue();
        }
        public void IsTotalAmountZero_ChangingItemAmounts_ExpectChangingTrueFalse()
        {
            // Create group with budget items
            List <BudgetItem> items = new List <BudgetItem>()
            {
                new BudgetItem("test item 1"),
                new BudgetItem("test item 2"),
                new BudgetItem("test item 3")
            };
            var group = new BudgetGroup("Housing", budgetItems: items);
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            // TEST: changing item amounts in the groupshould transition the IsTotalAmountZero
            viewModel.IsTotalAmountZero.Should().BeTrue();
            group.BudgetItems[1].Amount = 234.56m;
            viewModel.IsTotalAmountZero.Should().BeFalse();
            group.BudgetItems[1].Amount = 0;
            viewModel.IsTotalAmountZero.Should().BeTrue();
        }
        public void Constructor_DefaultBudgetGroupPresentation_PresentsDefaultValues()
        {
            var name  = "group";
            var group = new BudgetGroup("group1", name);

            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            viewModel.BudgetItems.Should().BeEmpty();
            viewModel.ColorKey.Should().Be(BudgetGroupPresentation.DefaultColorKey);
            viewModel.IconSource.Should().Be("");
            viewModel.Description.Should().Be("");
            viewModel.Subtitle.Should().Be(BudgetGroupPresentation.DefaultSubtitle);
            viewModel.AddItemText.Should().Be(BudgetGroupPresentation.DefaultAddItemText);
            viewModel.CustomTitle.Should().Be("");
            viewModel.IsTitleVisible.Should().BeTrue("a custom title is not provided");
            viewModel.IsCustomTitleVisible.Should().BeFalse("a custom title is not provided");
            viewModel.HasSecondaryHeader.Should().BeFalse();
            viewModel.HeaderTextWithoutDate.Should().Be(name.ToUpper());
            viewModel.HeaderText.Should().Be(viewModel.HeaderTextWithoutDate, "hasDateOnHeader is false");
        }
        public void BudgetItems_DeleteItemInGroup_ViewModelDeleted()
        {
            // Create group with budget items
            List <BudgetItem> items = new List <BudgetItem>()
            {
                new BudgetItem("test item 1"),
                new BudgetItem("test item 2", BudgetItemType.Debt, 12.34m)
            };
            var group = new BudgetGroup("Housing", budgetItems: items);
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            // TEST: delete an item from the backing group
            var itemDeleted = group.BudgetItems[0];

            group.BudgetItems.RemoveAt(0);

            viewModel.BudgetItems.Count().Should().Be(1);
            viewModel.BudgetItems
            .Any(itemViewModel => itemViewModel.BudgetItem == itemDeleted)
            .Should().BeFalse();
        }
        public void Constructor_ModelWithBudgetItems_PresentsGroupAndItems()
        {
            string name  = "test group name";
            var    items = new List <BudgetItem>
            {
                new BudgetItem("id1", "group1"),
                new BudgetItem("id2", "group2", 12.34m),
            };

            var group     = new BudgetGroup("id3", name, budgetItems: items);
            var viewModel = new BudgetGroupViewModel(group);

            viewModel.Name.Should().Be(group.Name);
            viewModel.NameLower.Should().Be(group.Name.ToLower());
            viewModel.TotalAmount.Should().Be(group.TotalAmount.ToCurrencyString());
            viewModel.BudgetItems.Count.Should().Be(items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                viewModel.BudgetItems[i].BudgetItem.Should().Be(items[i]);
            }
        }
        public void Constructor_ValidParameters_PresentionSetupCorrectly(string groupName)
        {
            var group = new BudgetGroup(groupName);
            var expectedPresentation = BudgetGroupPresentationBuilder.Build(group);

            // TEST: Construct a view model
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            // Confirm properties and items created in view model
            viewModel.Name.Should().Be(groupName);
            viewModel.BudgetItems.Should().BeEmpty();
            viewModel.ColorKey.Should().Be(expectedPresentation.ColorKey);
            viewModel.IconSource.Should().Be(expectedPresentation.IconSource);
            viewModel.Description.Should().Be(expectedPresentation.Description);
            viewModel.Subtitle.Should().Be(expectedPresentation.Subtitle);
            viewModel.AddItemText.Should().Be(expectedPresentation.AddItemText);
            viewModel.CustomTitle.Should().Be(expectedPresentation.CustomTitle);
            viewModel.HasSecondaryHeader.Should().Be(expectedPresentation.HasSecondaryHeader);
            viewModel.IsTitleVisible.Should().Be(string.IsNullOrWhiteSpace(expectedPresentation.CustomTitle));
            viewModel.IsCustomTitleVisible.Should().Be(!viewModel.IsTitleVisible);
            viewModel.HeaderTextWithoutDate.Should().Be(groupName.ToUpper());
            viewModel.HeaderText.Should().Be(expectedPresentation.HasDateOnHeader ? viewModel.HeaderTextWithDate : viewModel.HeaderTextWithoutDate);
        }
        public void Constructor_ModelWithBudgetItems_PresentsGroupAndItems()
        {
            // Create group with budget items
            string            name  = "Housing";
            List <BudgetItem> items = new List <BudgetItem>()
            {
                new BudgetItem("test item 1"),
                new BudgetItem("test item 2", BudgetItemType.Debt, 12.34m)
            };
            var group = new BudgetGroup(name, budgetItems: items);

            // TEST: Construct a view model
            BudgetGroupViewModel viewModel = new BudgetGroupViewModel(group);

            // Confirm properties and items created in view model
            viewModel.Name.Should().Be(group.Name);
            viewModel.NameLower.Should().Be(group.Name.ToLower());
            viewModel.TotalAmount.Should().Be(group.TotalAmount.ToCurrencyString());
            viewModel.BudgetItems.Count.Should().Be(items.Count);
            for (int i = 0; i < items.Count; ++i)
            {
                viewModel.BudgetItems[i].BudgetItem.Should().Be(items[i]);
            }
        }
Esempio n. 18
0
 public IncomePage(BudgetGroupViewModel budgetGroupViewModel)
 {
     InitializeComponent();
     BindingContext = budgetGroupViewModel;
     contentView.ContinueButtonAction = () => Navigation.PushAsync(new BasicExpensesIntroPage(Dependencies.ProfileViewModel.Budget.BasicExpensesDisplayGroup));
 }