|
|
"""Test the base platform controller.""" |
|
|
|
|
|
from unittest.mock import MagicMock, Mock, patch |
|
|
|
|
|
import pytest |
|
|
from openbb_cli.controllers.base_platform_controller import ( |
|
|
PlatformController, |
|
|
Session, |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture |
|
|
def platform_controller(): |
|
|
"""Return a platform controller.""" |
|
|
session = Session() |
|
|
translators = {"test_command": MagicMock(), "test_menu": MagicMock()} |
|
|
translators["test_command"]._parser = Mock( |
|
|
_actions=[Mock(dest="data", choices=[], type=str, nargs=None)] |
|
|
) |
|
|
translators["test_command"].execute_func = Mock(return_value=Mock()) |
|
|
translators["test_menu"]._parser = Mock( |
|
|
_actions=[Mock(dest="data", choices=[], type=str, nargs=None)] |
|
|
) |
|
|
translators["test_menu"].execute_func = Mock(return_value=Mock()) |
|
|
|
|
|
controller = PlatformController( |
|
|
name="test", parent_path=["platform"], translators=translators |
|
|
) |
|
|
return controller |
|
|
|
|
|
|
|
|
@pytest.mark.integration |
|
|
def test_platform_controller_initialization(platform_controller): |
|
|
"""Test the initialization of the platform controller.""" |
|
|
expected_path = "/platform/test/" |
|
|
assert ( |
|
|
expected_path == platform_controller.PATH |
|
|
), "Controller path was not set correctly" |
|
|
|
|
|
|
|
|
@pytest.mark.integration |
|
|
def test_command_generation(platform_controller): |
|
|
"""Test the generation of commands.""" |
|
|
command_name = "test_command" |
|
|
mock_execute_func = Mock(return_value=(Mock(), None)) |
|
|
platform_controller.translators[command_name].execute_func = mock_execute_func |
|
|
|
|
|
platform_controller._generate_command_call( |
|
|
name=command_name, translator=platform_controller.translators[command_name] |
|
|
) |
|
|
command_method_name = f"call_{command_name}" |
|
|
assert hasattr( |
|
|
platform_controller, command_method_name |
|
|
), "Command method was not created" |
|
|
|
|
|
|
|
|
@patch( |
|
|
"openbb_cli.controllers.base_platform_controller.PlatformController._link_obbject_to_data_processing_commands" |
|
|
) |
|
|
@patch( |
|
|
"openbb_cli.controllers.base_platform_controller.PlatformController._generate_commands" |
|
|
) |
|
|
@patch( |
|
|
"openbb_cli.controllers.base_platform_controller.PlatformController._generate_sub_controllers" |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_platform_controller_calls( |
|
|
mock_sub_controllers, mock_commands, mock_link_commands |
|
|
): |
|
|
"""Test the calls of the platform controller.""" |
|
|
translators = {"test_command": Mock()} |
|
|
translators["test_command"].parser = Mock() |
|
|
translators["test_command"].execute_func = Mock() |
|
|
_ = PlatformController( |
|
|
name="test", parent_path=["platform"], translators=translators |
|
|
) |
|
|
mock_sub_controllers.assert_called_once() |
|
|
mock_commands.assert_called_once() |
|
|
mock_link_commands.assert_called_once() |
|
|
|