@@ -83,63 +83,58 @@ def test_rt_ticket_bad_field(ticket_query, field_name):
@pytest.mark.parametrize('meta_name', ['foo', 'bar'])
def test_rt_ticket_bad_metadata(ticket_query, meta_name):
with pytest.raises(ValueError):
ticket_query(const_operands('id', meta_name))
@pytest.mark.parametrize('field_name,meta_name,expected', [
('id', 'rt-id', 1),
('Queue', 'approval', 'general'),
('Requestors', 'invoice', ['mx1@example.org', 'requestor2@example.org']),
('Due', 'tax-reporting', datetime.datetime(2017, 1, 14, 12, 1, 0, tzinfo=UTC)),
('id', 'rt-id', {1}),
('Queue', 'approval', {'general'}),
('Requestors', 'invoice', {'mx1@example.org', 'requestor2@example.org'}),
('Due', 'tax-reporting', {datetime.datetime(2017, 1, 14, 12, 1, 0, tzinfo=UTC)}),
])
def test_rt_ticket_from_txn(ticket_query, field_name, meta_name, expected):
func = ticket_query(const_operands(field_name, meta_name))
txn = testutil.Transaction(**{meta_name: 'rt:1'}, postings=[
('Assets:Cash', 80),
context = RowContext(txn, txn.postings[0])
if not isinstance(expected, list):
expected = [expected]
assert func(context) == expected
('id', 'rt-id', 2),
('Requestors', 'invoice', ['mx2@example.org', 'requestor2@example.org']),
('Due', 'tax-reporting', datetime.datetime(2017, 1, 14, 12, 2, 0, tzinfo=UTC)),
('id', 'rt-id', {2}),
('Requestors', 'invoice', {'mx2@example.org', 'requestor2@example.org'}),
('Due', 'tax-reporting', {datetime.datetime(2017, 1, 14, 12, 2, 0, tzinfo=UTC)}),
def test_rt_ticket_from_post(ticket_query, field_name, meta_name, expected):
('Assets:Cash', 110, {meta_name: 'rt:2/8'}),
@pytest.mark.parametrize('field_name,meta_name,expected,on_txn', [
('id', 'approval', [1, 2], True),
('Queue', 'check', ['general', 'general'], False),
('Requestors', 'invoice', [
('id', 'approval', {1, 2}, True),
('Queue', 'check', {'general'}, False),
('Requestors', 'invoice', {
'mx1@example.org',
'mx2@example.org',
'requestor2@example.org',
], False),
}, False),
def test_rt_ticket_multi_results(ticket_query, field_name, meta_name, expected, on_txn):
txn = testutil.Transaction(**{'rt-id': 'rt:1'}, postings=[
('Assets:Cash', 110, {'rt-id': 'rt:2'}),
post = txn.postings[0]
meta = txn.meta if on_txn else post.meta
meta[meta_name] = 'rt:1/2 Docs/12.pdf rt:2/8'
context = RowContext(txn, post)
assert sorted(func(context)) == expected
@pytest.mark.parametrize('meta_value,on_txn', testutil.combine_values(
['', 'Docs/34.pdf', 'Docs/100.pdf Docs/120.pdf'],
[True, False],
))
def test_rt_ticket_no_results(ticket_query, meta_value, on_txn):
@@ -148,40 +143,40 @@ def test_rt_ticket_no_results(ticket_query, meta_value, on_txn):
meta['check'] = meta_value
assert func(context) == []
assert func(context) == set()
def test_rt_ticket_caches_tickets():
rt_client = testutil.RTClient()
rt_client.TICKET_DATA = testutil.RTClient.TICKET_DATA.copy()
ticket_query = qmod.RTTicket.with_client(rt_client, 'cachetestA')
func = ticket_query(const_operands('id', 'rt-id'))
txn = testutil.Transaction(postings=[
('Assets:Cash', 160, {'rt-id': 'rt:3'}),
assert func(context) == [3]
assert func(context) == {3}
del rt_client.TICKET_DATA['3']
def test_rt_ticket_caches_tickets_not_found():
rt3 = rt_client.TICKET_DATA.pop('3')
ticket_query = qmod.RTTicket.with_client(rt_client, 'cachetestB')
rt_client.TICKET_DATA['3'] = rt3
def test_books_loader_empty():
result = qmod.BooksLoader(None)()
assert not result.entries
assert len(result.errors) == 1