use ralph::tools::search_tools;
use tempfile::TempDir;
#[test]
fn search_codebase_finds_pattern() {
let dir = TempDir::new().unwrap();
let file = dir.path().join("main.rs");
std::fs::write(&file, "fn main() {\n println!(\"hello\");\n}\n").unwrap();
let result = search_tools::search_codebase("println", dir.path()).unwrap();
assert!(result.contains("main.rs"));
assert!(result.contains("println"));
}
#[test]
fn search_codebase_no_match() {
let dir = TempDir::new().unwrap();
let file = dir.path().join("empty.rs");
std::fs::write(&file, "fn main() {}").unwrap();
let result = search_tools::search_codebase("XYZZY_NOTFOUND", dir.path()).unwrap();
assert!(result.contains("No matches"));
}
#[test]
fn search_codebase_invalid_regex_errors() {
let dir = TempDir::new().unwrap();
let result = search_tools::search_codebase("[invalid regex", dir.path());
assert!(result.is_err());
}
#[test]
fn search_codebase_shows_line_numbers() {
let dir = TempDir::new().unwrap();
let file = dir.path().join("code.rs");
std::fs::write(&file, "line1\nTODO fix this\nline3\n").unwrap();
let result = search_tools::search_codebase("TODO", dir.path()).unwrap();
assert!(result.contains("2")); assert!(result.contains("TODO fix this"));
}
#[tokio::test]
async fn search_web_without_key_returns_degradation_message() {
let result = search_tools::search_web("rust async traits", None, None)
.await
.unwrap();
assert!(result.contains("BRAVE_API_KEY") || result.contains("SERP_API_KEY"));
}