| """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 |
|
|