diff --git a/tests/test_reports_related_postings.py b/tests/test_reports_related_postings.py index a9186196e17892a2df0d0750d5de0bb7227e40ac..f0bb60bf7ddb23e61732c7e4d47a9fa419f8c354 100644 --- a/tests/test_reports_related_postings.py +++ b/tests/test_reports_related_postings.py @@ -106,3 +106,64 @@ def test_iter_with_balance_credit_card(credit_card_cycle): def test_iter_with_balance_two_acccruals(two_accruals_three_payments): check_iter_with_balance(two_accruals_three_payments) + +def test_meta_values_empty(): + related = core.RelatedPostings() + assert related.meta_values('key') == set() + +def test_meta_values_no_match(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, metakey='metavalue')) + assert related.meta_values('key') == {None} + +def test_meta_values_no_match_default_given(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, metakey='metavalue')) + assert related.meta_values('key', '') == {''} + +def test_meta_values_one_match(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='metavalue')) + assert related.meta_values('key') == {'metavalue'} + +def test_meta_values_some_match(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='1')) + related.add(testutil.Posting('Income:Donations', -2, metakey='2')) + assert related.meta_values('key') == {'1', None} + +def test_meta_values_some_match_default_given(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='1')) + related.add(testutil.Posting('Income:Donations', -2, metakey='2')) + assert related.meta_values('key', '') == {'1', ''} + +def test_meta_values_all_match(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='1')) + related.add(testutil.Posting('Income:Donations', -2, key='2')) + assert related.meta_values('key') == {'1', '2'} + +def test_meta_values_all_match_one_value(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='1')) + related.add(testutil.Posting('Income:Donations', -2, key='1')) + assert related.meta_values('key') == {'1'} + +def test_meta_values_all_match_default_given(): + related = core.RelatedPostings() + related.add(testutil.Posting('Income:Donations', -1, key='1')) + related.add(testutil.Posting('Income:Donations', -2, key='2')) + assert related.meta_values('key', '') == {'1', '2'} + +def test_meta_values_many_types(): + expected = { + datetime.date(2020, 4, 1), + Decimal(42), + testutil.Amount(5), + 'rt:42', + } + related = core.RelatedPostings() + for index, value in enumerate(expected): + related.add(testutil.Posting('Income:Donations', -index, key=value)) + assert related.meta_values('key') == expected