use super::common::{fixture, ft};
use rust_htslib::bam::record::Aux;
use rust_htslib::bam::{Read, Reader};
use std::collections::BTreeSet;
use std::process::Command;
use tempfile::NamedTempFile;
#[test]
fn mm_strand_groups() {
let out_bam = NamedTempFile::new().unwrap();
let status = Command::new(ft())
.args([
"predict-m6a",
"-t",
"1",
fixture("revio.bam").to_str().unwrap(),
out_bam.path().to_str().unwrap(),
])
.status()
.expect("failed to spawn ft predict-m6a");
assert!(status.success(), "ft predict-m6a exited {status}");
let mut reader = Reader::from_path(out_bam.path()).expect("open predicted bam");
let mut groups: BTreeSet<String> = BTreeSet::new();
for rec in reader.records() {
let record = rec.expect("read record");
if let Ok(Aux::String(mm)) = record.aux(b"MM") {
for group in mm.split(';').filter(|g| !g.is_empty()) {
let header = group.split(',').next().unwrap_or("");
groups.insert(header.to_string());
}
}
}
let projection = groups.into_iter().collect::<Vec<_>>().join("\n");
insta::assert_snapshot!(projection);
}