|
|
"""Test Script parser.""" |
|
|
|
|
|
from datetime import datetime, timedelta |
|
|
|
|
|
import pytest |
|
|
from openbb_cli.controllers.script_parser import ( |
|
|
match_and_return_openbb_keyword_date, |
|
|
parse_openbb_script, |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
"command, expected", |
|
|
[ |
|
|
("reset", True), |
|
|
("r", True), |
|
|
("r\n", True), |
|
|
("restart", False), |
|
|
], |
|
|
) |
|
|
def test_is_reset(command, expected): |
|
|
"""Test the is_reset function.""" |
|
|
from openbb_cli.controllers.script_parser import is_reset |
|
|
|
|
|
assert is_reset(command) == expected |
|
|
|
|
|
|
|
|
def test_match_and_return_openbb_keyword_date(): |
|
|
"""Test the match_and_return_openbb_keyword_date function.""" |
|
|
keyword = "$LASTFRIDAY" |
|
|
result = match_and_return_openbb_keyword_date(keyword) |
|
|
expected = "" |
|
|
if keyword == "$LASTFRIDAY": |
|
|
today = datetime.now() |
|
|
expected = today - timedelta(days=(today.weekday() + 3) % 7) |
|
|
if expected >= today: |
|
|
expected -= timedelta(days=7) |
|
|
expected = expected.strftime("%Y-%m-%d") |
|
|
assert result == expected |
|
|
|
|
|
|
|
|
def test_parse_openbb_script_basic(): |
|
|
"""Test the parse_openbb_script function.""" |
|
|
raw_lines = ["echo 'Hello World'"] |
|
|
error, script = parse_openbb_script(raw_lines) |
|
|
assert error == "" |
|
|
assert script == "/echo 'Hello World'" |
|
|
|
|
|
|
|
|
def test_parse_openbb_script_with_variable(): |
|
|
"""Test the parse_openbb_script function.""" |
|
|
raw_lines = ["$VAR = 2022-01-01", "echo $VAR"] |
|
|
error, script = parse_openbb_script(raw_lines) |
|
|
assert error == "" |
|
|
assert script == "/echo 2022-01-01" |
|
|
|
|
|
|
|
|
def test_parse_openbb_script_with_foreach_loop(): |
|
|
"""Test the parse_openbb_script function.""" |
|
|
raw_lines = ["foreach $$DATE in 2022-01-01,2022-01-02", "echo $$DATE", "end"] |
|
|
error, script = parse_openbb_script(raw_lines) |
|
|
assert error == "" |
|
|
assert script == "/echo 2022-01-01/echo 2022-01-02" |
|
|
|
|
|
|
|
|
def test_parse_openbb_script_with_error(): |
|
|
"""Test the parse_openbb_script function.""" |
|
|
raw_lines = ["$VAR = ", "echo $VAR"] |
|
|
error, script = parse_openbb_script(raw_lines) |
|
|
assert "Variable $VAR not given" in error |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
"line, expected", |
|
|
[ |
|
|
( |
|
|
"foreach $$VAR in 2022-01-01", |
|
|
"[red]The script has a foreach loop that doesn't terminate. Add the keyword 'end' to explicitly terminate loop[/red]", |
|
|
), |
|
|
("echo Hello World", ""), |
|
|
( |
|
|
"end", |
|
|
"[red]The script has a foreach loop that terminates before it gets started. Add the keyword 'foreach' to explicitly start loop[/red]", |
|
|
), |
|
|
], |
|
|
) |
|
|
def test_parse_openbb_script_foreach_errors(line, expected): |
|
|
"""Test the parse_openbb_script function.""" |
|
|
error, script = parse_openbb_script([line]) |
|
|
assert error == expected |
|
|
|
|
|
|
|
|
def test_date_keyword_last_friday(): |
|
|
"""Test the match_and_return_openbb_keyword_date function.""" |
|
|
today = datetime.now() |
|
|
last_friday = today - timedelta(days=(today.weekday() - 4 + 7) % 7) |
|
|
if last_friday >= today: |
|
|
last_friday -= timedelta(days=7) |
|
|
expected_date = last_friday.strftime("%Y-%m-%d") |
|
|
assert match_and_return_openbb_keyword_date("$LASTFRIDAY") == expected_date |
|
|
|