mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-28 04:52:07 +00:00
377 lines
10 KiB
Python
377 lines
10 KiB
Python
"""Test WebSockets API Integration."""
|
|
|
|
import base64
|
|
|
|
import pytest
|
|
import requests
|
|
from extensions.tests.conftest import parametrize
|
|
from openbb_core.env import Env
|
|
from openbb_core.provider.utils.helpers import get_querystring
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def headers():
|
|
"""Get the headers for the API request."""
|
|
userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}"
|
|
userpass_bytes = userpass.encode("ascii")
|
|
base64_bytes = base64.b64encode(userpass_bytes)
|
|
|
|
return {"Authorization": f"Basic {base64_bytes.decode('ascii')}"}
|
|
|
|
|
|
# pylint: disable=redefined-outer-name
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
(
|
|
{
|
|
"name": "test_fmp",
|
|
"provider": "fmp",
|
|
"symbol": "btcusd,dogeusd",
|
|
"asset_type": "crypto",
|
|
"auth_token": None,
|
|
"results_file": None,
|
|
"save_results": False,
|
|
"table_name": "records",
|
|
"limit": 10,
|
|
"sleep_time": 0.25,
|
|
"broadcast_host": "0.0.0.0", # noqa: S104
|
|
"broadcast_port": 6666,
|
|
"start_broadcast": False,
|
|
"connect_kwargs": None,
|
|
}
|
|
),
|
|
(
|
|
{
|
|
"name": "test_tiingo",
|
|
"provider": "tiingo",
|
|
"symbol": "btcusd,dogeusd",
|
|
"asset_type": "crypto",
|
|
"feed": "trade_and_quote",
|
|
"auth_token": None,
|
|
"results_file": None,
|
|
"save_results": False,
|
|
"table_name": "records",
|
|
"limit": 10,
|
|
"sleep_time": 0.25,
|
|
"broadcast_host": "0.0.0.0", # noqa: S104
|
|
"broadcast_port": 6666,
|
|
"start_broadcast": False,
|
|
"connect_kwargs": None,
|
|
}
|
|
),
|
|
(
|
|
{
|
|
"name": "test_polygon",
|
|
"provider": "polygon",
|
|
"symbol": "btcusd,dogeusd",
|
|
"asset_type": "crypto",
|
|
"feed": "quote",
|
|
"auth_token": None,
|
|
"results_file": None,
|
|
"save_results": False,
|
|
"table_name": "records",
|
|
"limit": 10,
|
|
"sleep_time": 0.25,
|
|
"broadcast_host": "0.0.0.0", # noqa: S104
|
|
"broadcast_port": 6666,
|
|
"start_broadcast": False,
|
|
"connect_kwargs": None,
|
|
}
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_create_connection(params, headers):
|
|
"""Test the websockets_create_connection endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/create_connection?{query_str}"
|
|
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
res = result.json()["results"]
|
|
assert isinstance(res, dict)
|
|
assert res.get("status", {}).get("is_running")
|
|
assert not res.get("status", {}).get("is_broadcasting")
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_get_results(params, headers):
|
|
"""Test the websockets_get_results endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/get_results?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_clear_results(params, headers):
|
|
"""Test the websockets_clear_results endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/clear_results?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"symbol": "ethusd",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"symbol": "ethusd",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"symbol": "ethusd",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_subscribe(params, headers):
|
|
"""Test the websockets_subscribe endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/subscribe?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
"host": "0.0.0.0", # noqa: S104
|
|
"port": 6666,
|
|
"uvicorn_kwargs": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
"host": "0.0.0.0", # noqa: S104
|
|
"port": 6667,
|
|
"uvicorn_kwargs": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
"host": "0.0.0.0", # noqa: S104
|
|
"port": 6668,
|
|
"uvicorn_kwargs": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_start_broadcasting(params, headers):
|
|
"""Test the websockets_start_broadcasting endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/start_broadcasting?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
"symbol": "ethusd",
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
"symbol": "ethusd",
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
"symbol": "ethusd",
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_unsubscribe(params, headers):
|
|
"""Test the websockets_unsubscribe endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/unsubscribe?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_stop_connection(params, headers):
|
|
"""Test the websockets_stop_connection endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/stop_connection?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_restart_connection(params, headers):
|
|
"""Test the websockets_restart_connection endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/restart_connection?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_stop_broadcasting(params, headers):
|
|
"""Test the websockets_stop_broadcasting endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/stop_broadcasting?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@parametrize(
|
|
"params",
|
|
[
|
|
{
|
|
"name": "test_fmp",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_tiingo",
|
|
"auth_token": None,
|
|
},
|
|
{
|
|
"name": "test_polygon",
|
|
"auth_token": None,
|
|
},
|
|
],
|
|
)
|
|
@pytest.mark.integration
|
|
def test_websockets_kill(params, headers):
|
|
"""Test the websockets_kill endpoint."""
|
|
params = {p: v for p, v in params.items() if v}
|
|
|
|
query_str = get_querystring(params, [])
|
|
url = f"http://0.0.0.0:8000/api/v1/websockets/kill?{query_str}"
|
|
result = requests.get(url, headers=headers, timeout=10)
|
|
assert isinstance(result, requests.Response)
|
|
assert result.status_code == 200
|