Files
catena/crates/corpus-core/tests/cli.rs
T

64 lines
1.8 KiB
Rust
Raw Normal View History

//! The schema command, as a consumer in another language would meet it.
use std::process::{Command, Output};
fn run(args: &[&str]) -> Output {
Command::new(env!("CARGO_BIN_EXE_corpus-core"))
.args(args)
.output()
.expect("the binary should run")
}
#[test]
fn a_named_record_prints_its_schema() {
let out = run(&["schema", "doc"]);
assert_eq!(out.status.code(), Some(0));
let json: serde_json::Value = serde_json::from_slice(&out.stdout).expect("valid JSON");
assert_eq!(json["title"], "Doc");
assert!(out.stderr.is_empty(), "diagnostics leaked to stdout's side");
}
#[test]
fn no_record_named_means_all_of_them() {
let out = run(&["schema"]);
assert_eq!(out.status.code(), Some(0));
let json: serde_json::Value = serde_json::from_slice(&out.stdout).expect("valid JSON");
for record in ["doc", "chunk", "hit"] {
assert!(json.get(record).is_some(), "missing {record}");
}
}
#[test]
fn an_unknown_record_is_a_usage_error_with_nothing_on_stdout() {
let out = run(&["schema", "nope"]);
assert_eq!(out.status.code(), Some(64));
assert!(out.stdout.is_empty());
assert!(!out.stderr.is_empty());
}
#[test]
fn arguments_that_mean_nothing_are_refused_rather_than_ignored() {
for args in [
vec![],
vec!["schema", "doc", "junk"],
vec!["nonsense"],
vec!["--json"],
] {
let out = run(&args);
assert_eq!(out.status.code(), Some(64), "for {args:?}");
}
}
#[test]
fn it_says_what_version_it_is() {
let out = run(&["--version"]);
assert_eq!(out.status.code(), Some(0));
let said = String::from_utf8(out.stdout).unwrap();
assert!(said.contains(env!("CARGO_PKG_VERSION")), "{said:?}");
}
#[test]
fn the_same_schema_comes_out_byte_identical_every_time() {
assert_eq!(run(&["schema", "all"]).stdout, run(&["schema", "all"]).stdout);
}