use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
const FASTQ: &str = "tests/data/small.fastq";
const FASTQ_GZ: &str = "tests/data/small.fastq.gz";
const FASTA: &str = "tests/data/small.fasta";
#[test]
fn stats_default_output_is_tsv_when_piped() {
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", FASTQ])
.assert()
.success()
.stdout(predicate::str::starts_with("file\t"))
.stdout(predicate::str::contains("n50"));
}
#[test]
fn stats_json_reports_five_reads() {
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", FASTQ, "--json"])
.assert()
.success()
.stdout(predicate::str::contains("\"read_count\": 5"))
.stdout(predicate::str::contains("\"total_bases\": 206"))
.stdout(predicate::str::contains("\"n50\""));
}
#[test]
fn count_json_reports_five_reads() {
Command::cargo_bin("biolic")
.unwrap()
.args(["count", FASTQ, "--json"])
.assert()
.success()
.stdout(predicate::str::contains("\"reads\": 5"))
.stdout(predicate::str::contains("\"bases\": 206"));
}
#[test]
fn stats_reads_gzip_input() {
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", FASTQ_GZ, "--json"])
.assert()
.success()
.stdout(predicate::str::contains("\"read_count\": 5"))
.stdout(predicate::str::contains("\"total_bases\": 206"));
}
#[test]
fn stats_reads_from_stdin() {
let data = fs::read(FASTQ).unwrap();
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", "-", "--json"])
.write_stdin(data)
.assert()
.success()
.stdout(predicate::str::contains("\"read_count\": 5"));
}
#[test]
fn stats_reads_gzip_from_stdin() {
let data = fs::read(FASTQ_GZ).unwrap();
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", "-", "--json"])
.write_stdin(data)
.assert()
.success()
.stdout(predicate::str::contains("\"read_count\": 5"));
}
#[test]
fn stats_reads_fasta() {
Command::cargo_bin("biolic")
.unwrap()
.args(["stats", FASTA, "--json"])
.assert()
.success()
.stdout(predicate::str::contains("\"read_count\": 3"))
.stdout(predicate::str::contains("\"total_bases\": 40"));
}
#[test]
fn count_reads_fasta() {
Command::cargo_bin("biolic")
.unwrap()
.args(["count", FASTA, "--json"])
.assert()
.success()
.stdout(predicate::str::contains("\"reads\": 3"))
.stdout(predicate::str::contains("\"bases\": 40"));
}
#[test]
fn help_works() {
Command::cargo_bin("biolic")
.unwrap()
.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("biolic"));
}
#[test]
fn unimplemented_module_errors_cleanly() {
Command::cargo_bin("biolic")
.unwrap()
.args(["filter", FASTQ])
.assert()
.failure();
}