|
from pathlib import Path |
|
from unittest import mock |
|
|
|
import pytest |
|
from folding_studio.cli import app |
|
from folding_studio.utils.data_model import MSARequestParams |
|
from folding_studio_data_models import ( |
|
FeatureMode, |
|
MessageStatus, |
|
MSAMessage, |
|
MSAPublication, |
|
) |
|
from typer.testing import CliRunner |
|
|
|
current_workdir = Path(__file__).parent.resolve() |
|
data_dir = Path(current_workdir / "data") |
|
|
|
runner = CliRunner() |
|
|
|
|
|
@pytest.fixture(autouse=True) |
|
def mock_get_auth_headers(): |
|
with mock.patch( |
|
"folding_studio.commands.msa.get_auth_headers", return_value={"Authorization": "Bearer identity_token"} |
|
) as m: |
|
yield m |
|
|
|
|
|
@pytest.fixture() |
|
def mock_simple_msa(request): |
|
pub = MSAPublication( |
|
message=MSAMessage( |
|
pipeline_name="msa", |
|
user_id="default-user", |
|
project_code="default-project", |
|
msa_experiment_id="dummy-experiment", |
|
model_preset="monomer", |
|
fasta_file_name="monomer.fasta", |
|
ignore_cache=False, |
|
), |
|
status=request.param, |
|
) |
|
|
|
with mock.patch( |
|
"folding_studio.commands.msa.simple_msa", |
|
return_value=pub.model_dump(mode="json"), |
|
) as m: |
|
yield m |
|
|
|
|
|
@pytest.fixture() |
|
def default_params(): |
|
yield MSARequestParams( |
|
ignore_cache=False, |
|
msa_mode=FeatureMode.SEARCH, |
|
) |
|
|
|
|
|
def test_search_with_unsupported_file_fails(tmp_files): |
|
result = runner.invoke(app, ["msa", "search", str(tmp_files["invalid_source"])]) |
|
assert result.exit_code == 2 |
|
assert "Invalid value for 'SOURCE'" in result.stdout |
|
|
|
|
|
@pytest.mark.parametrize( |
|
"mock_simple_msa", |
|
( |
|
MessageStatus.PUBLISHED, |
|
MessageStatus.NOT_PUBLISHED_DONE, |
|
MessageStatus.NOT_PUBLISHED_PENDING, |
|
), |
|
indirect=True, |
|
) |
|
def test_search_with_fasta_file_pass( |
|
mock_simple_msa: mock.Mock, |
|
tmp_files, |
|
default_params, |
|
headers, |
|
): |
|
result = runner.invoke( |
|
app, |
|
[ |
|
"msa", |
|
"search", |
|
str(tmp_files["monomer_fasta"]), |
|
"--metadata-file", |
|
str(tmp_files["metadata_file"]), |
|
], |
|
) |
|
assert result.exit_code == 0 |
|
|
|
mock_simple_msa.assert_called_once_with( |
|
file=tmp_files["monomer_fasta"], |
|
params=default_params, |
|
project_code="FOLDING_DEV" |
|
) |
|
|