File size: 2,051 Bytes
44459bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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,
    )