From 1837d3acd0ea86ac110bbef208adc1927de5253e Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Tue, 25 Jul 2023 17:04:15 +0200 Subject: [PATCH] Query execute unit test --- openbb_sdk/sdk/core/tests/test_query.py | 68 +++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/openbb_sdk/sdk/core/tests/test_query.py b/openbb_sdk/sdk/core/tests/test_query.py index abd5809a59e..c6f70663646 100644 --- a/openbb_sdk/sdk/core/tests/test_query.py +++ b/openbb_sdk/sdk/core/tests/test_query.py @@ -2,6 +2,7 @@ # pylint: disable=redefined-outer-name from dataclasses import dataclass +from unittest.mock import MagicMock, patch import pytest from openbb_core.app.model.command_context import CommandContext @@ -11,6 +12,7 @@ from openbb_core.app.provider_interface import ( StandardParams, ) from openbb_core.app.query import Query +from pydantic import BaseModel @pytest.fixture(scope="module") @@ -73,7 +75,65 @@ def test_filter_extra_params_wrong_param(query): assert not query.filter_extra_params(extra_params, "fmp") -@pytest.mark.skip(reason="TODO: see how to properly mock the execute method") -def test_execute(query): - """Test execute.""" - assert query.execute() +@pytest.fixture +def mock_registry(): + """Mock registry.""" + with patch( + "openbb_core.app.provider_interface.get_provider_interface" + ) as mock_get_provider_interface: + mock_registry = MagicMock() + mock_get_provider_interface.return_value.build_registry.return_value = ( + mock_registry + ) + yield mock_registry + + +def create_mock_query(): + """Mock query.""" + + class StockEOD: + """Mock StockEOD class.""" + + start_date = "2020-01-01" + end_date = "2020-01-05" + symbol = "AAPL" + + return StockEOD() + + +def create_mock_extra_params(): + """Mock ExtraParams dataclass.""" + + @dataclass + class StockEOD: + """Mock ExtraParams dataclass.""" + + sort: str = "desc" + + return StockEOD() + + +@pytest.fixture +def query_instance(): + """Set up query.""" + standard_params = create_mock_query() + extra_params = create_mock_extra_params() + + cc = CommandContext() + setattr(cc.user_settings.credentials, "fmp_api_key", "1234") + + return Query( + cc=cc, + provider_choices=ProviderChoices(provider="fmp"), + standard_params=standard_params, + extra_params=extra_params, + ) + + +def test_execute_method_fake_credentials(query_instance, mock_registry): + """Test execute method without setting credentials.""" + mock_fetch_result = BaseModel() # Replace with an actual instance of BaseModel + mock_registry.fetch.return_value = mock_fetch_result + + with pytest.raises(Exception): + query_instance.execute()