public void Will_order_records_for_spreadsheet_by_matched_and_then_by_date_with_divider_between()
        {
            // Arrange
            const bool doNotOrderByDate = false;
            var        file_io          = new FileIO <BankRecord>(new FakeSpreadsheetRepoFactory(), _csv_file_path, "BankIn-formatted-date-only");
            var        csv_file         = new CSVFile <BankRecord>(file_io);

            csv_file.Load(
                true,
                null,
                doNotOrderByDate);
            csv_file.Records[0].Matched = true;
            csv_file.Records[1].Matched = true;
            csv_file.Records[3].Matched = true;

            // Act
            var records = csv_file.Records_ordered_for_spreadsheet();

            // Assert
            Assert.AreEqual("ZZZThing2", records[0].Description);
            Assert.AreEqual("ZZZSpecialDescription001", records[1].Description);
            Assert.AreEqual("ZZZThing1", records[2].Description);
            Assert.AreEqual(true, records[3].Divider);
            Assert.AreEqual("ZZZThing3", records[4].Description);
            Assert.AreEqual("ZZZSpecialDescription005", records[5].Description);
        }
        public void Will_append_all_rows_in_csv_file_to_specified_worksheet()
        {
            // Arrange
            var sheet_name = TestSheetNames.Bank;
            var file_io    = new FileIO <BankRecord>(new ExcelSpreadsheetRepoFactory(""), _csvFilePath, "BankIn-formatted-date-only");
            var csv_file   = new CSVFile <BankRecord>(file_io);

            csv_file.Load();
            var initial_last_row_number = _excelSpreadsheet.Last_row_number(sheet_name);

            // Act
            _excelSpreadsheet.Append_csv_file <BankRecord>(sheet_name, csv_file);
            var new_last_row   = _excelSpreadsheet.Read_last_row(sheet_name);
            var new_row_number = _excelSpreadsheet.Last_row_number(sheet_name);

            // Clean up
            for (int count = 1; count <= csv_file.Records.Count; count++)
            {
                _excelSpreadsheet.Remove_last_row(sheet_name);
            }

            // Assert
            var last_record_in_ordered_csv_file = csv_file.Records_ordered_for_spreadsheet()[csv_file.Records.Count - 1];

            Assert.AreEqual(last_record_in_ordered_csv_file.Date, DateTime.FromOADate((double)new_last_row.Read_cell(0)));
            Assert.AreEqual(last_record_in_ordered_csv_file.Unreconciled_amount, (Double)new_last_row.Read_cell(1));
            Assert.AreEqual(last_record_in_ordered_csv_file.Type, (String)new_last_row.Read_cell(3));
            Assert.AreEqual(last_record_in_ordered_csv_file.Description, (String)new_last_row.Read_cell(4));
            Assert.AreEqual(null, new_last_row.Read_cell(5));
            Assert.AreEqual(null, new_last_row.Read_cell(6));
            Assert.AreEqual(initial_last_row_number + csv_file.Records.Count, new_row_number);
        }
        public void When_ordering_records_for_spreadsheet_if_no_matched_then_no_divider()
        {
            // Arrange
            var file_io  = new FileIO <BankRecord>(new FakeSpreadsheetRepoFactory(), _csv_file_path, "BankIn-formatted-date-only");
            var csv_file = new CSVFile <BankRecord>(file_io);

            csv_file.Load();

            // Act
            var records = csv_file.Records_ordered_for_spreadsheet();

            // Assert
            Assert.AreEqual(5, records.Count);
            Assert.AreEqual(false, records[0].Divider);
            Assert.AreEqual(false, records[1].Divider);
            Assert.AreEqual(false, records[2].Divider);
            Assert.AreEqual(false, records[3].Divider);
            Assert.AreEqual(false, records[4].Divider);
        }
        public void When_ordering_records_for_spreadsheet_will_insert_divider_between_matched_and_non_matched()
        {
            // Arrange
            var file_io  = new FileIO <BankRecord>(new FakeSpreadsheetRepoFactory(), _csv_file_path, "BankIn-formatted-date-only");
            var csv_file = new CSVFile <BankRecord>(file_io);

            csv_file.Load();
            csv_file.Records[0].Matched = true;
            csv_file.Records[3].Matched = true;

            // Act
            var records = csv_file.Records_ordered_for_spreadsheet();

            // Assert
            Assert.AreEqual(6, records.Count);
            Assert.AreEqual(true, records[1].Matched);
            Assert.AreEqual(false, records[1].Divider);

            Assert.AreEqual(true, records[2].Divider);

            Assert.AreEqual(false, records[3].Matched);
            Assert.AreEqual(false, records[3].Divider);
        }