From 3e8043f97aa915bd4c421a5964c552f5eab23ab6 Mon Sep 17 00:00:00 2001 From: Henrique Joaquim Date: Fri, 13 Oct 2023 11:39:33 +0100 Subject: [PATCH] obbject tests (#5558) * obbject tests * ruff * fix dev_install * fix unittests * black on nox * black on nox * nox * fix fetcher test so it can compare dates * fix intrinio tests * ruff --- noxfile.py | 4 +- openbb_platform/dev_install.py | 1 - .../economy/integration/test_economy_api.py | 12 ++- .../platform/core/integration/test_obbject.py | 86 +++++++++++++++++++ .../core/tests/app/model/test_obbject.py | 1 + .../openbb_provider/abstract/fetcher.py | 1 - .../openbb_intrinio/models/options_chains.py | 2 + 7 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 openbb_platform/platform/core/integration/test_obbject.py diff --git a/noxfile.py b/noxfile.py index 7acd1a4fcb6..47ba73a7ec3 100644 --- a/noxfile.py +++ b/noxfile.py @@ -15,4 +15,6 @@ def tests(session): ) session.install("pytest") session.install("pytest-cov") - session.run("pytest", *test_locations, "--cov=openbb_platform/") + session.run( + "pytest", *test_locations, "--cov=openbb_platform/", "-m", "not integration" + ) diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index 44fdf12800f..2ed5c70e300 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -37,7 +37,6 @@ openbb-alpha-vantage = { path = "./providers/alpha_vantage", optional = true, de openbb-cboe = { path = "./providers/cboe", optional = true, develop = true } openbb-quandl = { path = "./providers/quandl", optional = true, develop = true } openbb-yfinance = { path = "./providers/yfinance", optional = true, develop = true } -openbb-oecd= { path = "./providers/oecd", optional = true, develop = true } openbb-charting = { path = "./extensions/charting", optional = true, develop = true } openbb-futures = { path = "./extensions/futures", optional = true, develop = true } diff --git a/openbb_platform/extensions/economy/integration/test_economy_api.py b/openbb_platform/extensions/economy/integration/test_economy_api.py index 8ef75b75adc..af175cf83ff 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_api.py +++ b/openbb_platform/extensions/economy/integration/test_economy_api.py @@ -471,7 +471,17 @@ def test_economy_gdpforecast(params, headers): @pytest.mark.parametrize( "params", - [({"start_date": "2023-01-01", "end_date": "2023-06-06", "country": "Portugal"})], + [ + ( + { + "start_date": "2023-01-01", + "end_date": "2023-06-06", + "country": "Portugal", + "group": "gdp", + "importance": 3, + } + ) + ], ) @pytest.mark.integration def test_economy_econcal(params, headers): diff --git a/openbb_platform/platform/core/integration/test_obbject.py b/openbb_platform/platform/core/integration/test_obbject.py new file mode 100644 index 00000000000..5162661351b --- /dev/null +++ b/openbb_platform/platform/core/integration/test_obbject.py @@ -0,0 +1,86 @@ +import contextlib +import sys + +import pytest + +with contextlib.suppress(ImportError): + import polars as pl + +with contextlib.suppress(ImportError): + import pandas as pd + +with contextlib.suppress(ImportError): + import numpy as np + +with contextlib.suppress(ImportError): + from openbb_charting.core.openbb_figure import OpenBBFigure + + +@pytest.fixture(scope="session") +def obb(pytestconfig): + """Fixture to setup obb.""" + + if pytestconfig.getoption("markexpr") != "not integration": + import openbb + + return openbb.obb + + +@pytest.mark.skipif("pandas" not in sys.modules, reason="pandas not installed") +@pytest.mark.integration +def test_to_dataframe(obb): + """Test obbject to dataframe.""" + + stocks_df = obb.stocks.load("AAPL", provider="fmp").to_dataframe() + assert isinstance(stocks_df, pd.DataFrame) + + +@pytest.mark.skipif("polars" not in sys.modules, reason="polars not installed") +@pytest.mark.integration +def test_to_polars(obb): + """Test obbject to polars.""" + + crypto_pl = obb.crypto.load("BTC-USD", provider="fmp").to_polars() + assert isinstance(crypto_pl, pl.DataFrame) + + +@pytest.mark.skipif("numpy" not in sys.modules, reason="numpy not installed") +@pytest.mark.integration +def test_to_numpy(obb): + """Test obbject to numpy array.""" + + cpi_np = obb.economy.cpi( + countries=["portugal", "spain", "switzerland"], frequency="annual" + ).to_numpy() + assert isinstance(cpi_np, np.ndarray) + + +@pytest.mark.integration +def test_to_dict(obb): + """Test obbject to dict.""" + + fed_dict = obb.fixedincome.fed(start_date="2010-01-01").to_dict() + assert isinstance(fed_dict, dict) + + +@pytest.mark.skipif( + "openbb_charting" not in sys.modules, reason="openbb_charting not installed" +) +@pytest.mark.integration +def test_to_chart(obb): + """Test obbject to chart.""" + + stocks_chart = obb.stocks.load("AAPL", provider="fmp").to_chart() + assert isinstance(stocks_chart, OpenBBFigure) + + +@pytest.mark.skipif( + "openbb_charting" not in sys.modules, reason="openbb_charting not installed" +) +@pytest.mark.integration +def test_show(obb): + """Test obbject to chart.""" + + stocks_data = obb.stocks.load("AAPL", provider="fmp", chart=True) + assert isinstance(stocks_data.chart.fig, OpenBBFigure) + assert stocks_data.chart.fig.show() is None diff --git a/openbb_platform/platform/core/tests/app/model/test_obbject.py b/openbb_platform/platform/core/tests/app/model/test_obbject.py index a6b8c745b9d..0f886822632 100644 --- a/openbb_platform/platform/core/tests/app/model/test_obbject.py +++ b/openbb_platform/platform/core/tests/app/model/test_obbject.py @@ -22,6 +22,7 @@ def test_fields(): assert "provider" in fields assert "warnings" in fields assert "chart" in fields + assert "extra" in fields def test_to_dataframe_no_results(): diff --git a/openbb_platform/platform/provider/openbb_provider/abstract/fetcher.py b/openbb_platform/platform/provider/openbb_provider/abstract/fetcher.py index 1abb5f23853..65a8c7fda67 100644 --- a/openbb_platform/platform/provider/openbb_provider/abstract/fetcher.py +++ b/openbb_platform/platform/provider/openbb_provider/abstract/fetcher.py @@ -2,7 +2,6 @@ # ruff: noqa: S101 # pylint: disable=E1101 - from typing import Any, Dict, Generic, Optional, TypeVar, get_args, get_origin from openbb_provider.abstract.data import Data diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/options_chains.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/options_chains.py index ec79b7c9fd5..e48e4689e71 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/options_chains.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/options_chains.py @@ -61,6 +61,8 @@ class IntrinioOptionsChainsFetcher( if params.get("date") is None: transform_params["date"] = (now - timedelta(days=1)).strftime("%Y-%m-%d") + transform_params["date"] = parser.parse(transform_params["date"]).date() + return IntrinioOptionsChainsQueryParams(**transform_params) @staticmethod