diff --git a/tests/test_reports_spreadsheet.py b/tests/test_reports_spreadsheet.py new file mode 100644 index 0000000000000000000000000000000000000000..a6e4be07e703cc85853fbcec6487febe89eed7bb --- /dev/null +++ b/tests/test_reports_spreadsheet.py @@ -0,0 +1,79 @@ +"""test_reports_spreadsheet - Unit tests for spreadsheet classes""" +# Copyright © 2020 Brett Smith +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import pytest + +from . import testutil + +from conservancy_beancount.reports import core + +class BaseTester(core.BaseSpreadsheet[tuple, str]): + def __init__(self): + self.start_call = None + self.end_call = None + self.started_sections = [] + self.ended_sections = [] + self.written_rows = [] + + def section_key(self, row): + return row[0] + + def start_spreadsheet(self): + self.start_call = self.started_sections.copy() + + def start_section(self, key): + self.started_sections.append(key) + + def end_section(self, key): + self.ended_sections.append(key) + + def end_spreadsheet(self): + self.end_call = self.ended_sections.copy() + + def write_row(self, key): + self.written_rows.append(key) + + +@pytest.fixture +def spreadsheet(): + return BaseTester() + +def test_spreadsheet(spreadsheet): + rows = [(ch, ii) for ii, ch in enumerate('aabbcc', 1)] + spreadsheet.write(iter(rows)) + assert spreadsheet.written_rows == rows + assert spreadsheet.ended_sections == spreadsheet.started_sections + assert spreadsheet.started_sections == list('abc') + assert spreadsheet.start_call == [] + assert spreadsheet.end_call == spreadsheet.ended_sections + +def test_empty_spreadsheet(spreadsheet): + empty_list = [] + spreadsheet.write(iter(empty_list)) + assert spreadsheet.start_call == empty_list + assert spreadsheet.end_call == empty_list + assert spreadsheet.started_sections == empty_list + assert spreadsheet.ended_sections == empty_list + assert spreadsheet.written_rows == empty_list + +def test_one_section_spreadsheet(spreadsheet): + rows = [('A', n) for n in range(1, 4)] + spreadsheet.write(iter(rows)) + assert spreadsheet.written_rows == rows + assert spreadsheet.ended_sections == spreadsheet.started_sections + assert spreadsheet.started_sections == list('A') + assert spreadsheet.start_call == [] + assert spreadsheet.end_call == spreadsheet.ended_sections