|
from pathlib import Path |
|
from unittest import mock |
|
|
|
import pytest |
|
from folding_studio.cli import app |
|
from folding_studio.config import API_URL, REQUEST_TIMEOUT |
|
from typer.testing import CliRunner |
|
from folding_studio.utils.headers import get_auth_headers |
|
|
|
current_workdir = Path(__file__).parent.resolve() |
|
data_dir = Path(current_workdir / "data") |
|
|
|
runner = CliRunner() |
|
|
|
|
|
@pytest.fixture(autouse=True) |
|
def mock_get_auth_headers(request): |
|
if "apikeytest" in request.keywords: |
|
return_value = get_auth_headers(api_key="MY_KEY") |
|
else: |
|
return_value = {"Authorization": "Bearer identity_token"} |
|
with mock.patch( |
|
"folding_studio.commands.experiment.get_auth_headers", return_value=return_value |
|
) as m: |
|
yield m |
|
|
|
|
|
|
|
@pytest.fixture() |
|
def mock_request_get(): |
|
with mock.patch("requests.get") as m: |
|
yield m |
|
|
|
|
|
def test_experiment_status_pass(mock_request_get: mock.Mock, headers): |
|
mock_response = mock.MagicMock() |
|
mock_response.ok = True |
|
mock_response.json.return_value = {"status": "Done."} |
|
mock_request_get.return_value = mock_response |
|
|
|
result = runner.invoke(app, ["experiment", "status", "ID"]) |
|
assert result.exit_code == 0 |
|
assert "Done." in result.stdout |
|
mock_request_get.assert_called_once_with( |
|
API_URL + "getExperimentStatus", |
|
params={"experiment_id": "ID"}, |
|
headers=headers, |
|
timeout=REQUEST_TIMEOUT, |
|
) |
|
|
|
|
|
def test_experiment_list_pass(mock_request_get: mock.Mock, tmp_files, headers): |
|
mock_response = mock.MagicMock() |
|
mock_response.ok = True |
|
mock_response.json.return_value = { |
|
"Done": ["exp_id_1", "exp_id_2"], |
|
"Pending": ["exp_id_3"], |
|
} |
|
mock_request_get.return_value = mock_response |
|
|
|
result = runner.invoke( |
|
app, ["experiment", "list", "--output", str(tmp_files["metadata_file"])] |
|
) |
|
assert result.exit_code == 0 |
|
mock_request_get.assert_called_once_with( |
|
API_URL + "getDoneAndPendingExperiments", |
|
headers=headers, |
|
timeout=REQUEST_TIMEOUT, |
|
) |
|
|