use std::path::PathBuf;
use std::process::Command;
fn gtdx_bin() -> PathBuf {
let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
p.pop();
p.pop();
p.push("target/debug/gtdx");
p
}
fn fixture_spec_path() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("src/commands/openapi/fixtures/petstore-min.json")
}
fn run(cmd: &mut Command) -> (bool, String, String) {
let out = cmd.output().expect("spawn command");
(
out.status.success(),
String::from_utf8_lossy(&out.stdout).to_string(),
String::from_utf8_lossy(&out.stderr).to_string(),
)
}
#[test]
#[ignore = "requires `cargo component` + network to resolve a fresh crate's deps; run with `cargo test -- --ignored`"]
fn generated_openapi_connector_compiles() {
let tmp = tempfile::tempdir().unwrap();
let out_dir = tmp.path().join("petstore");
let (ok, stdout, stderr) = run(Command::new(gtdx_bin())
.arg("openapi")
.arg(fixture_spec_path())
.arg("--out")
.arg(&out_dir)
.arg("--name")
.arg("petstore"));
assert!(
ok,
"gtdx openapi failed\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
assert!(
out_dir.join("Cargo.toml").is_file(),
"generated connector missing Cargo.toml"
);
let (ok, stdout, stderr) = run(Command::new("cargo")
.arg("component")
.arg("bindings")
.current_dir(&out_dir));
assert!(
ok,
"cargo component bindings failed\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
assert!(
out_dir.join("src/bindings.rs").is_file(),
"cargo component bindings did not write src/bindings.rs"
);
let (ok, stdout, stderr) = run(Command::new("cargo")
.arg("check")
.env("CARGO_BUILD_JOBS", "2")
.current_dir(&out_dir));
assert!(
ok,
"cargo check (host) failed on the generated connector\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
}