84 lines
3.3 KiB
Python
84 lines
3.3 KiB
Python
import datetime
|
|
|
|
import vanth.ofx
|
|
|
|
|
|
def MST():
|
|
return datetime.timezone(datetime.timedelta(hours=-7), 'MST')
|
|
|
|
def MDT():
|
|
return datetime.timezone(datetime.timedelta(hours=-6), 'MDT')
|
|
|
|
def test_query_transactions(mocker):
|
|
institution = {
|
|
'bankid' : "1234567",
|
|
'fid' : "12345",
|
|
'name' : "AFCU",
|
|
}
|
|
account = {
|
|
"account_id" : "123456-0.9:CHK",
|
|
"user_id" : "123456789",
|
|
"password" : "1234",
|
|
"type" : "checking",
|
|
}
|
|
with mocker.patch('vanth.ofx.now', return_value='20160102030405.000[-7:MST]'):
|
|
results = vanth.ofx.query_transactions(institution, account, start=datetime.date(2016, 1, 2))
|
|
with open('tests/files/query_transactions.ofx', 'rb') as f:
|
|
expected = f.read().decode('utf-8')
|
|
assert results == expected
|
|
|
|
def test_parse():
|
|
with open('tests/files/transactions.ofx', 'rb') as f:
|
|
transactions = f.read().decode('utf-8')
|
|
document = vanth.ofx.parse(transactions)
|
|
assert document.header == {
|
|
'CHARSET' : '1252',
|
|
'COMPRESSION' : 'NONE',
|
|
'DATA' : 'OFXSGML',
|
|
'ENCODING' : 'USASCII',
|
|
'NEWFILEUID' : 'NONE',
|
|
'OFXHEADER' : '100',
|
|
'OLDFILEUID' : 'NONE',
|
|
'SECURITY' : 'NONE',
|
|
'VERSION' : '102'
|
|
}
|
|
assert document.body.status.code == '0'
|
|
assert document.body.status.severity == 'INFO'
|
|
assert document.body.status.message == 'The operation succeeded.'
|
|
assert document.body.statement.status.code == '0'
|
|
assert document.body.statement.status.severity == 'INFO'
|
|
assert document.body.statement.status.message is None
|
|
assert document.body.statement.transactions.currency == 'USD'
|
|
assert document.body.statement.transactions.account.accountid == '123456-0.9:CHK'
|
|
assert document.body.statement.transactions.account.bankid == '324377516'
|
|
assert document.body.statement.transactions.account.type == 'CHECKING'
|
|
assert document.body.statement.transactions.start == datetime.datetime(2015, 12, 31, 17, 0, tzinfo=MST())
|
|
assert document.body.statement.transactions.end == datetime.datetime(2016, 6, 22, 11, 12, 42, tzinfo=MDT())
|
|
expected_items = [{
|
|
'amount' : -50.19,
|
|
'available' : datetime.datetime(2015, 12, 31, 12),
|
|
'id' : '0006547',
|
|
'memo' : 'POINT OF SALE PURCHASE #0006547',
|
|
'name' : 'UT LEHI COSTCO WHSE #0733',
|
|
'posted' : datetime.datetime(2015, 12, 31, 12),
|
|
'type' : 'POS',
|
|
},{
|
|
'amount' : -79.64,
|
|
'available' : datetime.datetime(2015, 12, 31, 12),
|
|
'id' : '0006548',
|
|
'memo' : '#0006548',
|
|
'name' : 'Payment to PACIFICORP ONLIN',
|
|
'posted' : datetime.datetime(2015, 12, 31, 12),
|
|
'type' : 'PAYMENT',
|
|
},{
|
|
'amount' : 0.84,
|
|
'available' : datetime.datetime(2015, 12, 31, 12),
|
|
'id' : '0006549',
|
|
'memo' : 'ANNUAL PERCENTAGE YIELD EARNED IS .05% #0006549',
|
|
'name' : 'DIVIDEND FOR 12/01/15 - 12/31/1',
|
|
'posted' : datetime.datetime(2015, 12, 31, 12),
|
|
'type' : 'INT',
|
|
}]
|
|
items = [dict(item) for item in document.body.statement.transactions.items]
|
|
assert items == expected_items
|