From f70e55fb12e513072ba1779db32daacc201516e0 Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Mon, 4 Aug 2025 02:25:04 -0700 Subject: [PATCH] [BugFix] Fix Hub Session Not Being Set After Login (#7197) * fix hub session not being set after login * try test another way, ci didn't like that one * 3.9 doesn't like staticmethod --- .../core/openbb_core/app/static/account.py | 5 ++ .../core/tests/app/static/test_app_factory.py | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/openbb_platform/core/openbb_core/app/static/account.py b/openbb_platform/core/openbb_core/app/static/account.py index 97956a2c418..3f84035b629 100644 --- a/openbb_platform/core/openbb_core/app/static/account.py +++ b/openbb_platform/core/openbb_core/app/static/account.py @@ -139,6 +139,10 @@ class Account: # noqa: D205, D400 self._hub_service.session.model_dump(mode="json"), f, indent=4 ) + self._base_app._command_runner.user_settings.profile.hub_session = getattr( + self._base_app._account._hub_service, "_session", None + ) + if return_settings: return self._base_app._command_runner.user_settings return None @@ -189,6 +193,7 @@ class Account: # noqa: D205, D400 self._base_app.user.defaults.update(incoming.defaults) if return_settings: return self._base_app._command_runner.user_settings + return None @_log_account_command # type: ignore diff --git a/openbb_platform/core/tests/app/static/test_app_factory.py b/openbb_platform/core/tests/app/static/test_app_factory.py index 9a8799be503..f2578c6a454 100644 --- a/openbb_platform/core/tests/app/static/test_app_factory.py +++ b/openbb_platform/core/tests/app/static/test_app_factory.py @@ -2,12 +2,16 @@ # pylint: disable=redefined-outer-name +from unittest.mock import PropertyMock, patch + import pytest +from openbb_core.app.model.hub.hub_session import HubSession from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.static.account import Account from openbb_core.app.static.app_factory import create_app from openbb_core.app.static.coverage import Coverage +from pydantic import SecretStr @pytest.fixture(scope="module") @@ -42,6 +46,55 @@ def test_app_account(app_factory): assert isinstance(account, Account) +# flake8: noqa: S106 # pylint: disable=W0212 +@patch("openbb_core.app.static.account.HubService", autospec=True) +def test_app_account_login(mock_hub_service, app_factory): + """Test app account login.""" + mock_hub_service.return_value.pull.return_value = UserSettings() + mock_hub_service.return_value.connect.return_value = None + + # Mock the session object + mock_session = HubSession( + access_token=SecretStr("mock_token"), + token_type="bearer", + user_uuid="mock_user_uuid", + email="test@example.com", + primary_usage="mock_usage", + ) + # We need to mock the _session attribute and session property on the HubService instance + mock_hub_service.return_value._session = mock_session + type(mock_hub_service.return_value).session = PropertyMock( + return_value=mock_session + ) + + # Get the account object from the app factory + account = app_factory.account + assert account + assert hasattr(account, "login") + assert callable(account.login) + + # Call the login method + account.login(email="test@example.com", password="password", remember_me=True) + + # Assert that the hub_session is set in the user settings + assert app_factory.user.profile.hub_session is not None + assert ( + app_factory.user.profile.hub_session.access_token.get_secret_value() + == "mock_token" + ) + + # Assert that the HubService was called correctly + mock_hub_service.return_value.connect.assert_called_once_with( + "test@example.com", "password", None + ) + mock_hub_service.return_value.pull.assert_called_once() + + # Test logout + with patch("openbb_core.app.static.account.Path.unlink") as mock_unlink: + account.logout() + mock_unlink.assert_called_once() + + def test_app_coverage(app_factory): """Test app coverage.""" coverage = app_factory.coverage