use super::*;
fn fixture(name: &str) -> String {
let manifest_dir = env!("CARGO_MANIFEST_DIR");
format!("{}/tests/fixtures/{}", manifest_dir, name)
}
#[test]
fn check_node_real_sidecar_discover_failed_no_tsconfig() {
let tmp = TempDir::new().unwrap();
let mut cmd = Command::cargo_bin("schemalint").unwrap();
cmd.current_dir(tmp.path());
let output = cmd
.args([
"check-node",
"--source",
"src/**/*.ts",
"--profile",
"openai.so.2026-04-30",
])
.output()
.unwrap();
assert!(
!output.status.success(),
"exit code should be 1 on discovery failure"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("discovery failed") || stderr.contains("discovery failed for source"),
"expected discovery failure in stderr, got:\n{stderr}"
);
assert!(
stderr.contains("tsconfig.json") || stderr.contains("failed discovery"),
"expected tsconfig.json mention or 'failed discovery', got:\n{stderr}"
);
}
#[test]
#[cfg(unix)]
fn check_node_fake_sidecar_discover_failed_few_stderr_lines() {
let script = fixture("fake_discover_error_few_stderr.sh");
let mut cmd = Command::cargo_bin("schemalint").unwrap();
let output = cmd
.args([
"check-node",
"--source",
"src/**/*.ts",
"--profile",
"openai.so.2026-04-30",
"--node-path",
&script,
])
.output()
.unwrap();
assert!(
!output.status.success(),
"exit code should be 1 when discover fails"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("fake short-stderr discovery error"),
"expected fake DiscoverFailed message, got:\n{stderr}"
);
assert!(
stderr.contains("discovery failed for source"),
"expected 'discovery failed for source' framing, got:\n{stderr}"
);
}
#[test]
#[cfg(unix)]
fn check_node_fake_sidecar_invalid_response_many_stderr_lines() {
let script = fixture("fake_invalid_response.sh");
let mut cmd = Command::cargo_bin("schemalint").unwrap();
let output = cmd
.args([
"check-node",
"--source",
"src/**/*.ts",
"--profile",
"openai.so.2026-04-30",
"--node-path",
&script,
])
.output()
.unwrap();
assert!(
!output.status.success(),
"exit code should be 1 on invalid response"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("invalid response from node helper"),
"expected InvalidResponse error, got:\n{stderr}"
);
assert!(
stderr.contains("response parse error"),
"expected parse error detail, got:\n{stderr}"
);
}
#[test]
#[cfg(unix)]
fn check_node_fake_sidecar_discover_failed_with_stderr() {
let script = fixture("fake_discover_error.sh");
let mut cmd = Command::cargo_bin("schemalint").unwrap();
let output = cmd
.args([
"check-node",
"--source",
"src/**/*.ts",
"--profile",
"openai.so.2026-04-30",
"--node-path",
&script,
])
.output()
.unwrap();
assert!(
!output.status.success(),
"exit code should be 1 on discovery failure"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("fake discovery failure: module not found"),
"expected fake DiscoverFailed message, got:\n{stderr}"
);
assert!(
stderr.contains("discovery failed for source"),
"expected 'discovery failed for source' framing, got:\n{stderr}"
);
}