"""Test path helpers.""" from pathlib import Path import pytest import typer from folding_studio.utils.input_validation import ( extract_and_validate_custom_msas, extract_and_validate_custom_templates, validate_initial_guess, ) def test_extract_and_validate_custom_templates_pass(tmp_path: Path): """Test extract and validate custom templates pass.""" test_str_paths = [ tmp_path / "template.cif", tmp_path / "dir_1/template_1.cif", tmp_path / "dir_1/template_2.cif", tmp_path / "dir_1/dir_11/template.cif", tmp_path / "dir_2/template_1.cif", tmp_path / "dir_2/template_2.cif", tmp_path / "dir_3/template_1.cif", tmp_path / "dir_3/template_2.cif", ] for path in test_str_paths: path.parent.mkdir(exist_ok=True, parents=True) path.touch() test_paths = [ tmp_path / "template.cif", tmp_path / "dir_1", tmp_path / "dir_2", tmp_path / "dir_3/template_1.cif", ] extracted_paths = extract_and_validate_custom_templates(test_paths) assert len(extracted_paths) == 6 def test_extract_and_validate_custom_templates_fails_if_unsupported(tmp_path: Path): """Test extract and validate custom templates fails if an unsupported files is passed.""" file = tmp_path / "template.txt" file.touch() test_paths = [Path(file)] with pytest.raises( typer.BadParameter, match=f"The file '{file}' is not supported." ): extract_and_validate_custom_templates(test_paths) def test_extract_and_validate_custom_msass_pass(tmp_path: Path): """Test extract and validate custom msas pass.""" test_str_paths = [ tmp_path / "msa.sto", tmp_path / "dir_1/msa_1.sto", tmp_path / "dir_1/msa_2.a3m", tmp_path / "dir_1/dir_11/msa.sto", tmp_path / "dir_2/msa_1.sto", tmp_path / "dir_2/msa_2.a3m", tmp_path / "dir_3/msa_1.sto", tmp_path / "dir_3/msa_2.a3m", ] for path in test_str_paths: path.parent.mkdir(exist_ok=True, parents=True) path.touch() test_paths = [ tmp_path / "msa.sto", tmp_path / "dir_1", tmp_path / "dir_2", tmp_path / "dir_3/msa_1.sto", ] extracted_paths = extract_and_validate_custom_msas(test_paths) assert len(extracted_paths) == 6 def test_extract_and_validate_custom_msas_fails_if_unsupported(tmp_path: Path): """Test extract and validate custom msas fails if an unsupported file is passed.""" file = tmp_path / "msa.txt" file.touch() test_paths = [Path(file)] with pytest.raises( typer.BadParameter, match=f"The file '{file}' is not supported." ): extract_and_validate_custom_templates(test_paths) @pytest.mark.parametrize( ("file", "expected_path"), [ (Path("initial_guess.cif"), Path("initial_guess.cif")), (Path("dir_1/initial_guess_1.cif"), Path("dir_1/initial_guess_1.cif")), (None, None), ], ) def test_extract_and_validate_initial_guess_path(file: str, expected_path): """Test extract and validate initial guess file path.""" validated_path = validate_initial_guess(file) assert validated_path == expected_path