199 lines
5.1 KiB
Python
199 lines
5.1 KiB
Python
|
from unittest import TestCase
|
||
|
from unittest.mock import MagicMock
|
||
|
from copy import deepcopy
|
||
|
|
||
|
import transactions
|
||
|
|
||
|
|
||
|
class TestTransactions(TestCase):
|
||
|
def setUp(self):
|
||
|
self.transactions = transactions.Transactions()
|
||
|
self.test_data = {
|
||
|
"event": "TransactionCreated",
|
||
|
"timestamp": "2022-02-24T20:26:15.232342Z",
|
||
|
"data": {
|
||
|
"id": "6217e9e7-43e1-a809-8500-0a5b0170e6e4",
|
||
|
"type": "transfer",
|
||
|
"state": "completed",
|
||
|
"request_id": "8a15213e-a7d2-4738-bfb5-b1d037b75a57",
|
||
|
"created_at": "2022-02-24T20:26:15.238218Z",
|
||
|
"updated_at": "2022-02-24T20:26:15.238218Z",
|
||
|
"completed_at": "2022-02-24T20:26:15.238453Z",
|
||
|
"reference": "TEST-1",
|
||
|
"legs": [
|
||
|
{
|
||
|
"leg_id": "80b35daf-409c-41be-8755-15982b7633a6",
|
||
|
"account_id": "7185593b-d9ad-4456-920e-d9db109a5172",
|
||
|
"counterparty": {"account_type": "revolut"},
|
||
|
"amount": 1,
|
||
|
"currency": "GBP",
|
||
|
"description": "From Mark Veidemanis",
|
||
|
"balance": 3832.3,
|
||
|
}
|
||
|
],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
# Mock redis calls
|
||
|
transactions.r.hgetall = self.mock_hgetall
|
||
|
transactions.r.hmset = self.mock_hmset
|
||
|
transactions.r.keys = self.mock_keys
|
||
|
transactions.r.get = self.mock_get
|
||
|
|
||
|
self.transactions.irc = MagicMock()
|
||
|
self.transactions.irc.sendmsg = MagicMock()
|
||
|
self.transactions.release_funds = MagicMock()
|
||
|
self.transactions.notify = MagicMock()
|
||
|
self.transactions.notify.notify_complete_trade = MagicMock()
|
||
|
|
||
|
self.trade_1 = {
|
||
|
"id": "uuid1",
|
||
|
"buyer": "test_buyer_1",
|
||
|
"currency": "GBP",
|
||
|
"amount": "1",
|
||
|
"amount_xmr": "0.3",
|
||
|
"reference": "TEST-1",
|
||
|
}
|
||
|
|
||
|
self.trade_2 = {
|
||
|
"id": "uuid2",
|
||
|
"buyer": "test_buyer_2",
|
||
|
"currency": "GBP",
|
||
|
"amount": "1",
|
||
|
"amount_xmr": "0.3",
|
||
|
"reference": "TEST-2",
|
||
|
}
|
||
|
|
||
|
@property
|
||
|
def test_data_copy(self):
|
||
|
return deepcopy(self.test_data)
|
||
|
|
||
|
def mock_hgetall(self, string):
|
||
|
if string == "trade.TEST-1":
|
||
|
return self.trade_1
|
||
|
elif string == "trade.TEST-2":
|
||
|
return self.trade_2
|
||
|
|
||
|
def mock_hmset(self, string, data):
|
||
|
print("HMSET", string, data)
|
||
|
|
||
|
def mock_keys(self, string):
|
||
|
return ["uuid1", "uuid2"]
|
||
|
|
||
|
def mock_get(self, string):
|
||
|
if string == "uuid1":
|
||
|
return "TEST-1"
|
||
|
elif string == "uuid2":
|
||
|
return "TEST-2"
|
||
|
|
||
|
def test_transaction(self):
|
||
|
self.transactions.transaction(self.test_data)
|
||
|
self.transactions.release_funds.assert_called_once_with("uuid1", "TEST-1")
|
||
|
|
||
|
self.transactions.release_funds = MagicMock()
|
||
|
ref_2 = self.test_data_copy
|
||
|
ref_2["data"]["reference"] = "TEST-2"
|
||
|
self.transactions.transaction(ref_2)
|
||
|
self.transactions.release_funds.assert_called_once_with("uuid2", "TEST-2")
|
||
|
|
||
|
def test_transaction_invalid(self):
|
||
|
invalid_data = self.test_data_copy
|
||
|
invalid_data["data"]["reference"] = "sss"
|
||
|
invalid_data["data"]["amount"] = 2000
|
||
|
invalid_data["data"]["currency"] = "SEK"
|
||
|
self.transactions.transaction(invalid_data)
|
||
|
self.transactions.release_funds.assert_not_called()
|
||
|
|
||
|
def test_transaction_malformed(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_no_reference_fail(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_no_reference_pass(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_no_reference_exceeds_max(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_wrong_currency(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_wrong_amount(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_pending(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_too_low(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_too_high(self):
|
||
|
pass
|
||
|
|
||
|
# def test_transaction_pending_then_completed(self):
|
||
|
# pass
|
||
|
|
||
|
def test_transaction_store_incomplete_trade(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_release_incomplete_trade(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_card_payment(self):
|
||
|
pass
|
||
|
|
||
|
def test_transaction_negative_amount(self):
|
||
|
pass
|
||
|
|
||
|
def test_release_funds(self):
|
||
|
pass
|
||
|
|
||
|
def test_new_trade(self):
|
||
|
pass
|
||
|
|
||
|
def test_find_trade(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_refs(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_ref_map(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_ref(self):
|
||
|
pass
|
||
|
|
||
|
def test_del_ref(self):
|
||
|
pass
|
||
|
|
||
|
def test_cleanup(self):
|
||
|
pass
|
||
|
|
||
|
def test_tx_to_ref(self):
|
||
|
pass
|
||
|
|
||
|
def test_ref_to_tx(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_total_usd(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_total(self):
|
||
|
pass
|
||
|
|
||
|
def test_write_to_es(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_remaining(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_open_trades_usd(self):
|
||
|
pass
|
||
|
|
||
|
def test_get_total_remaining(self):
|
||
|
pass
|
||
|
|
||
|
def get_total_with_trades(self):
|
||
|
pass
|