From 948d2ef29900c48ec26616eb48ba952aaaadd883 Mon Sep 17 00:00:00 2001 From: hjoaquim Date: Thu, 25 Jan 2024 11:05:51 +0000 Subject: [PATCH] remove charting service tests --- .../core/tests/app/test_charting_service.py | 384 ------------------ 1 file changed, 384 deletions(-) delete mode 100644 openbb_platform/core/tests/app/test_charting_service.py diff --git a/openbb_platform/core/tests/app/test_charting_service.py b/openbb_platform/core/tests/app/test_charting_service.py deleted file mode 100644 index 6e673b37f11..00000000000 --- a/openbb_platform/core/tests/app/test_charting_service.py +++ /dev/null @@ -1,384 +0,0 @@ -from typing import Callable -from unittest.mock import patch - -import pytest -from openbb_core.app.charting_service import ( - Chart, - ChartingService, - ChartingServiceError, -) -from openbb_core.app.model.system_settings import SystemSettings -from openbb_core.app.model.user_settings import UserSettings - - -@pytest.fixture(autouse=True) -def setup_and_teardown(): - # Code to run before each test function - yield # This is where the test function runs - # Code to run after each test function - ChartingService._instances = {} - - -# fixture for system_settings -@pytest.fixture() -def system_settings(): - return SystemSettings() - - -# fixture for user_settings -@pytest.fixture() -def user_settings(): - return UserSettings() - - -# fixture for charting_service -@pytest.fixture() -def charting_service(user_settings, system_settings): - return ChartingService(user_settings=user_settings, system_settings=system_settings) - - -def test_charting_service(user_settings, system_settings): - assert ChartingService(user_settings=user_settings, system_settings=system_settings) - - -def test_charting_service_singleton_prop(user_settings, system_settings): - cm_1 = ChartingService(user_settings=user_settings, system_settings=system_settings) - cm_2 = ChartingService(user_settings=user_settings, system_settings=system_settings) - - assert cm_1 is cm_2 - - -def test_charting_settings(): - sys = SystemSettings(test_mode=True) - user = UserSettings(preferences={"plot_enable_pywry": False}) - - cm = ChartingService(user_settings=user, system_settings=sys) - - assert cm.charting_settings.plot_enable_pywry is False - assert cm.charting_settings.test_mode is True - - -def test_charting_settings_setter(charting_service): - sys = SystemSettings(test_mode=True) - user = UserSettings(preferences={"plot_enable_pywry": False}) - - charting_service.charting_settings = (sys, user) - - assert charting_service.charting_settings.plot_enable_pywry is False - assert charting_service.charting_settings.test_mode is True - - -@pytest.mark.parametrize( - "user_preferences_charting_extension, expected_result", - [ - ("openbb_charting", "openbb_charting"), # Matching extension names - ("openbb_charting", ChartingServiceError), # Mismatching extension names - ], -) -def test_check_and_get_charting_extension_name( - system_settings, user_preferences_charting_extension, expected_result -): - user = UserSettings( - preferences={"charting_extension": user_preferences_charting_extension} - ) - cm = ChartingService(user_settings=user, system_settings=system_settings) - - if expected_result == ChartingServiceError: - with pytest.raises(ChartingServiceError) as exc_info, patch( - "openbb_core.app.charting_service.EXTENSION_NAME", "other_extension" - ): - cm._check_and_get_charting_extension_name( - user_preferences_charting_extension - ) - assert str(exc_info.value) == ( - "The charting extension defined on user preferences must be " - "the same as the one defined in the env file." - f"diff: {user_preferences_charting_extension} != openbb_charting" - ) - else: - with patch( - "openbb_core.app.charting_service.EXTENSION_NAME", "openbb_charting" - ): - result = cm._check_and_get_charting_extension_name( - user_preferences_charting_extension - ) - assert result == expected_result - - -@patch("openbb_core.app.charting_service.ExtensionLoader") -@pytest.mark.parametrize( - "entry_point_name, extension_name, expected_result", - [ - ( - "mock_extension", - "mock_extension", - True, - ), # Extension is installed and names match - ( - "mock_extension", - "another_extension", - False, - ), # Extension is installed but names don't match - (None, "mock_extension", False), # Extension is not installed - ], -) -def test_check_charting_extension_installed( - mock_extension_loader, - charting_service, - entry_point_name, - extension_name, - expected_result, -): - class MockEntryPoint: - def __init__(self, name): - self.name = name - - # Set the return value of get_core_entry_point - if entry_point_name is not None: - mock_extension_loader.return_value.get_core_entry_point.return_value = ( - MockEntryPoint(entry_point_name) - ) - else: - mock_extension_loader.return_value.get_core_entry_point.return_value = None - - # Call the function and assert the result - result = charting_service._check_charting_extension_installed(extension_name) - assert result == expected_result - - -@pytest.mark.parametrize( - "extension_name, expected_result", - [ - ("mock_extension", "mock_module"), - ("another_extension", ChartingServiceError), - ], -) -@patch("openbb_core.app.charting_service.import_module") -@patch("openbb_core.app.charting_service.ExtensionLoader") -def test_get_extension_router( - mock_extension_loader, - mock_import_module, - charting_service, - extension_name, - expected_result, -): - class MockEntryPoint: - def __init__(self, name, module): - self.name = name - self.module = module - - mock_extension_loader.return_value.get_core_entry_point.return_value = ( - MockEntryPoint("mock_extension", "mock_module") - ) - mock_import_module.return_value = "mock_module" - - if expected_result == ChartingServiceError: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service._get_extension_router(extension_name) - assert str(exc_info.value) == ( - f"Extension '{extension_name}' is not installed." - ) - else: - result = charting_service._get_extension_router("mock_extension") - assert result == "mock_module" - - -@patch("openbb_core.app.charting_service.import_module") -def test_handle_back_end(mock_import_module, charting_service): - class MockBackend: - def __init__(self): - pass - - def start(self, debug): - pass - - class MockBackendModule: - def __init__(self): - self._backend = None - - def create_backend(self, charting_settings): - self._backend = MockBackend() - - def get_backend(self): - return self._backend - - mock_import_module.return_value = MockBackendModule() - assert ( - charting_service._handle_backend( - "mock_extension", charting_service.charting_settings - ) - is None - ) - - -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_chart_format(mock_get_extension_router, charting_service): - class MockChartingRouterModule: - CHART_FORMAT = "mock_chart_format" - - mock_get_extension_router.return_value = MockChartingRouterModule() - - assert charting_service._get_chart_format("mock_extension") == "mock_chart_format" - - -@pytest.mark.parametrize( - "route, expected_result", - [ - ("/stocks/load", ...), - ("/crypto/load", ...), - ("/ta/ema", ...), - ("wrong/route", AttributeError), - ], -) -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_chart_function( - mock_get_extension_router, charting_service, route, expected_result -): - class MockChartingRouterModule: - def stocks_load(self): - pass - - def crypto_load(self): - pass - - def ta_ema(self): - pass - - mock_get_extension_router.return_value = MockChartingRouterModule() - - if expected_result != AttributeError: - assert isinstance( - charting_service._get_chart_function("mock_extension", route), Callable - ) - else: - with pytest.raises(AttributeError) as exc_info: - charting_service._get_chart_function("mock_extension", route) - assert str(exc_info.value) == f"Attribute '{route}' not found." - - -@pytest.mark.parametrize("charting_router_module", [(...), (None)]) -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_implemented_charting_functions( - mock_get_extension_router, charting_service, charting_router_module -): - if not charting_router_module: - mock_get_extension_router.return_value = None - assert charting_service.get_implemented_charting_functions() == [] - - else: - - class MockChartingRouterModule: - __name__ = "MockChartingRouterModule" - - def stocks_load(self): - pass - - def crypto_load(self): - pass - - def ta_ema(self): - raise NotImplementedError() - - MockChartingRouterModule.stocks_load.__module__ = ( - MockChartingRouterModule.__name__ - ) - MockChartingRouterModule.crypto_load.__module__ = ( - MockChartingRouterModule.__name__ - ) - MockChartingRouterModule.ta_ema.__module__ = MockChartingRouterModule.__name__ - - mock_get_extension_router.return_value = MockChartingRouterModule - result = charting_service.get_implemented_charting_functions() - assert result == ["crypto_load", "stocks_load"] - - -@pytest.mark.parametrize( - "charting_extension_installed", - [(True), (False)], -) -@patch("openbb_core.app.charting_service.ChartingService._handle_backend") -@patch("openbb_core.app.charting_service.import_module") -@patch("openbb_core.app.charting_service.ChartingService._get_chart_format") -def test_to_chart( - mock_get_chart_format, - mock_import_module, - mock_handle_backend, - charting_service, - charting_extension_installed, -): - charting_service._charting_extension_installed = charting_extension_installed - - class MockBackendModule: - CHART_FORMAT = "plotly" - - @staticmethod - def to_chart(**kwargs): - return ("mock_fig", {"content": "mock_content"}) - - mock_import_module.return_value = MockBackendModule() - mock_get_chart_format.return_value = "plotly" - - if charting_extension_installed: - result = charting_service.to_chart() - - assert isinstance(result, Chart) - assert result.fig == "mock_fig" - assert result.content == {"content": "mock_content"} - - assert mock_handle_backend.called_once() - - else: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service.to_chart() - assert str(exc_info.value) == ( - "Charting extension `openbb_charting` is not installed" - ) - - -@pytest.mark.parametrize( - "charting_extension_installed, expected_result", - [(True, ...), (False, ChartingServiceError)], -) -@patch("openbb_core.app.charting_service.ChartingService._handle_backend") -@patch( - "openbb_core.app.charting_service.ChartingService._check_charting_extension_installed" -) -@patch("openbb_core.app.charting_service.ChartingService._get_chart_format") -@patch("openbb_core.app.charting_service.ChartingService._get_chart_function") -def test_chart( - mock_get_chart_function, - mock_get_chart_format, - mock_check_charting_extension_installed, - mock_handle_backend, - user_settings, - system_settings, - charting_service, - charting_extension_installed, - expected_result, -): - def mock_chart_function(**kwargs): - return ("mock_fig", {"content": "mock_content"}) - - mock_check_charting_extension_installed.return_value = charting_extension_installed - mock_get_chart_function.return_value = mock_chart_function - mock_get_chart_format.return_value = "plotly" - - if expected_result != ChartingServiceError: - result = charting_service.chart( - user_settings, system_settings, "/mock/route", "mock_obbject_item" - ) - - assert isinstance(result, Chart) - assert result.fig == "mock_fig" - assert result.content == {"content": "mock_content"} - - assert mock_handle_backend.called_once() - - else: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service.chart( - user_settings, system_settings, "/mock/route", "mock_obbject_item" - ) - assert str(exc_info.value) == ( - "Charting extension `openbb_charting` is not installed" - )