Wave 6: Integration tests, golden tests, index invariant tests, diff command (bd-rex, bd-2gp, bd-1ck)

This commit is contained in:
teernisse
2026-02-12 14:58:25 -05:00
parent 346fef9135
commit 398311ca4c
27 changed files with 2122 additions and 172 deletions

View File

@@ -0,0 +1,84 @@
mod helpers;
/// Delete the raw.json file from a cached alias to prove index-only reads.
fn delete_raw_json(env: &helpers::TestEnv, alias: &str) {
let raw_path = env.home_dir.join("cache").join(alias).join("raw.json");
assert!(
raw_path.exists(),
"raw.json must exist before deletion: {}",
raw_path.display()
);
std::fs::remove_file(&raw_path).expect("failed to delete raw.json");
assert!(!raw_path.exists(), "raw.json should be gone after deletion");
}
// ---------------------------------------------------------------------------
// Index-only reads: these commands must work WITHOUT raw.json
// ---------------------------------------------------------------------------
#[test]
fn test_list_does_not_read_raw_json() {
let env = helpers::TestEnv::new();
helpers::fetch_fixture(&env, "petstore.json", "petstore");
delete_raw_json(&env, "petstore");
let a = helpers::run_cmd(&env, &["list", "petstore", "--robot"]).success();
let json = helpers::parse_robot_json(&a.get_output().stdout);
assert_eq!(json["ok"], true);
assert!(json["data"]["total"].as_u64().unwrap() > 0);
}
#[test]
fn test_search_does_not_read_raw_json() {
let env = helpers::TestEnv::new();
helpers::fetch_fixture(&env, "petstore.json", "petstore");
delete_raw_json(&env, "petstore");
let a = helpers::run_cmd(&env, &["search", "petstore", "pet", "--robot"]).success();
let json = helpers::parse_robot_json(&a.get_output().stdout);
assert_eq!(json["ok"], true);
}
#[test]
fn test_tags_does_not_read_raw_json() {
let env = helpers::TestEnv::new();
helpers::fetch_fixture(&env, "petstore.json", "petstore");
delete_raw_json(&env, "petstore");
let a = helpers::run_cmd(&env, &["tags", "petstore", "--robot"]).success();
let json = helpers::parse_robot_json(&a.get_output().stdout);
assert_eq!(json["ok"], true);
}
#[test]
fn test_schemas_list_does_not_read_raw_json() {
let env = helpers::TestEnv::new();
helpers::fetch_fixture(&env, "petstore.json", "petstore");
delete_raw_json(&env, "petstore");
let a = helpers::run_cmd(&env, &["schemas", "petstore", "--robot"]).success();
let json = helpers::parse_robot_json(&a.get_output().stdout);
assert_eq!(json["ok"], true);
}
// ---------------------------------------------------------------------------
// Negative case: show REQUIRES raw.json
// ---------------------------------------------------------------------------
#[test]
fn test_show_requires_raw_json() {
let env = helpers::TestEnv::new();
helpers::fetch_fixture(&env, "petstore.json", "petstore");
delete_raw_json(&env, "petstore");
// show needs raw.json to resolve the operation pointer
helpers::run_cmd(
&env,
&["show", "petstore", "/pets", "--method", "GET", "--robot"],
)
.failure();
}