Files
PlantAI-dev/tests/unit/test_pipeline_backend_member_routing.py
2026-08-03 18:42:47 +08:00

77 lines
2.6 KiB
Python
Executable File

from pathlib import Path
from apps.web.pipeline_backend import resolve_member_protein_for_stage_route
def _write(path: Path, text: str) -> Path:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(text, encoding="utf-8")
return path
def _pep(ids: list[str]) -> str:
return "".join(f">{gene_id}\nMA\n" for gene_id in ids)
def test_subfamily_evidence_route_requires_curated_members(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Os.CrR"
identified_ids = ["id1", "id2"]
_write(final_dir / f"{prefix}.identified_members.id", "\n".join(identified_ids) + "\n")
_write(final_dir / f"{prefix}.identified_members.pep.fa", _pep(identified_ids))
protein_file, error = resolve_member_protein_for_stage_route(
ws=ws,
final_dir=final_dir,
in_dir=input_dir,
prefix=prefix,
analysis_route="subfamily_evidence",
)
assert protein_file is None
assert error
assert "成员初筛确认" in error
def test_subfamily_evidence_route_uses_curated_and_regular_route_uses_final(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Os.CrR"
curated_ids = ["id1", "id3"]
final_ids = ["id1", "id2", "id3", "id4"]
curated_pep = _write(final_dir / f"{prefix}.curated_members.pep.fa", _pep(curated_ids))
_write(final_dir / f"{prefix}.curated_members.id", "\n".join(curated_ids) + "\n")
final_pep = _write(final_dir / f"{prefix}.final_members.pep.fa", _pep(final_ids))
_write(final_dir / f"{prefix}.final_members.id", "\n".join(final_ids) + "\n")
_write(
final_dir / f"{prefix}.subfamily_confirm.manifest.json",
(
'{"stage":"subfamily_confirm","status":"success",'
'"parameters":{"final_members_source_stage":"subfamily_confirm"},'
'"artifacts":{"final_members_id":{"path":"x"},"final_members_pep":{"path":"y"}}}'
),
)
subfamily_file, subfamily_error = resolve_member_protein_for_stage_route(
ws=ws,
final_dir=final_dir,
in_dir=input_dir,
prefix=prefix,
analysis_route="subfamily_evidence",
)
regular_file, regular_error = resolve_member_protein_for_stage_route(
ws=ws,
final_dir=final_dir,
in_dir=input_dir,
prefix=prefix,
analysis_route="",
)
assert subfamily_error is None
assert subfamily_file == curated_pep
assert regular_error is None
assert regular_file == final_pep