tests: Add _meta_type kwarg to testutil.Posting.

This commit is contained in:
Brett Smith 2020-06-11 09:55:13 -04:00
parent f76fa35fad
commit 1cbc9d3dc9
2 changed files with 20 additions and 37 deletions

View file

@ -248,50 +248,31 @@ def test_meta_values_many_types():
@pytest.mark.parametrize('count', range(3))
def test_all_meta_links_zero(count):
postings = (
testutil.Posting('Income:Donations', -n, testkey=str(n))
for n in range(count)
)
related = core.RelatedPostings(
post._replace(meta=data.Metadata(post.meta))
for post in postings
)
related = core.RelatedPostings(testutil.Posting(
'Income:Donations', -n, testkey=str(n), _meta_type=data.Metadata,
) for n in range(count))
assert next(related.all_meta_links('approval'), None) is None
def test_all_meta_links_singletons():
postings = (
testutil.Posting('Income:Donations', -10, statement=value)
for value in itertools.chain(
testutil.NON_LINK_METADATA_STRINGS,
testutil.LINK_METADATA_STRINGS,
testutil.NON_STRING_METADATA_VALUES,
))
related = core.RelatedPostings(
post._replace(meta=data.Metadata(post.meta))
for post in postings
)
related = core.RelatedPostings(testutil.Posting(
'Income:Donations', -10, statement=value, _meta_type=data.Metadata,
) for value in itertools.chain(
testutil.NON_LINK_METADATA_STRINGS,
testutil.LINK_METADATA_STRINGS,
testutil.NON_STRING_METADATA_VALUES,
))
assert set(related.all_meta_links('statement')) == testutil.LINK_METADATA_STRINGS
def test_all_meta_links_multiples():
postings = (
testutil.Posting('Income:Donations', -10, approval=' '.join(value))
for value in itertools.permutations(testutil.LINK_METADATA_STRINGS, 2)
)
related = core.RelatedPostings(
post._replace(meta=data.Metadata(post.meta))
for post in postings
)
related = core.RelatedPostings(testutil.Posting(
'Income:Donations', -10, approval=' '.join(value), _meta_type=data.Metadata,
) for value in itertools.permutations(testutil.LINK_METADATA_STRINGS, 2))
assert set(related.all_meta_links('approval')) == testutil.LINK_METADATA_STRINGS
def test_all_meta_links_preserves_order():
postings = (
testutil.Posting('Income:Donations', -10, approval=c)
for c in '121323'
)
related = core.RelatedPostings(
post._replace(meta=data.Metadata(post.meta))
for post in postings
)
related = core.RelatedPostings(testutil.Posting(
'Income:Donations', -10, approval=c, _meta_type=data.Metadata,
) for c in '121323')
assert list(related.all_meta_links('approval')) == list('123')
def test_group_by_meta_zero():

View file

@ -116,12 +116,14 @@ def Cost(number, currency='USD', date=FY_MID_DATE, label=None):
def Posting(account, number,
currency='USD', cost=None, price=None, flag=None,
type_=bc_data.Posting, **meta):
_post_type=bc_data.Posting, _meta_type=None, **meta):
if cost is not None:
cost = Cost(*cost)
if not meta:
meta = None
return type_(
elif _meta_type:
meta = _meta_type(meta)
return _post_type(
account,
Amount(number, currency),
cost,