|
|
"""Test the technical helpers module.""" |
|
|
|
|
|
import numpy as np |
|
|
import pandas as pd |
|
|
import pytest |
|
|
from extensions.technical.openbb_technical.helpers import ( |
|
|
calculate_cones, |
|
|
calculate_fib_levels, |
|
|
clenow_momentum, |
|
|
garman_klass, |
|
|
hodges_tompkins, |
|
|
parkinson, |
|
|
rogers_satchell, |
|
|
validate_data, |
|
|
yang_zhang, |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="module") |
|
|
def mock_data(top_range: int = 100): |
|
|
"""Mock data for testing.""" |
|
|
_open = pd.Series(np.arange(1, top_range)) |
|
|
_high = pd.Series(np.arange(1, top_range)) |
|
|
_low = pd.Series(np.arange(1, top_range)) |
|
|
_close = pd.Series(np.arange(1, top_range)) |
|
|
_volume = pd.Series(np.arange(1, top_range)) |
|
|
_date = pd.Series(pd.date_range("2021-01-01", periods=top_range - 1, freq="D")) |
|
|
return pd.DataFrame( |
|
|
{ |
|
|
"open": _open, |
|
|
"high": _high, |
|
|
"low": _low, |
|
|
"close": _close, |
|
|
"volume": _volume, |
|
|
"date": _date, |
|
|
} |
|
|
).set_index("date") |
|
|
|
|
|
|
|
|
def test_parkinson_with_mock_data(mock_data): |
|
|
"""Test parkinson with valid input.""" |
|
|
result = parkinson(mock_data) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_garman_klass_with_mock_data(mock_data): |
|
|
"""Test garman_klass with valid input.""" |
|
|
result = garman_klass(mock_data) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_hodges_tompkins_with_mock_data(mock_data): |
|
|
"""Test hodges_tompkins with valid input.""" |
|
|
result = hodges_tompkins(mock_data) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_rogers_satchell_with_mock_data(mock_data): |
|
|
"""Test rogers_satchell with valid input.""" |
|
|
result = rogers_satchell(mock_data) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_yang_zhang_with_mock_data(mock_data): |
|
|
"""Test yang_zhang with valid input.""" |
|
|
result = yang_zhang(mock_data) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_clenow_momentum_with_mock_data(mock_data): |
|
|
"""Test clenow_momentum with valid input.""" |
|
|
result = clenow_momentum(mock_data["close"]) |
|
|
assert result |
|
|
|
|
|
|
|
|
def test_calculate_cones_with_mock_data(mock_data): |
|
|
"""Test calculate_cones with valid input.""" |
|
|
result = calculate_cones( |
|
|
mock_data, |
|
|
lower_q=0.1, |
|
|
upper_q=0.9, |
|
|
is_crypto=False, |
|
|
model="std", |
|
|
) |
|
|
assert not result.empty |
|
|
|
|
|
|
|
|
def test_calculate_fib_levels_with_mock_data(mock_data): |
|
|
"""Test calculate_fib_levels with valid input.""" |
|
|
result = calculate_fib_levels(mock_data, "close") |
|
|
assert result |
|
|
|
|
|
|
|
|
def test_validate_data_with_mock_data(mock_data): |
|
|
"""Test validate_data with valid input.""" |
|
|
try: |
|
|
validate_data(mock_data["close"].tolist(), 20) |
|
|
except ValueError: |
|
|
pytest.fail("validate_data raised ValueError unexpectedly!") |
|
|
|