77 lines
2.6 KiB
Python
Executable File
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
|