public void can_create_new_AccountTagViewModel()
        {
            var tag = new AccountTag(1, "Entertainment");
            var vm = new AccountTagViewModel(tag, _mockAccountTagRepository);

            Assert.AreEqual(tag.Id, vm.TagId);
            Assert.AreEqual(tag.Name, vm.TagName);
        }
        public void changing_AccountTagName_to_same_name_does_not_cause_update()
        {
            var tag = new AccountTag(1, "Holiday");
            var vm = new AccountTagViewModel(tag, _mockAccountTagRepository);
            vm.PropertyChanged += _changeCounter.HandlePropertyChange;

            vm.TagName = "Holiday";

            Assert.AreEqual(0, _changeCounter.NoOfPropertiesChanged);
            Assert.AreEqual(0, _changeCounter.TotalChangeCount);
            Assert.AreEqual(0, _changeCounter.ChangeCount("TagName"));

            _mocks.VerifyAllExpectationsHaveBeenMet();
        }
        public void attempting_to_change_AccountTagName_to_a_name_that_would_cause_a_duplicate_in_repository_do_not_call_repository()
        {
            var tag = new AccountTag(1, "Holiday");
            var vm = new AccountTagViewModel(tag, _mockAccountTagRepository);

            vm.PropertyChanged += (s, args) => _changeCounter.HandlePropertyChange(s, args);
            Expect.Once.On(_mockAccountTagRepository).Method("CouldSetAccountTagName").Will(Return.Value(false));

            vm.TagName = "Duplicate Name";

            Assert.AreEqual(1, _changeCounter.NoOfPropertiesChanged);
            Assert.AreEqual(1, _changeCounter.TotalChangeCount);
            Assert.AreEqual(1, _changeCounter.ChangeCount("TagName"));
            _mocks.VerifyAllExpectationsHaveBeenMet();
        }
        public void changing_AccountTagName_to_valid_name_causes_AccountTag_to_be_updated()
        {
            var tag = new AccountTag(1, "Holiday");
            var vm = new AccountTagViewModel(tag, _mockAccountTagRepository);

            vm.PropertyChanged += (s, args) => _changeCounter.HandlePropertyChange(s, args);
            Expect.Once.On(_mockAccountTagRepository).Method("CouldSetAccountTagName").Will(Return.Value(true));
            Expect.Once.On(_mockAccountTagRepository).Method("Save").With(tag);

            vm.TagName = "Holidays";

            Assert.AreEqual(1, _changeCounter.NoOfPropertiesChanged);
            Assert.AreEqual(1, _changeCounter.TotalChangeCount);
            Assert.AreEqual(1, _changeCounter.ChangeCount("TagName"));
            _mocks.VerifyAllExpectationsHaveBeenMet();
        }
        public AccountViewModel(Account account, IAccountRepository accountRepository, IAccountTagRepository accountTagRepository, IMainWindowViewModel mainWindow = null)
        {
            if (account == null) throw new ArgumentNullException("account");
            if (accountRepository == null) throw new ArgumentNullException("accountRepository");
            if (accountTagRepository == null) throw new ArgumentNullException("accountTagRepository");

            _mainWindow = mainWindow;
            _account = account;
            _accountName = account.Name;
            _accountRepository = accountRepository;
            _accountTagRepository = accountTagRepository;

            _allTransactions = new Collection<TransactionViewModel>();
            _visibleTransactions = new ObservableCollection<TransactionViewModel>();

            _accountTags = new ObservableCollection<AccountTagViewModel>();
            foreach (var tag in account.Tags)
            {
                var tagVM = new AccountTagViewModel(tag, _accountTagRepository);
                tagVM.RequestDelete += RemoveAccountTag;
                _accountTags.Add(tagVM);
            }
        }
        public void SetAccount(Account account)
        {
            if (account == null) throw new ArgumentNullException("account");
            _account = account;
            _accountName = account.Name;

            _accountTags = new ObservableCollection<AccountTagViewModel>();
            foreach (var tag in account.Tags)
            {
                var tagVM = new AccountTagViewModel(tag, _accountTagRepository);
                tagVM.RequestDelete += RemoveAccountTag;
                _accountTags.Add(tagVM);
            }
        }
        public void TagId_property_returns_tags_id()
        {
            var tag = new AccountTag(122, "Misc expenses");
            var vm = new AccountTagViewModel(tag, _mockAccountTagRepository);

            Assert.AreEqual(122, vm.TagId);
        }