diff --git a/tests/test_reports_balance.py b/tests/test_reports_balance.py index 24c435e91cbc6fa91c0364717acf8a55a5dba8e8..ce81dce1e9e160b3a5eda0ff542be36cefb5d080 100644 --- a/tests/test_reports_balance.py +++ b/tests/test_reports_balance.py @@ -28,12 +28,12 @@ from conservancy_beancount.reports import core DEFAULT_STRINGS = [ ({}, "Zero balance"), - ({'JPY': 0, 'BRL': 0}, "Zero balance"), + ({'JPY': 0, 'BRL': 0}, "0.00 BRL, 0 JPY"), ({'USD': '20.00'}, "20.00 USD"), ({'EUR': '50.00', 'GBP': '80.00'}, "80.00 GBP, 50.00 EUR"), ({'JPY': '-5500.00', 'BRL': '-8500.00'}, "-8,500.00 BRL, -5,500 JPY"), ({'USD': 10, 'EUR': '.00015'}, "10.00 USD"), - ({'JPY': '-.00015'}, "Zero balance"), + ({'JPY': '-.00015'}, "-0 JPY"), ] TOLERANCES = [Decimal(n) for n in ['.1', '.01', '.001', 0]] @@ -385,9 +385,9 @@ def test_format_defaults(mapping, expected): @pytest.mark.parametrize('fmt,expected', [ ('¤##0.0', '¥5000, -€1500.00'), - ('#,#00.0¤¤', '5,000JPY, -1,500.00EUR'), + ('#,##0.0¤¤', '5,000JPY, -1,500.00EUR'), ('¤+##0.0;¤-##0.0', '¥+5000, €-1500.00'), - ('#,#00.0 ¤¤;(#,#00.0 ¤¤)', '5,000 JPY, (1,500.00 EUR)'), + ('#,##0.0 ¤¤;(#,##0.0 ¤¤)', '5,000 JPY, (1,500.00 EUR)'), ]) def test_format_fmt(fmt, expected): amounts = [testutil.Amount(5000, 'JPY'), testutil.Amount(-1500, 'EUR')] @@ -420,20 +420,32 @@ def test_format_empty(empty): balance = core.Balance() assert balance.format(empty=empty) == empty -@pytest.mark.parametrize('tolerance', TOLERANCES) -def test_str_tolerance(tolerance): - chf = testutil.Amount('.005', 'CHF') - actual = str(core.Balance([chf], tolerance)) - if tolerance > chf.number: - assert actual == "Zero balance" - else: - assert actual == "00.00 CHF" +@pytest.mark.parametrize('currency,fmt', itertools.product( + ['USD', 'JPY', 'BRL'], + [None, '¤#,##0.00', '###0.00 ¤¤'], +)) +def test_format_zero_balance_fmt(currency, fmt): + zero_amt = testutil.Amount(0, currency) + nonzero_amt = testutil.Amount(9, currency) + zero_bal = core.Balance([zero_amt]) + nonzero_bal = core.Balance([nonzero_amt]) + expected = nonzero_bal.format(fmt).replace('9', '0') + assert zero_bal.format(fmt) == expected + +@pytest.mark.parametrize('currency,fmt', testutil.combine_values( + ['USD', 'JPY', 'BRL'], + ["N/A", "Zero", "ø"], +)) +def test_format_zero_balance_zero_str(currency, fmt): + zero_amt = testutil.Amount(0, currency) + zero_bal = core.Balance([zero_amt]) + assert zero_bal.format(zero=fmt) == fmt @pytest.mark.parametrize('tolerance', TOLERANCES) -def test_format_tolerance(tolerance): +def test_format_zero_balance_with_tolerance(tolerance): chf = testutil.Amount('.005', 'CHF') - actual = core.Balance([chf]).format(tolerance=tolerance) + actual = core.Balance([chf]).format(zero="ø", tolerance=tolerance) if tolerance > chf.number: - assert actual == "Zero balance" + assert actual == "ø" else: - assert actual == "00.00 CHF" + assert actual == "0.00 CHF"