private Entry GetEntry(DateTime date, decimal amount, Account account, EntryType entryType = EntryType.Debit)
        {
            var transaction = new IncomeTransaction { Date = date };
            var entry = new Entry { Amount = amount, Account = account, Transaction = transaction, Type = entryType };
            transaction.Entries.Add(entry);

            Repository.Save(transaction);

            return entry;
        }
Exemple #2
0
        public void Transaction_ShouldSetAndGet()
        {
            var transaction = new IncomeTransaction();
            var entry = new Entry();

            Assert.That(entry.Transaction, Is.Null);

            entry.Transaction = transaction;

            Assert.That(entry.Transaction, Is.EqualTo(transaction));
        }
        public void Date_ShouldSetAndGet()
        {
            var date = DateTime.Today.AddDays(1);
            var transaction = new IncomeTransaction();

            Assert.That(transaction.Date, Is.Not.EqualTo(date));

            transaction.Date = date;

            Assert.That(transaction.Date, Is.EqualTo(date));
        }
        public void Comments_ShouldSetAndGet()
        {
            const string comments = "something";
            var transaction = new IncomeTransaction();

            Assert.That(transaction.Comments, Is.Not.EqualTo(comments));

            transaction.Comments = comments;

            Assert.That(transaction.Comments, Is.EqualTo(comments));
        }
        public void Delete_ShouldDeleteTransactionFromRepository()
        {
            var id = Guid.NewGuid();
            var transaction = new IncomeTransaction();

            _repository.Stub(x => x.Find<Transaction>(id)).Return(transaction);
            _repository.Expect(x => x.Delete(transaction));

            var controller = GetController();
            controller.Delete(id);

            _repository.VerifyAllExpectations();
        }
        public void CanSaveAndGetEntries()
        {
            var transaction = new IncomeTransaction();
            transaction.Entries.Add(new Entry { Account = SaveAccount(new IncomeAccount()), Transaction = transaction });
            transaction.Entries.Add(new Entry { Account = SaveAccount(new AssetAccount()), Transaction = transaction });

            Repository.Save(transaction);

            var retrieved = Repository.Find<IncomeTransaction>(transaction.Id);

            Assert.That(retrieved, Is.Not.Null);
            Assert.That(retrieved.Entries.Count, Is.EqualTo(2));
            Assert.That(retrieved.Entries.SingleOrDefault(x => x.Id == transaction.Entries[0].Id), Is.Not.Null);
            Assert.That(retrieved.Entries.SingleOrDefault(x => x.Id == transaction.Entries[1].Id), Is.Not.Null);
        }
        public void CanSaveAndGet()
        {
            var transaction = new IncomeTransaction();
            transaction.Date = DateTime.Today;
            transaction.Comments = "some comment";

            Repository.Save(transaction);

            var retrieved = Repository.Find<IncomeTransaction>(transaction.Id);

            Assert.That(retrieved, Is.Not.Null);
            Assert.That(retrieved.Id, Is.EqualTo(transaction.Id));
            Assert.That(retrieved.Date, Is.EqualTo(transaction.Date));
            Assert.That(retrieved.Comments, Is.EqualTo(transaction.Comments));
        }
        public void Configure_ShouldSetPropertiesAsExpected()
        {
            const decimal amount = 100;
            var date = DateTime.Today.AddDays(1);
            const string comments = "something";
            var incomeAccount = new IncomeAccount();
            var assetAccount = new AssetAccount();

            var transaction = new IncomeTransaction();
            transaction.Configure(amount)
                    .ForDate(date)
                    .WithComments(comments)
                    .IncomeAccount(incomeAccount)
                    .AccountToDebit(assetAccount);

            Assert.That(transaction.Date, Is.EqualTo(date));
            Assert.That(transaction.Comments, Is.EqualTo(comments));
            Assert.That(transaction.Entries.Count, Is.EqualTo(2));
            Assert.That(transaction.Entries.Any(x => (x.Amount == amount) && (x.Type == EntryType.Credit) && (x.Account == incomeAccount)), Is.True);
            Assert.That(transaction.Entries.Any(x => (x.Amount == amount) && (x.Type == EntryType.Debit) && (x.Account == assetAccount)), Is.True);
        }
        public void Entries_ShouldByEmptyByDefault()
        {
            var transaction = new IncomeTransaction();

            Assert.That(transaction.Entries, Is.Empty);
        }
        public void Edit_ShouldSaveTransactionToRepository()
        {
            const decimal amount = 100;
            var date = DateTime.Today.AddDays(1);
            const string comments = "something";
            var incomeAccount = new IncomeAccount();
            var assetAccount = new AssetAccount();
            var IncomeTransaction = new IncomeTransaction();

            var model = new EditModel();
            model.Id = IncomeTransaction.Id;
            model.Amount = amount;
            model.Date = date;
            model.Comments = comments;
            model.SelectedIncomeAccountId = incomeAccount.Id;
            model.SelectedAssetAccountId = assetAccount.Id;

            _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction);
            _repository.Stub(x => x.Find<Account>(incomeAccount.Id)).Return(incomeAccount);
            _repository.Stub(x => x.Find<Account>(assetAccount.Id)).Return(assetAccount);
            _repository.Expect(x => x.Save(Arg<IncomeTransaction>.Matches(
                y =>
                    (y.Date == date) &&
                    (y.Comments == comments) &&
                    (y.Entries.Count == 2) &&
                    (y.Entries.Any(z => (z.Account.Id == incomeAccount.Id) && (z.Amount == amount) && (z.Type == EntryType.Credit))) &&
                    (y.Entries.Any(z => (z.Account.Id == assetAccount.Id) && (z.Amount == amount) && (z.Type == EntryType.Debit)))))).Return(null);

            var controller = GetController();
            controller.Edit(model);

            _repository.VerifyAllExpectations();
        }
        public void Edit_ShouldReturnViewWithModel()
        {
            var incomeAccount1 = new IncomeAccount();
            var incomeAccount2 = new IncomeAccount();
            var assetAccount1 = new AssetAccount();
            var assetAccount2 = new AssetAccount();
            var accounts = new Account[] { incomeAccount1, incomeAccount2, assetAccount1, assetAccount2 };

            const string comments = "something";
            const decimal amount = 100;
            var date = DateTime.Today.AddDays(1);

            var IncomeTransaction = new IncomeTransaction();
            IncomeTransaction.Configure(amount)
                .ForDate(date)
                .WithComments(comments)
                .IncomeAccount(incomeAccount2)
                .AccountToDebit(assetAccount2);

            _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction);
            _repository.Stub(x => x.Get<Account>()).Repeat.Times(2).Return(accounts);

            var controller = GetController();
            var result = (ViewResult)controller.Edit(IncomeTransaction.Id);

            Assert.That(result.ViewName, Is.EqualTo("Edit"));

            var viewModel = (EditModel)result.Model;
            Assert.That(viewModel.Id, Is.EqualTo(IncomeTransaction.Id));
            Assert.That(viewModel.IncomeAccounts.Count(), Is.EqualTo(2));
            Assert.That(viewModel.IncomeAccounts.Any(x => x.Id == incomeAccount1.Id), Is.True);
            Assert.That(viewModel.IncomeAccounts.Any(x => x.Id == incomeAccount2.Id), Is.True);
            Assert.That(viewModel.SelectedIncomeAccountId, Is.EqualTo(incomeAccount2.Id));
            Assert.That(viewModel.AssetAccounts.Count(), Is.EqualTo(2));
            Assert.That(viewModel.AssetAccounts.Any(x => x.Id == assetAccount1.Id), Is.True);
            Assert.That(viewModel.AssetAccounts.Any(x => x.Id == assetAccount2.Id), Is.True);
            Assert.That(viewModel.SelectedAssetAccountId, Is.EqualTo(assetAccount2.Id));
            Assert.That(viewModel.Date, Is.EqualTo(date));
            Assert.That(viewModel.Amount, Is.EqualTo(amount));
            Assert.That(viewModel.Comments, Is.EqualTo(comments));
        }
        public void Edit_ShouldReturnRedirectToIndex()
        {
            var IncomeTransaction = new IncomeTransaction();
            var model = new EditModel();
            model.Id = IncomeTransaction.Id;
            model.SelectedIncomeAccountId = Guid.NewGuid();
            model.SelectedAssetAccountId = Guid.NewGuid();

            _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction);
            _repository.Stub(x => x.Find<Account>(model.SelectedIncomeAccountId)).Return(new IncomeAccount());
            _repository.Stub(x => x.Find<Account>(model.SelectedAssetAccountId)).Return(new AssetAccount());

            var controller = GetController();
            var result = (RedirectToRouteResult)controller.Edit(model);

            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
            Assert.That(result.RouteValues["controller"], Is.EqualTo("Transaction"));
        }