コード例 #1
0
        public async Task SavingAndLoading_ShouldProduceTheSameCheckSum()
        {
            var subject1 = CreateSubject();

            await subject1.SaveAsync(LedgerBookTestData.TestData2(), "Foo2.xml", false);

            var serialisedData = subject1.SerialisedData;

            Debug.WriteLine("Saved / Serialised Xml:");
            Debug.WriteLine(serialisedData);

            LedgerBookDto bookDto;
            var           subject2 = CreateSubject();

            subject2.FileExistsOverride = f => true;
            subject2.LoadXamlFromDiskFromEmbeddedResources = false;
            this.mockReaderWriter.Setup(m => m.LoadFromDiskAsync(It.IsAny <string>())).ReturnsAsync(serialisedData);
            await subject2.LoadAsync("foo", false);

            bookDto = subject2.LedgerBookDto;

            int    checksumPosition   = serialisedData.IndexOf("CheckSum=\"", StringComparison.OrdinalIgnoreCase);
            int    checksumLength     = serialisedData.IndexOf('"', checksumPosition + 11) - checksumPosition;
            string serialisedCheckSum = serialisedData.Substring(checksumPosition + 10, checksumLength - 10);

            Assert.AreEqual(double.Parse(serialisedCheckSum), bookDto.Checksum);
        }
コード例 #2
0
        public void TestIntialise()
        {
            this.mockRuleService = new Mock <ITransactionRuleService>(MockBehavior.Strict);
            this.mockReconciliationConsistency = new Mock <IReconciliationConsistency>();
            this.bucketRepo            = new BucketBucketRepoAlwaysFind();
            this.testDataBudgets       = BudgetModelTestData.CreateCollectionWith1And2();
            this.testDataBudgetContext = new BudgetCurrencyContext(this.testDataBudgets, this.testDataBudgets.CurrentActiveBudget);
            this.testDataStatement     = new StatementModelBuilder()
                                         .TestData5()
                                         .AppendTransaction(new Transaction
            {
                Account         = StatementModelTestData.ChequeAccount,
                Amount          = -23.56M,
                BudgetBucket    = StatementModelTestData.RegoBucket,
                Date            = ReconcileDate.Date.AddDays(-1),
                TransactionType = new NamedTransaction("Foo"),
                Description     = "Last transaction"
            })
                                         .Build();
            this.testDataToDoList = new List <ToDoTask>();
            this.subject          = new ReconciliationCreationManager(this.mockRuleService.Object, this.mockReconciliationConsistency.Object, new FakeLogger());

            this.testDataLedgerBook = LedgerBookTestData.TestData5(() => new LedgerBookTestHarness(new Mock <IReconciliationBuilder>().Object));

            this.mockReconciliationConsistency.Setup(m => m.EnsureConsistency(It.IsAny <LedgerBook>())).Returns(new Mock <IDisposable>().Object);
        }
コード例 #3
0
        public async Task Load_ShouldCreateBookWithSameName()
        {
            XamlOnDiskLedgerBookRepository subject = CreateSubject();
            var book = await subject.LoadAsync(LoadFileName, false);

            var testData2 = LedgerBookTestData.TestData2();

            Assert.AreEqual(testData2.Name, book.Name);
        }
コード例 #4
0
        public async Task Load_ShouldCreateBookWithSameNumberOfReconciliations()
        {
            XamlOnDiskLedgerBookRepository subject = CreateSubject();
            var book = await subject.LoadAsync(LoadFileName, false);

            var testData2 = LedgerBookTestData.TestData2();

            Assert.AreEqual(testData2.Reconciliations.Count(), book.Reconciliations.Count());
        }
コード例 #5
0
        public void TestInitialise()
        {
            Subject        = new BurnDownChartAnalyser(new LedgerCalculation(), new FakeLogger());
            Budget         = BudgetModelTestData.CreateTestData2();
            LedgerBook     = LedgerBookTestData.TestData2();
            StatementModel = StatementModelTestData.TestData3();

            Act();
        }
コード例 #6
0
        public async Task Load_Output()
        {
            XamlOnDiskLedgerBookRepository subject = CreateSubject();
            var book = await subject.LoadAsync(LoadFileName, false);

            // Visual compare these two - should be the same
            LedgerBookTestData.TestData2().Output();

            book.Output();
        }
コード例 #7
0
        public async Task Load_ShouldCreateBookWithFirstLineEqualBankBalances()
        {
            XamlOnDiskLedgerBookRepository subject = CreateSubject();
            var book = await subject.LoadAsync(LoadFileName, false);

            var testData2 = LedgerBookTestData.TestData2();
            var line      = book.Reconciliations.First();

            Assert.AreEqual(testData2.Reconciliations.First().TotalBankBalance, line.TotalBankBalance);
        }
コード例 #8
0
        public async Task Save_ShouldSaveTheXmlFile()
        {
            var fileName = @"CompleteSmellyFoo.xml";

            XamlOnDiskLedgerBookRepository subject = CreateSubject();

            var testData = LedgerBookTestData.TestData2();
            await subject.SaveAsync(testData, fileName, false);

            this.mockReaderWriter.Verify(m => m.WriteToDiskAsync(It.IsAny <string>(), It.IsAny <string>()));
        }
コード例 #9
0
        public void TestInitialise()
        {
            var accountRepo = new InMemoryAccountTypeRepository();
            var subject     = new Mapper_LedgerEntryDto_LedgerEntry(new LedgerBucketFactory(new BucketBucketRepoAlwaysFind(), accountRepo), new LedgerTransactionFactory(), accountRepo);

            Result = subject.ToModel(TestData);

            LedgerBook book = LedgerBookTestData.TestData2();

            Control = book.Reconciliations.First(l => l.Date == new DateTime(2013, 08, 15)).Entries.First(e => e.LedgerBucket.BudgetBucket.Code == TestDataConstants.PowerBucketCode);
        }
コード例 #10
0
        public async Task SerialiseTestData2ToEnsureItMatches_Load_ShouldLoadTheXmlFile_xml()
        {
            var subject = CreateSubject();

            await subject.SaveAsync(LedgerBookTestData.TestData2(), "Leonard Nimoy.xml", false);

            var serialisedData = subject.SerialisedData;

            Console.WriteLine(serialisedData);

            Assert.IsTrue(serialisedData.Length > 100);
        }
コード例 #11
0
        public async Task SaveAsync_ShouldHaveACheckSumOf8435_GivenLedgerBookTestData2()
        {
            var subject = CreateSubject();

            await subject.SaveAsync(LedgerBookTestData.TestData2(), "Foo.xml", false);

            var    serialisedData     = subject.SerialisedData;
            int    checksumPosition   = serialisedData.IndexOf("CheckSum=\"", StringComparison.OrdinalIgnoreCase);
            int    checksumLength     = serialisedData.IndexOf('"', checksumPosition + 11) - checksumPosition;
            string serialisedCheckSum = serialisedData.Substring(checksumPosition + 10, checksumLength - 10);

            Assert.AreEqual(8435.06, double.Parse(serialisedCheckSum));
        }
コード例 #12
0
        public async Task Load_ShouldCreateBookWithFirstLineEqualSurplus()
        {
            XamlOnDiskLedgerBookRepository subject = CreateSubject();
            var book = await subject.LoadAsync(LoadFileName, false);

            book.Output();

            var testData2 = LedgerBookTestData.TestData2();

            testData2.Output();

            var line = book.Reconciliations.First();

            Assert.AreEqual(testData2.Reconciliations.First().CalculatedSurplus, line.CalculatedSurplus);
        }
コード例 #13
0
        public void TestIntialise()
        {
            this.mockBucketRepo  = new Mock <IBudgetBucketRepository>();
            this.mockRuleService = new Mock <ITransactionRuleService>();
            this.mockReconciliationConsistency = new Mock <IReconciliationConsistency>();
            this.subject = new ReconciliationCreationManager(this.mockRuleService.Object, this.mockReconciliationConsistency.Object, new FakeLogger());

            this.testDataLedgerBook = LedgerBookTestData.TestData5(() => new LedgerBookTestHarness(new Mock <IReconciliationBuilder>().Object));
            this.testDataEntryLine  = this.testDataLedgerBook.Reconciliations.First();
            this.testDataEntryLine.Unlock();

            this.surplusChqLedger = new SurplusLedger {
                StoredInAccount = StatementModelTestData.ChequeAccount
            };
            this.insHomeSavLedger = this.testDataLedgerBook.Ledgers.Single(l => l.BudgetBucket == StatementModelTestData.InsHomeBucket);
            this.phNetChqLedger   = this.testDataLedgerBook.Ledgers.Single(l => l.BudgetBucket == StatementModelTestData.PhoneBucket);
        }
コード例 #14
0
        private void ActOnTestData5(StatementModel statementModelTestData = null)
        {
            this.subject           = LedgerBookTestData.TestData5();
            this.testDataBudget    = BudgetModelTestData.CreateTestData5();
            this.testDataStatement = statementModelTestData ?? StatementModelTestData.TestData5();

            Console.WriteLine("********************** BEFORE RUNNING RECONCILIATION *******************************");
            this.testDataStatement.Output(ReconcileDate.AddMonths(-1));
            this.subject.Output(true);

            var result = Act(bankBalances: new[] { new BankBalance(StatementModelTestData.ChequeAccount, 1850.5M), new BankBalance(StatementModelTestData.SavingsAccount, 1200M) });

            this.testDataToDoList = result.Tasks.ToList();

            Console.WriteLine();
            Console.WriteLine("********************** AFTER RUNNING RECONCILIATION *******************************");
            this.subject.Output(true);
        }
コード例 #15
0
        public void Reconcile_WithPaymentFromWrongAccountShouldUpdateLedgerBalance_GivenTestData5()
        {
            this.testDataBudget = BudgetModelTestData.CreateTestData5();
            this.subject        = LedgerBookTestData.TestData5();
            var testTransaction = this.testDataStatement.AllTransactions.Last();

            testTransaction.BudgetBucket = LedgerBookTestData.HouseInsLedgerSavingsAccount.BudgetBucket;
            testTransaction.Account      = StatementModelTestData.ChequeAccount;
            testTransaction.Amount       = -1250;
            this.testDataStatement.Output(DateTime.MinValue);
            this.subject.Output();

            var reconResult = Act(bankBalances: new[] { new BankBalance(StatementModelTestData.ChequeAccount, 1850.5M), new BankBalance(StatementModelTestData.SavingsAccount, 1000M) });

            this.subject.Output(true);

            Assert.AreEqual(300M, reconResult.Reconciliation.Entries.Single(e => e.LedgerBucket == LedgerBookTestData.HouseInsLedgerSavingsAccount).Balance);
        }
コード例 #16
0
        private void ActOnTestData5(StatementModel statementModelTestData = null, bool ignoreWarnings = false)
        {
            this.testDataLedgerBook    = LedgerBookTestData.TestData5(() => new LedgerBookTestHarness(new Mock <IReconciliationBuilder>().Object));
            this.testDataBudgets       = new BudgetCollection(new[] { BudgetModelTestData.CreateTestData5() });
            this.testDataBudgetContext = new BudgetCurrencyContext(this.testDataBudgets, this.testDataBudgets.CurrentActiveBudget);
            this.testDataStatement     = statementModelTestData ?? StatementModelTestData.TestData5();

            Console.WriteLine("********************** BEFORE RUNNING RECONCILIATION *******************************");
            this.testDataStatement.Output(ReconcileDate.AddMonths(-1));
            this.testDataLedgerBook.Output(true);

            Act(bankBalances: new[] { new BankBalance(StatementModelTestData.ChequeAccount, 1850.5M), new BankBalance(StatementModelTestData.SavingsAccount, 1200M) },
                ignoreWarnings: ignoreWarnings);

            Console.WriteLine();
            Console.WriteLine("********************** AFTER RUNNING RECONCILIATION *******************************");
            this.testDataLedgerBook.Output(true);
        }
コード例 #17
0
        public void Reconcile_WithPaymentFromWrongAccountShouldCreateBalanceAdjustment_GivenTestData5()
        {
            this.testDataBudget.Output();
            this.subject = LedgerBookTestData.TestData5();
            var testTransaction = this.testDataStatement.AllTransactions.Last();

            testTransaction.BudgetBucket = LedgerBookTestData.HouseInsLedgerSavingsAccount.BudgetBucket;
            testTransaction.Account      = StatementModelTestData.ChequeAccount;
            this.testDataStatement.Output(DateTime.MinValue);
            this.subject.Output();

            var reconResult = Act(bankBalances: new[] { new BankBalance(StatementModelTestData.ChequeAccount, 1850.5M), new BankBalance(StatementModelTestData.SavingsAccount, 1000M) });

            this.subject.Output(true);

            var savingsBal = reconResult.Reconciliation.BankBalances.Single(b => b.Account == LedgerBookTestData.SavingsAccount).Balance
                             + reconResult.Reconciliation.BankBalanceAdjustments.Where(b => b.BankAccount == LedgerBookTestData.SavingsAccount).Sum(b => b.Amount);
            var chqBal = reconResult.Reconciliation.BankBalances.Single(b => b.Account == LedgerBookTestData.ChequeAccount).Balance
                         + reconResult.Reconciliation.BankBalanceAdjustments.Where(b => b.BankAccount == LedgerBookTestData.ChequeAccount).Sum(b => b.Amount);

            Assert.AreEqual(650M, savingsBal, "Savings should be decreased because savings still has the funds and needs to payback the Cheque account.");
            Assert.AreEqual(2200.50M, chqBal, "Chq should be increased after it has been paid back from savings.");
            Assert.AreEqual(0M, reconResult.Reconciliation.TotalBalanceAdjustments);
        }
コード例 #18
0
 public void TestInitialise()
 {
     this.testDataBudget    = BudgetModelTestData.CreateTestData1();
     this.testDataStatement = StatementModelTestData.TestData1();
     this.subject           = LedgerBookTestData.TestData1();
 }
コード例 #19
0
 private LedgerBook ArrangeAndAct()
 {
     return(LedgerBookTestData.TestData1());
 }
コード例 #20
0
 private LedgerEntryLine CreateSubject()
 {
     return(LedgerBookTestData.TestData5().Reconciliations.First());
 }
コード例 #21
0
        public void UsingTestData2_Output()
        {
            var book = LedgerBookTestData.TestData2();

            book.Output();
        }
コード例 #22
0
 public void TestInitialise()
 {
     TestData = LedgerBookTestData.TestData2();
 }
コード例 #23
0
 public void TestInitialise()
 {
     Subject  = new LedgerCalculation();
     TestData = LedgerBookTestData.TestData1();
 }
コード例 #24
0
 public void OutputTestData5()
 {
     LedgerBookTestData.TestData5().Output(true);
 }