@@ -15,6 +15,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import collections
import contextlib
import copy
import datetime
import io
@@ -33,6 +34,8 @@ from conservancy_beancount import data
from conservancy_beancount.reports import core
from conservancy_beancount.reports import ledger
clean_account_meta = contextlib.contextmanager(testutil.clean_account_meta)
Acct = data.Account
_ledger_load = bc_loader.load_file(testutil.test_path('books/ledger.beancount'))
@@ -43,19 +46,11 @@ DEFAULT_REPORT_SHEETS = [
'Equity',
'Assets:Receivable',
'Liabilities:Payable',
'Assets:PayPal',
'Assets',
'Liabilities',
]
PROJECT_REPORT_SHEETS = [
'Balance',
'Income',
'Expenses',
'Assets:Prepaid',
'Liabilities:UnearnedIncome',
PROJECT_REPORT_SHEETS = DEFAULT_REPORT_SHEETS[:6]
del PROJECT_REPORT_SHEETS[3]
OVERSIZE_RE = re.compile(
r'^([A-Za-z0-9:]+) has ([0-9,]+) rows, over size ([0-9,]+)$'
)
@@ -275,7 +270,8 @@ def run_main(arglist, config=None):
arglist.insert(0, '--output-file=-')
output = io.BytesIO()
errors = io.StringIO()
retcode = ledger.main(arglist, output, errors, config)
with clean_account_meta():
output.seek(0)
return retcode, output, errors
@@ -292,6 +288,30 @@ def test_main(ledger_entries):
for _, expected in ExpectedPostings.group_by_account(postings):
expected.check_report(ods, START_DATE, STOP_DATE)
@pytest.mark.parametrize('acct_arg', [
'Accounts payable',
])
def test_main_account_limit(ledger_entries, acct_arg):
retcode, output, errors = run_main([
'-a', acct_arg,
'-b', START_DATE.isoformat(),
'-e', STOP_DATE.isoformat(),
assert not errors.getvalue()
assert retcode == 0
ods = odf.opendocument.load(output)
assert get_sheet_names(ods) == ['Balance', 'Liabilities']
postings = data.Posting.from_entries(ledger_entries)
for account, expected in ExpectedPostings.group_by_account(postings):
should_find = account.startswith('Liabilities')
try:
except NotFound:
assert not should_find
else:
assert should_find
@pytest.mark.parametrize('project,start_date,stop_date', [
('eighteen', START_DATE, MID_DATE.replace(day=30)),
('nineteen', MID_DATE, STOP_DATE),