Files
@ 6a3d64ff2250
Branch filter:
Location: NPO-Accounting/conservancy_beancount/tests/test_data_metadata.py
6a3d64ff2250
3.5 KiB
text/x-python
fields: Change FieldType capitalization.
This is friendlier to the YAML input and consistent with FieldFlags.
Less consistent with the rest of the codebase, but local consistency matters
more IMO.
This is friendlier to the YAML input and consistent with FieldFlags.
Less consistent with the rest of the codebase, but local consistency matters
more IMO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | """Test Metadata class"""
# Copyright © 2020 Brett Smith
# License: AGPLv3-or-later WITH Beancount-Plugin-Additional-Permission-1.0
#
# Full copyright and licensing details can be found at toplevel file
# LICENSE.txt in the repository.
import pytest
from . import testutil
from conservancy_beancount import data
@pytest.fixture
def simple_txn(index=None, key=None):
return testutil.Transaction(note='txn note', postings=[
('Assets:Cash', 5),
('Income:Donations', -5, {'note': 'donation love', 'extra': 'Extra'}),
])
SIMPLE_TXN_METAKEYS = frozenset(['filename', 'lineno', 'note'])
LINK_STRINGS = [
'',
'link',
' link',
'link ',
'link1 link2',
' link1 link2 link3 ',
]
def test_metadata_transforms_source():
source = {'1': 'one'}
meta = data.Metadata(source)
meta['2'] = 'two'
assert source['2'] == 'two'
del meta['1']
assert set(source) == {'2'}
@pytest.mark.parametrize('value', LINK_STRINGS)
def test_get_links(value):
meta = data.Metadata({'key': value})
assert list(meta.get_links('key')) == value.split()
def test_get_links_missing():
meta = data.Metadata({})
assert not meta.get_links('key')
@pytest.mark.parametrize('value', testutil.NON_STRING_METADATA_VALUES)
def test_get_links_bad_type(value):
meta = data.Metadata({'key': value})
with pytest.raises(TypeError):
meta.get_links('key')
@pytest.mark.parametrize('value', LINK_STRINGS)
def test_report_links(value):
meta = data.Metadata({'key': value})
assert list(meta.report_links('key')) == value.split()
def test_report_links_missing():
meta = data.Metadata({})
assert not meta.report_links('key')
@pytest.mark.parametrize('value', testutil.NON_STRING_METADATA_VALUES)
def test_report_links_bad_type(value):
meta = data.Metadata({'key': value})
assert not meta.report_links('key')
def test_first_link_from_txn(simple_txn):
meta = data.PostingMeta(simple_txn, 0)
assert meta.first_link('note') == 'txn'
def test_first_link_from_post_override(simple_txn):
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('note') == 'donation'
def test_first_link_is_only_link(simple_txn):
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('extra') == 'Extra'
def test_first_link_nonexistent_metadata(simple_txn):
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('Nonexistent') is None
def test_first_link_nonexistent_default(simple_txn):
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('Nonexistent', 'missing') == 'missing'
@pytest.mark.parametrize('meta_value', testutil.NON_STRING_METADATA_VALUES)
def test_first_link_bad_type_metadata(simple_txn, meta_value):
simple_txn.meta['badmeta'] = meta_value
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('badmeta') is None
@pytest.mark.parametrize('meta_value', testutil.NON_STRING_METADATA_VALUES)
def test_first_link_bad_type_default(simple_txn, meta_value):
simple_txn.meta['badmeta'] = meta_value
meta = data.PostingMeta(simple_txn, 1)
assert meta.first_link('badmeta', '_') == '_'
@pytest.mark.parametrize('meta_name,expected', [
('approval', 'Approval'),
('bank-id', 'Bank ID'),
('bank-statement', 'Bank Statement'),
('check-id', 'Check Number'),
('paypal-id', 'PayPal ID'),
('purchase-order', 'Purchase Order'),
('receipt', 'Receipt'),
('rt-id', 'Ticket'),
('tax-statement', 'Tax Statement'),
])
def test_human_name(meta_name, expected):
assert data.Metadata.human_name(meta_name) == expected
|