twitcher 0.2.2

Find template switch mutations in genomic data
#![allow(dead_code)]
use std::{path::PathBuf, process::Output, str::FromStr as _};

use assert_cmd::cargo;

const REFERENCE_PATH: &str = "tests/data/reference";

fn reference_path() -> Option<PathBuf> {
    let data_dir = std::env::var("REFERENCE_DIR")
        .map(PathBuf::from)
        .unwrap_or_else(|_| PathBuf::from_str(REFERENCE_PATH).unwrap());
    if data_dir.exists() {
        for file in data_dir.read_dir().unwrap() {
            let file = file.unwrap().path();
            if file.to_str().unwrap().ends_with(".fa.gz") {
                return Some(file);
            }
        }
    }
    None
}

pub fn ref_path() -> String {
    let Some(path) = reference_path() else {
        panic!(
            "Reference not found. You can download the reference file by running `bash ./cli/tests/download_reference.sh`.",
        );
    };
    path.to_str().unwrap().to_string()
}

pub fn twitcher_with_ref(additional_args: &str) -> Output {
    let fa = ref_path();
    let mut args = vec!["vcf", "--reference", &fa];
    args.extend(additional_args.split_whitespace());
    let mut cmd = cargo::cargo_bin_cmd!("twitcher");
    cmd.args(args);
    cmd.unwrap()
}

/// Run twitcher with an explicit argument list (no whitespace splitting).
pub fn twitcher_cmd(args: &[&str]) -> Output {
    let mut cmd = cargo::cargo_bin_cmd!("twitcher");
    cmd.args(args);
    cmd.unwrap()
}