diff --git a/tests/test_rtutil.py b/tests/test_rtutil.py index e70c488ed6acc29f296dddb2b43ec8a822e33238..7c285d06235c9a68fd38f15d9b168c567fe9f786 100644 --- a/tests/test_rtutil.py +++ b/tests/test_rtutil.py @@ -118,6 +118,30 @@ def test_url_default_filename(new_client, mimetype, extension): expected = '{}Ticket/Attachment/9/9/RT1%20attachment%209.{}'.format(DEFAULT_RT_URL, extension) assert rt.url(1, 9) == expected +@pytest.mark.parametrize('rt_fmt,nonrt_fmt,missing_fmt', [ + ('{}', '{}', '{}',), + ('<{}>', '[{}]', '({})'), +]) +def test_iter_urls(rt, rt_fmt, nonrt_fmt, missing_fmt): + expected_map = { + 'rt:{}{}'.format(tid, '' if aid is None else f'/{aid}'): url + for tid, aid, url in EXPECTED_URLS + } + expected_map['https://example.com'] = None + expected_map['invoice.pdf'] = None + keys = list(expected_map) + urls = rt.iter_urls(keys, rt_fmt, nonrt_fmt, missing_fmt) + for key, actual in itertools.zip_longest(keys, urls): + expected = expected_map[key] + if expected is None: + if key.startswith('rt:'): + expected = missing_fmt.format(key) + else: + expected = nonrt_fmt.format(key) + else: + expected = rt_fmt.format(DEFAULT_RT_URL + expected) + assert actual == expected + @pytest.mark.parametrize('ticket_id,attachment_id,expected', EXPECTED_URLS) def test_exists(rt, ticket_id, attachment_id, expected): expected = False if expected is None else True @@ -239,3 +263,21 @@ def test_txn_with_urls(rt): assert txn.meta[key] == expected assert txn.postings[0].meta['receipt'] == 'rt:2/13 donation.txt' assert txn.postings[1].meta['receipt'] == 'cash.png rt:2/14' + +def test_txn_with_urls_with_fmts(rt): + txn_meta = { + 'rt-id': 'rt:1', + 'contract': 'RepoLink.pdf', + 'statement': 'rt:1/99 rt:1/4 stmt.txt', + } + txn = testutil.Transaction(**txn_meta) + actual = rt.txn_with_urls(txn, '<{}>', '[{}]', '({})') + rt_id_path = EXPECTED_URLS_MAP[(1, None)] + assert actual.meta['rt-id'] == f'<{DEFAULT_RT_URL}{rt_id_path}>' + assert actual.meta['contract'] == '[RepoLink.pdf]' + statement_path = EXPECTED_URLS_MAP[(1, 4)] + assert actual.meta['statement'] == ' '.join([ + '(rt:1/99)', + f'<{DEFAULT_RT_URL}{statement_path}>', + '[stmt.txt]', + ])