#![cfg(feature = "geometric-backend")]
use llmgrep::algorithm::check_magellan_available;
use llmgrep::backend::{Backend, BackendTrait, GeometricBackend};
use magellan::graph::geo_index::{scan_directory_with_progress, IndexingMode};
use magellan::graph::geometric_backend::GeometricBackend as MagellanBackend;
use std::path::Path;
fn create_test_project(dir: &Path) -> std::io::Result<()> {
std::fs::create_dir_all(dir.join("src"))?;
std::fs::write(
dir.join("src/lib.rs"),
r#"pub fn process_data(input: &str) -> String {
format!("Result: {}", input.to_uppercase())
}
pub struct DataProcessor {
value: i32,
}
impl DataProcessor {
pub fn new(value: i32) -> Self {
Self { value }
}
pub fn compute(&self) -> i32 {
self.value * 2
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_compute() {
let dp = DataProcessor::new(5);
assert_eq!(dp.compute(), 10);
}
}
"#,
)?;
std::fs::write(
dir.join("src/main.rs"),
r#"fn main() {
println!("Hello from main");
}
"#,
)?;
Ok(())
}
#[test]
fn llmgrep_magellan_integration_available() {
let result = check_magellan_available();
match result {
Ok(_) => println!("Magellan is available"),
Err(e) => println!("Magellan check returned: {:?}", e),
}
}
#[test]
fn llmgrep_opens_real_geo_db() {
let temp_dir = tempfile::tempdir().unwrap();
let db_path = temp_dir.path().join("test.geo");
let src_path = temp_dir.path().join("src");
create_test_project(temp_dir.path()).unwrap();
{
let mut backend = MagellanBackend::create(&db_path).expect("Failed to create backend");
scan_directory_with_progress(&mut backend, &src_path, None, IndexingMode::CfgFirst)
.expect("Indexing failed");
backend.save_to_disk().expect("Save failed");
}
assert!(db_path.exists(), "Database should exist");
let backend = GeometricBackend::open(&db_path);
assert!(
backend.is_ok(),
"llmgrep should be able to open the database: {:?}",
backend.err()
);
}
#[test]
fn llmgrep_complete_works_on_magellan_db() {
let temp_dir = tempfile::tempdir().unwrap();
let db_path = temp_dir.path().join("test.geo");
let src_path = temp_dir.path().join("src");
create_test_project(temp_dir.path()).unwrap();
{
let mut backend = MagellanBackend::create(&db_path).expect("Failed to create backend");
scan_directory_with_progress(&mut backend, &src_path, None, IndexingMode::CfgFirst)
.expect("Indexing failed");
backend.save_to_disk().expect("Save failed");
}
let backend = GeometricBackend::open(&db_path).expect("Failed to open");
let completions = backend.complete("process", 10).expect("Complete failed");
println!("Found {} completions", completions.len());
}
#[test]
fn llmgrep_lookup_works_on_real_geo_db() {
let temp_dir = tempfile::tempdir().unwrap();
let db_path = temp_dir.path().join("test.geo");
let src_path = temp_dir.path().join("src");
create_test_project(temp_dir.path()).unwrap();
{
let mut backend = MagellanBackend::create(&db_path).expect("Failed to create backend");
scan_directory_with_progress(&mut backend, &src_path, None, IndexingMode::CfgFirst)
.expect("Indexing failed");
backend.save_to_disk().expect("Save failed");
}
let backend = GeometricBackend::open(&db_path).expect("Failed to open");
let lookup_result = backend.lookup("process_data", db_path.to_str().unwrap());
match lookup_result {
Ok(_) => println!("Lookup succeeded"),
Err(_) => println!("Lookup returned error (expected if FQN not found)"),
}
}
#[test]
fn llmgrep_handles_empty_db_gracefully() {
let temp_dir = tempfile::tempdir().unwrap();
let db_path = temp_dir.path().join("test.geo");
{
let backend = MagellanBackend::create(&db_path).expect("Failed to create backend");
backend.save_to_disk().expect("Save failed");
}
let backend = GeometricBackend::open(&db_path);
assert!(backend.is_ok(), "Should open empty database");
let backend = backend.unwrap();
let completions = backend
.complete("anything", 10)
.expect("Complete should succeed");
assert!(
completions.is_empty(),
"Complete on empty DB should return empty results"
);
}
#[test]
fn llmgrep_full_system_smoke() {
let temp_dir = tempfile::tempdir().unwrap();
let db_path = temp_dir.path().join("test.geo");
let src_path = temp_dir.path().join("src");
create_test_project(temp_dir.path()).unwrap();
{
let mut backend =
MagellanBackend::create(&db_path).expect("Step 1: Failed to create backend");
scan_directory_with_progress(&mut backend, &src_path, None, IndexingMode::CfgFirst)
.expect("Step 1: Indexing failed");
backend.save_to_disk().expect("Step 1: Save failed");
}
{
let backend =
GeometricBackend::open(&db_path).expect("Step 2: Failed to open with llmgrep");
let completions = backend
.complete("process", 10)
.expect("Step 2: Complete failed");
println!(
"Step 2: Found {} completions for 'process'",
completions.len()
);
let completions = backend
.complete("Data", 10)
.expect("Step 2: Complete failed");
println!("Step 2: Found {} completions for 'Data'", completions.len());
}
{
let backend = GeometricBackend::open(&db_path).expect("Step 3: Failed to reopen");
let completions = backend
.complete("compute", 10)
.expect("Step 3: Complete failed");
println!(
"Step 3: Found {} completions after reopen",
completions.len()
);
}
}