summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiogo Sousa <montezdesousa@gmail.com>2024-05-22 12:58:57 +0100
committerDiogo Sousa <montezdesousa@gmail.com>2024-05-22 12:58:57 +0100
commite0fb1234b71e137c428f838be5807676d7d4ac51 (patch)
tree24ed4fdeef989aac540d3e29a24bf465fd8d00a7
parenta938fe5bb648a964d3ccaef8420a07128885cdf2 (diff)
unit tests
-rw-r--r--openbb_platform/core/tests/app/static/test_container.py96
1 files changed, 94 insertions, 2 deletions
diff --git a/openbb_platform/core/tests/app/static/test_container.py b/openbb_platform/core/tests/app/static/test_container.py
index dd2d7df0eff..f27688699f8 100644
--- a/openbb_platform/core/tests/app/static/test_container.py
+++ b/openbb_platform/core/tests/app/static/test_container.py
@@ -1,10 +1,102 @@
"""Test the container.py file."""
+from typing import Optional
+from unittest.mock import patch
+
+import pytest
from openbb_core.app.command_runner import CommandRunner
+from openbb_core.app.model.abstract.error import OpenBBError
+from openbb_core.app.model.defaults import Defaults
+from openbb_core.app.model.user_settings import UserSettings
from openbb_core.app.static.container import Container
+from pydantic import BaseModel, SecretStr
+
+# pylint: disable=redefined-outer-name,protected-access
+
+
+@pytest.fixture(scope="module")
+def container():
+ """Set up test container class."""
+
+ class MockCredentials(BaseModel):
+ provider_1_api_key: Optional[SecretStr] = None
+ provider_2_api_key: Optional[SecretStr] = "test_key"
+
+ MockCredentials.origins = {
+ "provider_1": ["provider_1_api_key"],
+ "provider_2": ["provider_2_api_key"],
+ "provider_3": [],
+ }
+
+ mock_user_settings = UserSettings()
+ mock_user_settings.credentials = MockCredentials()
+ mock_user_settings.defaults = Defaults(
+ commands={
+ "/test/command": {"provider": "provider_1"},
+ "test.first_wins.command": {"provider": ["provider_1", "provider_2"]},
+ "test.not_available.command": {"provider": ["x", "y", "z"]},
+ }
+ )
+ return Container(CommandRunner(user_settings=mock_user_settings))
-def test_container_init():
+def test_container_init(container):
"""Test container init."""
- container = Container(CommandRunner())
assert container
+
+
+@patch("openbb_core.app.command_runner.CommandRunner.sync_run")
+def test_container__run(mock_sync_run, container):
+ """Test container _run method."""
+ container._run()
+ mock_sync_run.assert_called_once()
+
+
+def test_container__check_credentials(container):
+ """Test container _check_credentials method."""
+ assert container._check_credentials("provider_1") is False
+ assert container._check_credentials("provider_2") is True
+ assert container._check_credentials("provider_3") is True
+
+
+@pytest.mark.parametrize(
+ "choice, command, default_priority, expected, error_msg",
+ [
+ # Provider set in args
+ ("fmp", ..., ..., "fmp", None),
+ # Provider not set in args or config, fallback to provider without keys
+ (
+ None,
+ "test.no_config.command",
+ ("provider_1", "provider_3"),
+ "provider_3",
+ None,
+ ),
+ # Provider priority set in config, first with key wins
+ (
+ None,
+ "test.first_wins.command",
+ ("provider_1", "provider_2", "provider_3"),
+ "provider_2",
+ None,
+ ),
+ # Provider priority set in config, with providers not available for the command
+ (
+ None,
+ "test.not_available.command",
+ ("provider_1", "provider_2"),
+ OpenBBError,
+ "Fallback failed, please specify the provider. Tried: x, y, z.",
+ ),
+ ],
+)
+def test_container__get_provider(
+ choice, command, default_priority, expected, error_msg, container
+):
+ """Test container _get_provider method."""
+ if expected is OpenBBError:
+ with pytest.raises(expected, match=error_msg):
+ container._get_provider(choice, command, default_priority)
+ else:
+ result = container._get_provider(choice, command, default_priority)
+ assert result == expected