wf-transcriptomes-v202/bin/workflow_glue/tests/test_summarise_sqanti.py
2026-05-05 14:10:04 +00:00

79 lines
2.3 KiB
Python

"""Tests for SQANTI summary extraction."""
import csv
import pytest
from workflow_glue import summarise_sqanti
def _args(*argv):
return summarise_sqanti.argparser().parse_args(list(argv))
def test_main_writes_summary_from_structural_category(tmp_path):
"""The standard SQANTI structural_category column should be summarised."""
sqanti_dir = tmp_path / "sqanti"
sqanti_dir.mkdir()
(sqanti_dir / "sample_classification.txt").write_text(
(
"isoform\tstructural_category\n"
"tx1\tFSM\n"
"tx2\tNIC\n"
"tx3\tFSM\n"
),
encoding="utf-8",
)
output = tmp_path / "classification_summary.tsv"
summarise_sqanti.main(
_args("--sqanti_dir", str(sqanti_dir), "--output", str(output))
)
with output.open("r", encoding="utf-8", newline="") as handle:
rows = list(csv.DictReader(handle, delimiter="\t"))
assert rows == [
{"structural_category": "FSM", "count": "2"},
{"structural_category": "NIC", "count": "1"},
]
def test_main_accepts_category_fallback_column(tmp_path):
"""Older SQANTI-style `category` columns should still be accepted."""
sqanti_dir = tmp_path / "sqanti"
sqanti_dir.mkdir()
(sqanti_dir / "sample_classification.tsv").write_text(
(
"isoform\tcategory\n"
"tx1\tnovel\n"
"tx2\tknown\n"
"tx3\tnovel\n"
),
encoding="utf-8",
)
output = tmp_path / "classification_summary.tsv"
summarise_sqanti.main(
_args("--sqanti_dir", str(sqanti_dir), "--output", str(output))
)
with output.open("r", encoding="utf-8", newline="") as handle:
rows = list(csv.DictReader(handle, delimiter="\t"))
assert rows == [
{"structural_category": "novel", "count": "2"},
{"structural_category": "known", "count": "1"},
]
def test_main_errors_when_no_classification_table_exists(tmp_path):
"""A missing SQANTI classification table should fail clearly."""
sqanti_dir = tmp_path / "sqanti"
sqanti_dir.mkdir()
output = tmp_path / "classification_summary.tsv"
with pytest.raises(
SystemExit, match="Could not find a SQANTI classification table"
):
summarise_sqanti.main(
_args("--sqanti_dir", str(sqanti_dir), "--output", str(output))
)