Changeset - 46ac91e86e90
[Not reviewed]
0 1 0
Brett Smith - 4 years ago 2020-04-28 21:20:59
brettcsmith@brettcsmith.org
test_rtutil: Simplify setup.
1 file changed with 1 insertions and 2 deletions:
0 comments (0 inline, 0 general)
tests/test_rtutil.py
Show inline comments
...
 
@@ -116,127 +116,126 @@ def test_url_default_filename(new_client, mimetype, extension):
 
    new_client.TICKET_DATA['1'] = [('9', '(Unnamed)', mimetype, '50.5k')]
 
    rt = rtutil.RT(new_client)
 
    expected = '{}Ticket/Attachment/9/9/RT1%20attachment%209.{}'.format(DEFAULT_RT_URL, extension)
 
    assert rt.url(1, 9) == 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
 
    assert rt.exists(ticket_id, attachment_id) is expected
 

	
 
def test_exists_caches(new_client):
 
    rt = rtutil.RT(new_client)
 
    assert rt.exists(1, 3)
 
    assert rt.exists(2)
 
    assert not rt.exists(1, 99)
 
    assert not rt.exists(9)
 
    new_client.TICKET_DATA.clear()
 
    assert rt.exists(1, 3)
 
    assert rt.exists(2)
 
    assert not rt.exists(1, 99)
 
    assert not rt.exists(9)
 

	
 
@pytest.mark.parametrize('link,expected', [
 
    ('rt:1/2', ('1', '2')),
 
    ('rt:123/456', ('123', '456')),
 
    ('rt:12345', ('12345', None)),
 
    ('rt:12346/', ('12346', None)),
 
    ('rt:12346/789', ('12346', '789')),
 
    ('rt:12346/780/', ('12346', '780')),
 
    ('rt://ticket/1', ('1', None)),
 
    ('rt://ticket/1/', ('1', None)),
 
    ('rt://ticket/1234/attachments/5678', ('1234', '5678')),
 
    ('rt://ticket/1234/attachments/5678/', ('1234', '5678')),
 
    ('rt://ticket/1234/attachment/5678', ('1234', '5678')),
 
    ('rt://ticket/1234/attachment/5678/', ('1234', '5678')),
 
    ('rt:', None),
 
    ('rt://', None),
 
    ('rt:example.org', None),
 
    ('rt:example.org/1', None),
 
    ('rt://example.org', None),
 
    ('rt://example.org/1', None),
 
    ('https://example.org/rt/Ticket/Display.html?id=123', None),
 
])
 
def test_parse(rt, link, expected):
 
    assert rt.parse(link) == expected
 

	
 
def test_uncommon_server_url_parsing():
 
    url = 'https://example.org/REST/1.0/'
 
    client = testutil.RTClient(url + 'REST/1.0/')
 
    rt = rtutil.RT(client)
 
    assert rt.url(1).startswith(url)
 

	
 
def test_shared_cache(new_client):
 
    ticket_id, _, expected = EXPECTED_URLS[0]
 
    expected = DEFAULT_RT_URL + expected
 
    with new_cache() as cachedb:
 
        rt1 = rtutil.RT(new_client, cachedb)
 
        assert rt1.url(ticket_id) == expected
 
        new_client.TICKET_DATA.clear()
 
        rt2 = rtutil.RT(new_client, cachedb)
 
        assert rt2.url(ticket_id) == expected
 
        assert not rt2.exists(ticket_id + 1)
 
        assert rt1 is not rt2
 

	
 
def test_no_shared_cache(new_client):
 
    with new_cache() as cache1, new_cache() as cache2:
 
        rt1 = rtutil.RT(new_client, cache1)
 
        rt2 = rtutil.RT(new_client, cache2)
 
        assert rt1.exists(1)
 
        new_client.TICKET_DATA.clear()
 
        assert not rt2.exists(1)
 
        assert rt1.exists(1)
 

	
 
def test_read_only_cache(new_client, tmp_path):
 
    db_path = tmp_path / 'test.db'
 
    ticket_id, _, expected = EXPECTED_URLS[0]
 
    expected = DEFAULT_RT_URL + expected
 
    with new_cache(db_path) as cache1:
 
        rt1 = rtutil.RT(new_client, cache1)
 
        assert rt1.url(ticket_id) == expected
 
    new_client.TICKET_DATA.clear()
 
    db_path.chmod(0o400)
 
    with new_cache(db_path) as cache2:
 
        rt2 = rtutil.RT(new_client, cache2)
 
        assert rt2.url(ticket_id) == expected
 
        assert rt2.url(ticket_id + 1) is None
 

	
 
def test_results_not_found_only_in_transient_cache(new_client):
 
    with new_cache() as cache:
 
        rt1 = rtutil.RT(new_client, cache)
 
        rt2 = rtutil.RT(new_client, cache)
 
        assert not rt1.exists(9)
 
        new_client.TICKET_DATA['9'] = [('99', '(Unnamed)', 'text/plain', '0b')]
 
        assert not rt1.exists(9)
 
        assert rt2.exists(9)
 

	
 
def test_txn_with_urls(new_client):
 
def test_txn_with_urls(rt):
 
    txn_meta = {
 
        'rt-id': 'rt:1',
 
        'contract': 'RepoLink.pdf',
 
        'statement': 'doc1.txt rt:1/4 doc2.txt',
 
    }
 
    txn = testutil.Transaction(**txn_meta, postings=[
 
        ('Income:Donations', -10, {'receipt': 'rt:2/13 donation.txt'}),
 
        ('Assets:Cash', 10, {'receipt': 'cash.png rt:2/14'}),
 
    ])
 
    rt = rtutil.RT(new_client)
 
    actual = rt.txn_with_urls(txn)
 
    def check(source, key, ticket_id, attachment_id=None):
 
        url_path = EXPECTED_URLS_MAP[(ticket_id, attachment_id)]
 
        assert f'<{DEFAULT_RT_URL}{url_path}>' in source.meta[key]
 
    expected_keys = set(txn_meta)
 
    expected_keys.update(['filename', 'lineno'])
 
    assert set(actual.meta) == expected_keys
 
    check(actual, 'rt-id', 1)
 
    assert actual.meta['contract'] == txn_meta['contract']
 
    assert actual.meta['statement'].startswith('doc1.txt ')
 
    check(actual, 'statement', 1, 4)
 
    check(actual.postings[0], 'receipt', 2, 13)
 
    assert actual.postings[0].meta['receipt'].endswith(' donation.txt')
 
    check(actual.postings[1], 'receipt', 2, 14)
 
    assert actual.postings[1].meta['receipt'].startswith('cash.png ')
 
    # Check the original transaction is unchanged
 
    for key, expected in txn_meta.items():
 
        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'
0 comments (0 inline, 0 general)