public void Will_populate_actual_bank_record_cells()
        {
            // Arrange
            var actual_bank_record = new ActualBankRecord
            {
                Date                  = new DateTime(year: 2018, month: 7, day: 1),
                Type                  = "Chq",
                Description           = "New description which will overwrite what's normally there.",
                Amount                = 6666.66,
                LastTransactionMarker = ReconConsts.LastOnlineTransaction + "x"
            };
            var cells           = _spreadsheet.Current_cells(TestSheetNames.Bank);
            var last_row_number = _spreadsheet.Last_row_number(TestSheetNames.Bank);
            var previous_record = new ActualBankRecord();

            previous_record.Read_from_spreadsheet_row(_spreadsheet.Read_last_row(TestSheetNames.Bank));

            // Act
            actual_bank_record.Populate_spreadsheet_row(cells, last_row_number);
            var new_row = _spreadsheet.Read_last_row(TestSheetNames.Bank);

            // Assert
            Assert.AreEqual(actual_bank_record.LastTransactionMarker, (String)new_row.Read_cell(ActualBankRecord.LastTransactionMarkerSpreadsheetIndex));
            Assert.AreEqual(actual_bank_record.Date, DateTime.FromOADate((double)new_row.Read_cell(ActualBankRecord.DateSpreadsheetIndex)));
            Assert.AreEqual(actual_bank_record.Type, (String)new_row.Read_cell(ActualBankRecord.TypeSpreadsheetIndex));
            Assert.AreEqual(actual_bank_record.Description, (String)new_row.Read_cell(ActualBankRecord.DescriptionSpreadsheetIndex));
            Assert.AreEqual(actual_bank_record.Amount, (Double)new_row.Read_cell(ActualBankRecord.AmountSpreadsheetIndex));

            // Clean up
            previous_record.Populate_spreadsheet_row(cells, last_row_number);
        }
        public void Will_create_new_expenses_record_to_match_balance()
        {
            // Arrange
            var income_file_io = new Mock <IFileIO <ExpectedIncomeRecord> >();
            var income_records = new List <ExpectedIncomeRecord>();

            income_file_io.Setup(x => x.Load(It.IsAny <List <string> >(), null)).Returns(income_records);
            var income_file = new CSVFile <ExpectedIncomeRecord>(income_file_io.Object);

            income_file.Load();
            var expected_income_file = new ExpectedIncomeFile(income_file);
            var actual_bank_record   = new ActualBankRecord
            {
                Date   = DateTime.Today,
                Amount = 50
            };
            double balance = actual_bank_record.Amount - 10;

            // Act
            expected_income_file.Create_new_expenses_record_to_match_balance(actual_bank_record, balance);

            // Assert
            Assert.AreEqual(1, expected_income_file.File.Records.Count);
            Assert.AreEqual(ReconConsts.UnknownExpense, expected_income_file.File.Records[0].Description);
            Assert.AreEqual(balance, expected_income_file.File.Records[0].Unreconciled_amount);
            Assert.AreEqual(actual_bank_record, expected_income_file.File.Records[0].Match);
            Assert.AreEqual(true, expected_income_file.File.Records[0].Matched);
            Assert.AreEqual(actual_bank_record.Date, expected_income_file.File.Records[0].Date);
            Assert.AreEqual(actual_bank_record.Date, expected_income_file.File.Records[0].Date_paid);
            Assert.AreEqual(actual_bank_record.Amount, expected_income_file.File.Records[0].Total_paid);
            Assert.AreEqual(Codes.Expenses, expected_income_file.File.Records[0].Code);
        }
        public void M_WhenReconcilingExpenses_WillNotMatchOnASingleDifferentAmount()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var expense_amount = 10.00;
            List <BankRecord> expected_in_rows = new List <BankRecord> {
                new BankRecord {
                    Unreconciled_amount = expense_amount
                }
            };
            var bank_in_file_io = new Mock <IFileIO <BankRecord> >();

            bank_in_file_io.Setup(x => x.Load(It.IsAny <List <string> >(), null)).Returns(expected_in_rows);
            var bank_in_file = new CSVFile <BankRecord>(bank_in_file_io.Object);

            bank_in_file.Load();
            ActualBankRecord expense_transaction = new ActualBankRecord {
                Amount = expense_amount - 1
            };
            var matcher = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);

            // Act
            var result = matcher.Standby_find_expense_matches(expense_transaction, bank_in_file).ToList();

            // Assert
            Assert.AreEqual(0, result.Count);
        }
        public void When_copying_cred_card2_record_will_create_new_object()
        {
            // Arrange
            var original_date        = DateTime.Today;
            var original_amount      = 12.34;
            var original_description = "Description";
            var original_type        = "Type";
            var actual_bank_record   = new ActualBankRecord
            {
                Date        = original_date,
                Amount      = original_amount,
                Description = original_description,
                Type        = original_type
            };

            actual_bank_record.Update_source_line_for_output(',');
            var original_source_line = actual_bank_record.Source_line;

            // Act
            var copied_record = (ActualBankRecord)actual_bank_record.Copy();

            copied_record.Date        = copied_record.Date.AddDays(1);
            copied_record.Amount      = copied_record.Amount + 1;
            copied_record.Description = copied_record.Description + "something else";
            copied_record.Type        = copied_record.Type + "something else";
            copied_record.Update_source_line_for_output(',');

            // Assert
            Assert.AreEqual(original_date, actual_bank_record.Date);
            Assert.AreEqual(original_amount, actual_bank_record.Amount);
            Assert.AreEqual(original_description, actual_bank_record.Description);
            Assert.AreEqual(original_type, actual_bank_record.Type);
            Assert.AreEqual(original_source_line, actual_bank_record.Source_line);
        }
예제 #5
0
 private void Match_records(ActualBankRecord source, BankRecord match)
 {
     match.Matched  = true;
     source.Matched = true;
     match.Match    = source;
     source.Match   = match;
 }
예제 #6
0
        public IEnumerable <IPotentialMatch> Find_expense_matches(ActualBankRecord source_record, ICSVFile <BankRecord> owned_file)
        {
            var generic_matcher = new MultipleAmountMatcher <ActualBankRecord, BankRecord>();

            generic_matcher.DateTolerance = 200;
            return(generic_matcher.Find_matches(source_record, owned_file));
        }
        public void M_WhenMatchingSpecifiedRecords_AndMultipleMatchesExist_WillRemoveOriginalMatchesFromOwnedFile()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var matcher       = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);
            var source_record = new ActualBankRecord
            {
                Date    = DateTime.Today,
                Amount  = 34.56,
                Match   = null,
                Matched = false
            };
            var bank_records = new List <BankRecord>
            {
                new BankRecord {
                    Description = "Match 01", Unreconciled_amount = 20.22, Type = "Type"
                },
                new BankRecord {
                    Description = "Match 02", Unreconciled_amount = 30.33
                },
                new BankRecord {
                    Description = "Match 02", Unreconciled_amount = 40.44
                }
            };
            var mock_bank_in_file_io = new Mock <IFileIO <BankRecord> >();

            mock_bank_in_file_io.Setup(x => x.Load(It.IsAny <List <string> >(), null)).Returns(bank_records);
            var bank_in_file = new CSVFile <BankRecord>(mock_bank_in_file_io.Object);

            bank_in_file.Load();
            var potential_matches = new List <IPotentialMatch> {
                new PotentialMatch {
                    Actual_records = new List <ICSVRecord>()
                }
            };

            potential_matches[0].Actual_records.Add(bank_records[0]);
            potential_matches[0].Actual_records.Add(bank_records[1]);
            potential_matches[0].Actual_records.Add(bank_records[2]);
            var index = 0;
            var record_for_matching = new RecordForMatching <ActualBankRecord>(source_record, potential_matches);

            foreach (var bank_record in bank_records)
            {
                Assert.IsTrue(bank_in_file.Records.Contains(bank_record));
            }

            // Act
            matcher.Match_specified_records(record_for_matching, index, bank_in_file);

            // Assert
            foreach (var bank_record in bank_records)
            {
                Assert.IsFalse(bank_in_file.Records.Contains(bank_record));
            }
        }
        public void Can_cope_with_empty_balance()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            string csv_line           = String.Format("06/03/2017,BAC,\"'99999999-BFGH\",261.40,,\"'Envelope\",\"'228822-99933422\",");

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(0, actual_bank_record.Balance);
        }
        private IEnumerable <IPotentialMatch> Debug_find_expense_matches(ActualBankRecord source_record, ICSVFile <BankRecord> owned_file)
        {
            var result = new List <IPotentialMatch>();
            var random_number_generator = new Random();

            Add_set_of_overlapping_matches(random_number_generator, owned_file, result, 3);
            Add_set_of_overlapping_matches(random_number_generator, owned_file, result, 2);
            Add_set_of_overlapping_matches(random_number_generator, owned_file, result, 2);
            Add_set_of_overlapping_matches(random_number_generator, owned_file, result, 3);

            return(result);
        }
        public void Should_be_able_to_cope_with_empty_input()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            string csv_line           = String.Empty;

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(0, actual_bank_record.Amount);
        }
        public void Can_cope_with_empty_description()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            string csv_line           = String.Format("06/03/2017,BAC,,261.40,4273.63,\"'Envelope\",\"'228822-99933422\",");

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual("", actual_bank_record.Description);
        }
        public void Can_cope_with_empty_date()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    expected_date      = new DateTime(9999, 9, 9);
            string csv_line           = String.Format(",BAC,\"'99999999-BFGH\",261.40,4273.63,\"'Envelope\",\"'228822-99933422\",");

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(expected_date, actual_bank_record.Date);
        }
        public void Can_cope_with_bad_amount()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    bad_amount         = "not an amount";
            string csv_line           = String.Format("06/03/2017,BAC,\"'99999999-BFGH\",{0},4273.63,\"'Envelope\",\"'228822-99933422\",", bad_amount);

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(0, actual_bank_record.Amount);
        }
        public void Commas_in_input_are_replaced_by_semi_colons()
        {
            // Arrange
            var    actual_bank_record     = new ActualBankRecord();
            string text_containing_commas = "\"something, something, something else\"";
            string csv_line = String.Format("06/03/2017,BAC,{0},261.40,12.35,\"'Envelope\",\"'228822-99933422\",", text_containing_commas);

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual("\"something; something; something else\"", actual_bank_record.Description);
        }
        public void Can_read_balance_from_csv_without_pound_sign()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    expected_amount    = 4273.63;
            string csv_line           = String.Format("06/03/2017,BAC,\"'99999999-BFGH\",261.40,{0},\"'Envelope\",\"'228822-99933422\",", expected_amount);

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(expected_amount, actual_bank_record.Balance);
        }
        public void Can_read_description_from_csv()
        {
            // Arrange
            var    actual_bank_record   = new ActualBankRecord();
            var    expected_description = "\"'99999999-BFGH\"";
            string csv_line             = String.Format("06/03/2017,BAC,{0},261.40,4273.63,\"'Envelope\",\"'228822-99933422\",", expected_description);

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(expected_description, actual_bank_record.Description);
        }
        public void Can_cope_with_input_containing_commas_preceded_by_spaces()
        {
            // Arrange
            var    actual_bank_record     = new ActualBankRecord();
            double expected_balance       = 12.35;
            string text_containing_commas = "\"'0363 23MAR17 C ,TFL.GOV.UK/CP ,TFL TRAVEL CH GB\"";
            string csv_line = String.Format("06/03/2017,BAC,{0},261.40,{1},\"'Envelope\",\"'228822-99933422\",", text_containing_commas, expected_balance);

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(expected_balance, actual_bank_record.Balance);
        }
        public void M_WhenMatchingSpecifiedRecords_WillUpdateExpectedIncomeRecordForEachOriginalMatch()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var mock_owned_file = new Mock <ICSVFile <BankRecord> >();

            mock_owned_file.Setup(x => x.Records).Returns(new List <BankRecord>());
            var matcher       = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);
            var desc0         = "Source 01";
            var source_record = new ActualBankRecord
            {
                Date = DateTime.Today.AddDays(10), Amount = 40.44, Description = desc0
            };
            var desc1             = "Match 01";
            var desc2             = "Match 02";
            var amount1           = 20.22;
            var amount2           = 30.33;
            var date1             = DateTime.Today;
            var date2             = DateTime.Today.AddDays(1);
            var potential_matches = new List <IPotentialMatch>
            {
                new PotentialMatch
                {
                    Actual_records = new List <ICSVRecord>
                    {
                        new BankRecord {
                            Description = desc1, Unreconciled_amount = amount1, Date = date1
                        },
                        new BankRecord {
                            Description = desc2, Unreconciled_amount = amount2, Date = date2
                        }
                    }
                }
            };
            var index = 0;
            var record_for_matching = new RecordForMatching <ActualBankRecord>(source_record, potential_matches);

            Assert.AreEqual(0, matcher.MatchedExpectedIncomeRecords.Count);

            // Act
            matcher.Match_specified_records(record_for_matching, index, mock_owned_file.Object);

            // Assert
            mock_bank_and_bank_in_loader.Verify(x => x.Update_expected_income_record_when_matched(
                                                    It.Is <ICSVRecord>(y => y.Description == desc0),
                                                    It.Is <ICSVRecord>(y => y.Description == desc1)));
            mock_bank_and_bank_in_loader.Verify(x => x.Update_expected_income_record_when_matched(
                                                    It.Is <ICSVRecord>(y => y.Description == desc0),
                                                    It.Is <ICSVRecord>(y => y.Description == desc2)));
        }
        public void Can_read_date_from_csv()
        {
            // Arrange
            var    actual_bank_record      = new ActualBankRecord();
            string expected_date_as_string = "06/03/2017";
            string csv_line      = string.Format("{0},BAC,\"'99999999-BFGH\",261.40,4273.63,\"'Envelope\",\"'228822-99933422\",", expected_date_as_string);
            var    expected_date = Convert.ToDateTime(expected_date_as_string, StringHelper.Culture());

            // Act
            actual_bank_record.Load(csv_line);

            // Assert
            Assert.AreEqual(expected_date, actual_bank_record.Date);
        }
        public void M_WhenMatchingSpecifiedRecords_WillMatchRecordWithSpecifiedIndex()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var mock_owned_file = new Mock <ICSVFile <BankRecord> >();

            mock_owned_file.Setup(x => x.Records).Returns(new List <BankRecord>());
            var matcher       = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);
            var source_record = new ActualBankRecord
            {
                Amount  = 34.56,
                Match   = null,
                Matched = false
            };
            var potential_matches = new List <IPotentialMatch>
            {
                new PotentialMatch {
                    Actual_records = new List <ICSVRecord> {
                        new BankRecord {
                            Matched = false
                        }
                    }
                },
                new PotentialMatch {
                    Actual_records = new List <ICSVRecord> {
                        new BankRecord {
                            Matched = false
                        }
                    }
                },
                new PotentialMatch {
                    Actual_records = new List <ICSVRecord> {
                        new BankRecord {
                            Matched = false
                        }
                    }
                }
            };
            var record_for_matching = new RecordForMatching <ActualBankRecord>(source_record, potential_matches);
            var index = 1;

            // Act
            matcher.Match_specified_records(record_for_matching, index, mock_owned_file.Object);

            // Assert
            Assert.AreEqual(false, record_for_matching.Matches[0].Actual_records[0].Matched, "first record not matched");
            Assert.AreEqual(true, record_for_matching.Matches[1].Actual_records[0].Matched, "second record matched");
            Assert.AreEqual(false, record_for_matching.Matches[2].Actual_records[0].Matched, "third record not matched");
        }
        public void Csv_is_constructed_correctly()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            string csv_line           = String.Format("06/03/2017,BAC,\"'Some , description\",127.69,261.40,\"'Envelope\",\"'228822-99933422\",");

            actual_bank_record.Load(csv_line);
            actual_bank_record.Matched = false;

            // Act
            string constructed_csv_line = actual_bank_record.To_csv();

            // Assert
            Assert.AreEqual("06/03/2017,£127.69,BAC,\"'Some ; description\"", constructed_csv_line);
        }
        public void Can_make_main_amount_positive()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    negative_amount    = -23.23;
            string csv_line           = String.Format("06/03/2017,BAC,\"'0363 23MAR17 C , TFL.GOV.UK/CP , TFL TRAVEL CH GB\",{0},261.40,\"'Envelope\",\"'228822-99933422\",", negative_amount);

            actual_bank_record.Load(csv_line);

            // Act
            actual_bank_record.Make_main_amount_positive();

            // Assert
            Assert.AreEqual(negative_amount * -1, actual_bank_record.Amount);
        }
        public void If_main_amount_already_positive_then_making_it_positive_has_no_effect()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    positive_amount    = 23.23;
            string csv_line           = String.Format("06/03/2017,BAC,\"'0363 23MAR17 C , TFL.GOV.UK/CP , TFL TRAVEL CH GB\",{0},261.40,\"'Envelope\",\"'228822-99933422\",", positive_amount);

            actual_bank_record.Load(csv_line);

            // Act
            actual_bank_record.Make_main_amount_positive();

            // Assert
            Assert.AreEqual(positive_amount, actual_bank_record.Amount);
        }
예제 #24
0
        public void Will_update_expected_income_record_when_matched()
        {
            // Arrange
            var match_desc     = "matchDesc";
            var match_date     = DateTime.Today.AddDays(2);
            var match_amount   = 22.22;
            var source_date    = DateTime.Today;
            var source_amount  = 22.22;
            var income_file_io = new Mock <IFileIO <ExpectedIncomeRecord> >();
            var income_records = new List <ExpectedIncomeRecord>
            {
                new ExpectedIncomeRecord
                {
                    Description         = match_desc,
                    Date                = match_date,
                    Unreconciled_amount = match_amount
                }
            };

            income_file_io.Setup(x => x.Load(It.IsAny <List <string> >(), null)).Returns(income_records);
            var income_file = new CSVFile <ExpectedIncomeRecord>(income_file_io.Object);

            income_file.Load();
            var expected_income_file = new ExpectedIncomeFile(income_file);
            var actual_bank_record   = new ActualBankRecord
            {
                Date   = source_date,
                Amount = source_amount
            };
            var bank_record = new BankRecord
            {
                Description         = match_desc,
                Date                = match_date,
                Unreconciled_amount = match_amount
            };

            // Act
            expected_income_file.Update_expected_income_record_when_matched(actual_bank_record, bank_record);

            // Assert
            Assert.AreEqual(match_desc, income_records[0].Description);
            Assert.AreEqual(match_amount, income_records[0].Unreconciled_amount);
            Assert.AreEqual(actual_bank_record, income_records[0].Match);
            Assert.AreEqual(true, income_records[0].Matched);
            Assert.AreEqual(match_date, income_records[0].Date);
            Assert.AreEqual(source_date, income_records[0].Date_paid);
            Assert.AreEqual(source_amount, income_records[0].Total_paid);
        }
        public void Amounts_should_be_written_using_pound_signs()
        {
            // Arrange
            var    actual_bank_record     = new ActualBankRecord();
            var    amount                 = "123.55";
            var    amount_with_pound_sign = "£" + amount;
            string csv_line               = String.Format("06/03/2017,BAC,\"description\",{0},261.40,\"'Envelope\",\"'228822-99933422\",", amount);

            actual_bank_record.Load(csv_line);

            // Act
            string constructed_csv_line = actual_bank_record.To_csv();

            // Assert
            string expected_csv_line = String.Format("06/03/2017,{0},BAC,\"description\"", amount_with_pound_sign);

            Assert.AreEqual(expected_csv_line, constructed_csv_line);
        }
        public void Amounts_containing_commas_should_be_encased_in_quotes()
        {
            // Arrange
            var    actual_bank_record      = new ActualBankRecord();
            var    amount                  = 1234.55;
            var    amount_containing_comma = "£1,234.55";
            string csv_line                = String.Format("06/03/2017,BAC,\"description\",{0},261.40,\"'Envelope\",\"'228822-99933422\",", amount);

            actual_bank_record.Load(csv_line);

            // Act
            string constructed_csv_line = actual_bank_record.To_csv();

            // Assert
            string expected_csv_line = String.Format("06/03/2017,\"{0}\",BAC,\"description\"", amount_containing_comma);

            Assert.AreEqual(expected_csv_line, constructed_csv_line);
        }
        public void If_input_is_encased_in_quotes_then_output_only_has_one_encasing_set_of_quotes()
        {
            // Arrange
            var    actual_bank_record = new ActualBankRecord();
            var    description_encased_in_one_set_of_quotes = "\"'Some description\"";
            string csv_line = String.Format("06/03/2017,BAC,{0},127.69,261.40,\"'Envelope\",\"'228822-99933422\",", description_encased_in_one_set_of_quotes);

            actual_bank_record.Load(csv_line);
            actual_bank_record.Matched = false;

            // Act
            string constructed_csv_line = actual_bank_record.To_csv();

            // Assert
            var expected_csv_line = String.Format("06/03/2017,£127.69,BAC,{0}", description_encased_in_one_set_of_quotes);

            Assert.AreEqual(expected_csv_line, constructed_csv_line);
        }
        public void M_WhenMatchingSpecifiedRecords_AndMultipleMatchesExist_WillCreateNewRecordWithAllAmountsAddedTogether()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var mock_owned_file = new Mock <ICSVFile <BankRecord> >();

            mock_owned_file.Setup(x => x.Records).Returns(new List <BankRecord>());
            var matcher       = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);
            var source_record = new ActualBankRecord
            {
                Date    = DateTime.Today,
                Amount  = 34.56,
                Match   = null,
                Matched = false
            };
            var potential_matches = new List <IPotentialMatch>
            {
                new PotentialMatch
                {
                    Actual_records = new List <ICSVRecord>
                    {
                        new BankRecord {
                            Description = "Match 01", Unreconciled_amount = 20.22
                        },
                        new BankRecord {
                            Description = "Match 02", Unreconciled_amount = 30.33
                        },
                        new BankRecord {
                            Description = "Match 02", Unreconciled_amount = 40.44
                        }
                    }
                }
            };
            var index               = 0;
            var matches             = potential_matches[index].Actual_records;
            var expected_amount     = matches[0].Main_amount() + matches[1].Main_amount() + matches[2].Main_amount();
            var record_for_matching = new RecordForMatching <ActualBankRecord>(source_record, potential_matches);

            // Act
            matcher.Match_specified_records(record_for_matching, index, mock_owned_file.Object);

            // Assert
            Assert.AreEqual(expected_amount, record_for_matching.Matches[index].Actual_records[0].Main_amount());
        }
        public void M_WhenMatchingSpecifiedRecords_SourceAndMatchWillHaveMatchPropertiesPointingAtEachOther()
        {
            // Arrange
            var mock_bank_and_bank_in_loader = new Mock <IBankAndBankInLoader>();
            var mock_owned_file = new Mock <ICSVFile <BankRecord> >();

            mock_owned_file.Setup(x => x.Records).Returns(new List <BankRecord>());
            var matcher       = new BankAndBankInMatcher(this, new FakeSpreadsheetRepoFactory(), mock_bank_and_bank_in_loader.Object);
            var source_record = new ActualBankRecord
            {
                Date    = DateTime.Today,
                Amount  = 34.56,
                Match   = null,
                Matched = false
            };
            var potential_matches = new List <IPotentialMatch>
            {
                new PotentialMatch
                {
                    Actual_records = new List <ICSVRecord>
                    {
                        new BankRecord {
                            Description = "Match 01", Unreconciled_amount = 20.22, Type = "Type"
                        },
                        new BankRecord {
                            Description = "Match 02", Unreconciled_amount = 30.33
                        },
                        new BankRecord {
                            Description = "Match 02", Unreconciled_amount = 40.44
                        }
                    }
                }
            };
            var index = 0;
            var record_for_matching = new RecordForMatching <ActualBankRecord>(source_record, potential_matches);

            // Act
            matcher.Match_specified_records(record_for_matching, index, mock_owned_file.Object);

            // Assert
            Assert.AreEqual(record_for_matching.SourceRecord, record_for_matching.Matches[index].Actual_records[0].Match, "match is pointing at source");
            Assert.AreEqual(record_for_matching.Matches[index].Actual_records[0], record_for_matching.SourceRecord.Match, "source is pointing at match");
        }
예제 #30
0
        public void Csv_is_constructed_correctly_with_matched_record()
        {
            // Arrange
            var    bank_record = new BankRecord();
            string csv_line    = String.Format("01/04/2017^£13.95^^POS^Purchase^1234^£14.22^^^");

            bank_record.Load(csv_line);
            bank_record.Matched = true;
            string matched_record_csv_line = String.Format("06/03/2017,BAC,'Some , description,127.69,261.40,'Envelope,'228822-99933422,");
            var    matched_record          = new ActualBankRecord();

            matched_record.Load(matched_record_csv_line);
            bank_record.Match = matched_record;

            // Act
            string constructed_csv_line = bank_record.To_csv();

            // Assert
            Assert.AreEqual("01/04/2017,£13.95,x,POS,\"Purchase\",1234,£14.22,,,,,06/03/2017,£127.69,BAC,'Some ; description", constructed_csv_line);
        }