diff --git a/.gitignore b/.gitignore index 39aa9026..f9bf9c80 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ temp_testing/* build dist Issues/rule_keywords/test_DeleteMolecules_changed.bngl +.jules/ +__pycache__/ diff --git a/tests/test_runner.py b/tests/test_runner.py new file mode 100644 index 00000000..3f0ed105 --- /dev/null +++ b/tests/test_runner.py @@ -0,0 +1,81 @@ +import os +import pytest +from unittest.mock import patch, MagicMock + +import bionetgen.modelapi.runner as runner + + +def test_runner_run_with_out(): + with patch("bionetgen.modelapi.runner.BNGCLI") as mock_cli_class: + with patch("os.chdir") as mock_chdir: + mock_cli_inst = MagicMock() + mock_cli_class.return_value = mock_cli_inst + mock_cli_inst.result = "mock_result" + + cur_dir = os.getcwd() + res = runner.run("test.bngl", out="out_dir") + + mock_cli_class.assert_called_once_with( + "test.bngl", + "out_dir", + runner.conf["bngpath"], + suppress=False, + timeout=None, + ) + mock_cli_inst.run.assert_called_once() + mock_chdir.assert_called_once_with(cur_dir) + assert res == "mock_result" + + +def test_runner_run_without_out(): + with patch("bionetgen.modelapi.runner.BNGCLI") as mock_cli_class: + with patch("bionetgen.modelapi.runner.TemporaryDirectory") as mock_tempdir: + with patch("os.chdir") as mock_chdir: + mock_tempdir.return_value.__enter__.return_value = "temp_dir" + mock_cli_inst = MagicMock() + mock_cli_class.return_value = mock_cli_inst + mock_cli_inst.result = "mock_result" + + cur_dir = os.getcwd() + res = runner.run("test.bngl") + + mock_cli_class.assert_called_once_with( + "test.bngl", + "temp_dir", + runner.conf["bngpath"], + suppress=False, + timeout=None, + ) + mock_cli_inst.run.assert_called_once() + mock_chdir.assert_called_once_with(cur_dir) + assert res == "mock_result" + + +def test_runner_run_exception_with_out(): + with patch("bionetgen.modelapi.runner.BNGCLI") as mock_cli_class: + with patch("os.chdir") as mock_chdir: + mock_cli_inst = MagicMock() + mock_cli_class.return_value = mock_cli_inst + mock_cli_inst.run.side_effect = RuntimeError("Run failed") + + cur_dir = os.getcwd() + with pytest.raises(RuntimeError): + runner.run("test.bngl", out="out_dir") + + mock_chdir.assert_called_once_with(cur_dir) + + +def test_runner_run_exception_without_out(): + with patch("bionetgen.modelapi.runner.BNGCLI") as mock_cli_class: + with patch("bionetgen.modelapi.runner.TemporaryDirectory") as mock_tempdir: + with patch("os.chdir") as mock_chdir: + mock_tempdir.return_value.__enter__.return_value = "temp_dir" + mock_cli_inst = MagicMock() + mock_cli_class.return_value = mock_cli_inst + mock_cli_inst.run.side_effect = RuntimeError("Run failed") + + cur_dir = os.getcwd() + with pytest.raises(RuntimeError): + runner.run("test.bngl") + + mock_chdir.assert_called_once_with(cur_dir)