"""Test Economy API."""
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",
[
(
{
"provider": "nasdaq",
"start_date": "2023-10-24",
"end_date": "2023-11-03",
"country": "united_states,japan",
}
),
(
{
"provider": "tradingeconomics",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"country": "mexico,sweden",
"importance": "low",
"group": "gdp",
"calendar_id": None,
}
),
(
{
"provider": "fmp",
"start_date": "2023-10-24",
"end_date": "2023-11-03",
}
),
],
)
@pytest.mark.integration
def test_economy_calendar(params, headers):
"""Test the economy calendar 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/economy/calendar?{query_str}"
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
@parametrize(
"params",
[
(
{
"country": "spain",
"transform": "yoy",
"frequency": "annual",
"harmonized": False,
"start_date": "2020-01-01",
"end_date": "2023-06-06",
"provider": "fred",
}
),
(
{
"country": "portugal,spain",
"transform": "period",
"frequency": "monthly",
"harmonized": True,
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "fred",
}
),
(
{
"country": "portugal,spain",
"transform": "yoy",
"frequency": "quarter",
"harmonized": False,
"start_date": "2020-01-01",
"end_date": "2023-06-06",
"provider": "oecd",
"expenditure": "transport",
}
),
],
)
@pytest.mark.integration
def test_economy_cpi(params, headers):
"""Test the economy CPI 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/economy/cpi?{query_str}"
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
@parametrize(
"params",
[({"provider": "fmp"})],
)
@pytest.mark.integration
def test_economy_risk_premium(params, headers):
"""Test the economy risk premium 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/economy/risk_premium?{query_str}"