Files
PlantAI-dev/tests/unit/test_kaks_reference_bundle_execute_validation.py

94 lines
2.8 KiB
Python

from __future__ import annotations
from pathlib import Path
from openpyxl import Workbook
from apps.web.vue3 import main
def _write_config(input_dir: Path, pep: Path, cds: Path) -> None:
workbook = Workbook()
sheet = workbook.active
sheet.title = "config"
sheet.append(
[
"Species_Code",
"Species_Role",
"File_Type",
"Original_File_Name",
"Ref",
]
)
sheet.append(["At", "reference", "pep", pep.name, True])
sheet.append(["At", "reference", "cds", cds.name, True])
workbook.save(input_dir / "config.xlsx")
def test_execute_validation_accepts_config_resolved_reference_pep_and_cds(
tmp_path: Path,
monkeypatch,
) -> None:
input_root = tmp_path / "input"
job_input = input_root / "job_at"
external = tmp_path / "external"
job_input.mkdir(parents=True)
external.mkdir()
pep = external / "Arabidopsis_thaliana.TAIR10.pep.all.fa"
cds = external / "Arabidopsis_thaliana.TAIR10.cds.all.fa"
pep.write_text(">AT1G01010\nMA\n", encoding="utf-8")
cds.write_text(">AT1G01010\nATGGCT\n", encoding="utf-8")
_write_config(job_input, pep, cds)
monkeypatch.setattr(main, "INPUT_ROOT", input_root)
monkeypatch.setenv("PLANTAI_REF_DATA_ROOT", str(external))
available, source = main._reference_bundle_species_available(
"job_at",
"At",
require_cds=True,
)
assert available is True
assert source == str(job_input)
def test_execute_validation_keeps_accepting_downloaded_reference_bundle(
tmp_path: Path,
monkeypatch,
) -> None:
input_root = tmp_path / "input"
species_dir = input_root / "job_spinach" / "string_taxon_3562"
species_dir.mkdir(parents=True)
(species_dir / "string_taxon_3562.pep.fasta").write_text(">S1\nMA\n", encoding="utf-8")
(species_dir / "string_taxon_3562.cds.fasta").write_text(">S1\nATGGCT\n", encoding="utf-8")
monkeypatch.setattr(main, "INPUT_ROOT", input_root)
available, source = main._reference_bundle_species_available(
"job_spinach",
"string_taxon_3562",
require_cds=True,
)
assert available is True
assert source == str(species_dir)
def test_execute_validation_still_rejects_a_truly_incomplete_reference(
tmp_path: Path,
monkeypatch,
) -> None:
input_root = tmp_path / "input"
species_dir = input_root / "job_incomplete" / "At"
species_dir.mkdir(parents=True)
(species_dir / "At.pep.fasta").write_text(">AT1G01010\nMA\n", encoding="utf-8")
monkeypatch.setattr(main, "INPUT_ROOT", input_root)
available, reason = main._reference_bundle_species_available(
"job_incomplete",
"At",
require_cds=True,
)
assert available is False
assert "missing CDS" in reason