File size: 4,319 Bytes
b93364a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
"""Test the Controller utils."""
import argparse
from pathlib import Path
from unittest.mock import MagicMock, patch
import pytest
from openbb_cli.controllers.utils import (
check_non_negative,
check_positive,
get_flair_and_username,
get_user_agent,
parse_and_split_input,
print_goodbye,
print_guest_block_msg,
remove_file,
welcome_message,
)
# pylint: disable=redefined-outer-name, unused-argument
@pytest.fixture
def mock_session():
"""Mock the session and its dependencies."""
with patch("openbb_cli.controllers.utils.session") as mock_session:
mock_session.console.print = MagicMock()
mock_session.is_local = MagicMock(return_value=True)
mock_session.settings.VERSION = "1.0"
mock_session.user.profile.hub_session.username = "testuser"
mock_session.settings.FLAIR = "rocket"
yield mock_session
def test_remove_file_existing_file():
"""Test removing an existing file."""
with patch("os.path.isfile", return_value=True), patch("os.remove") as mock_remove:
assert remove_file(Path("/path/to/file"))
mock_remove.assert_called_once()
def test_remove_file_directory():
"""Test removing a directory."""
with patch("os.path.isfile", return_value=False), patch(
"os.path.isdir", return_value=True
), patch("shutil.rmtree") as mock_rmtree:
assert remove_file(Path("/path/to/directory"))
mock_rmtree.assert_called_once()
def test_remove_file_failure(mock_session):
"""Test removing a file that fails."""
with patch("os.path.isfile", return_value=True), patch(
"os.remove", side_effect=Exception("Error")
):
assert not remove_file(Path("/path/to/file"))
mock_session.console.print.assert_called()
def test_print_goodbye(mock_session):
"""Test printing the goodbye message."""
print_goodbye()
mock_session.console.print.assert_called()
def test_parse_and_split_input():
"""Test parsing and splitting user input."""
user_input = "ls -f /home/user/docs/document.xlsx"
result = parse_and_split_input(user_input, [])
assert "ls" in result[0]
@pytest.mark.parametrize(
"input_command, expected_output",
[
("/", ["home"]),
("ls -f /path/to/file.txt", ["ls -f ", "path", "to", "file.txt"]),
("rm -f /home/user/docs", ["rm -f ", "home", "user", "docs"]),
],
)
def test_parse_and_split_input_special_cases(input_command, expected_output):
"""Test parsing and splitting user input with special cases."""
result = parse_and_split_input(input_command, [])
assert result == expected_output
def test_print_guest_block_msg(mock_session):
"""Test printing the guest block message."""
print_guest_block_msg()
mock_session.console.print.assert_called()
def test_welcome_message(mock_session):
"""Test printing the welcome message."""
welcome_message()
mock_session.console.print.assert_called_with(
"\nWelcome to OpenBB Platform CLI v1.0"
)
def test_get_flair_and_username(mock_session):
"""Test getting the flair and username."""
result = get_flair_and_username()
assert "testuser" in result
assert "rocket" in result
@pytest.mark.parametrize(
"value, expected",
[
("10", 10),
("0", 0),
("-1", pytest.raises(argparse.ArgumentTypeError)),
("text", pytest.raises(ValueError)),
],
)
def test_check_non_negative(value, expected):
"""Test checking for a non-negative value."""
if isinstance(expected, int):
assert check_non_negative(value) == expected
else:
with expected:
check_non_negative(value)
@pytest.mark.parametrize(
"value, expected",
[
("1", 1),
("0", pytest.raises(argparse.ArgumentTypeError)),
("-1", pytest.raises(argparse.ArgumentTypeError)),
("text", pytest.raises(ValueError)),
],
)
def test_check_positive(value, expected):
"""Test checking for a positive value."""
if isinstance(expected, int):
assert check_positive(value) == expected
else:
with expected:
check_positive(value)
def test_get_user_agent():
"""Test getting the user agent."""
result = get_user_agent()
assert result.startswith("Mozilla/5.0")
|