mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 14:54:21 +01:00
test: add testing for order callbacks
This commit is contained in:
90
bfxapi/utils/testing_tools.py
Normal file
90
bfxapi/utils/testing_tools.py
Normal file
@@ -0,0 +1,90 @@
|
||||
import time
|
||||
import json
|
||||
import asyncio
|
||||
|
||||
from .. import Client, BfxWebsocket
|
||||
|
||||
def get_now():
|
||||
return int(round(time.time() * 1000))
|
||||
|
||||
class StubbedWebsocket(BfxWebsocket):
|
||||
def __new__(cls, *args, **kwargs):
|
||||
instance = super(StubbedWebsocket, cls).__new__(cls, *args, **kwargs)
|
||||
instance.sent_items = []
|
||||
instance.published_items = []
|
||||
return instance
|
||||
|
||||
async def _main(self, host):
|
||||
print ("Faking wesocket connection to {}".format(host))
|
||||
|
||||
def get_ws(self):
|
||||
return self
|
||||
|
||||
async def publish(self, data, is_json=True):
|
||||
self.published_items += [{
|
||||
'time': get_now(),
|
||||
'data': data
|
||||
}]
|
||||
# convert to string and push through the websocket
|
||||
data = json.dumps(data) if is_json else data
|
||||
return await self.on_message(data)
|
||||
|
||||
async def publish_auth_confirmation(self):
|
||||
return self.publish({"event":"auth","status":"OK","chanId":0,"userId":269499,"auth_id":"58aa0472-b1a9-4690-8ab8-300d68e66aaf","caps":{"orders":{"read":1,"write":1},"account":{"read":1,"write":0},"funding":{"read":1,"write":1},"history":{"read":1,"write":0},"wallets":{"read":1,"write":1},"withdraw":{"read":0,"write":1},"positions":{"read":1,"write":1}}})
|
||||
|
||||
async def send(self, data_string):
|
||||
self.sent_items += [{
|
||||
'time': get_now(),
|
||||
'data': data_string
|
||||
}]
|
||||
|
||||
def get_published_items(self):
|
||||
return self.published_items
|
||||
|
||||
def get_sent_items(self):
|
||||
return self.sent_items
|
||||
|
||||
def get_last_sent_item(self):
|
||||
return self.sent_items[-1:][0]
|
||||
|
||||
def get_sent_items_count(self):
|
||||
return len(self.sent_items)
|
||||
|
||||
class EventWatcher():
|
||||
|
||||
def __init__(self, ws, event):
|
||||
self.value = None
|
||||
self.event = event
|
||||
ws.once(event, self._finish)
|
||||
|
||||
def _finish(self, value):
|
||||
self.value = value or {}
|
||||
|
||||
@classmethod
|
||||
def watch(cls, ws, event):
|
||||
return EventWatcher(ws, event)
|
||||
|
||||
def wait_until_complete(self, max_wait_time=5):
|
||||
counter = 0
|
||||
while self.value == None:
|
||||
if counter > 5:
|
||||
raise Exception('Wait time limit exceeded for event {}'.format(self.event))
|
||||
time.sleep(1)
|
||||
counter += 1
|
||||
return self.value
|
||||
|
||||
def create_stubbed_client(*args, **kwargs):
|
||||
client = Client(*args, **kwargs)
|
||||
# no support for rest stubbing yet
|
||||
client.rest = None
|
||||
client.ws = StubbedWebsocket(*args, **kwargs)
|
||||
return client
|
||||
|
||||
async def ws_publish_auth_accepted(ws):
|
||||
return await ws.publish({"event":"auth","status":"OK","chanId":0,"userId":269499,"auth_id":"58aa0472-b1a9-4690-8ab8-300d68e66aaf","caps":{"orders":{"read":1,"write":1},"account":{"read":1,"write":0},"funding":{"read":1,"write":1},"history":{"read":1,"write":0},"wallets":{"read":1,"write":1},"withdraw":{"read":0,"write":1},"positions":{"read":1,"write":1}}})
|
||||
|
||||
async def ws_publish_connection_init(ws):
|
||||
return await ws.publish({"event":"info","version":2,"serverId":"748c00f2-250b-46bb-8519-ce1d7d68e4f0","platform":{"status":1}})
|
||||
|
||||
async def ws_publish_conf_accepted(ws, flags_code):
|
||||
return await ws.publish({"event":"conf","status":"OK","flags":flags_code})
|
||||
Reference in New Issue
Block a user