#![allow(
clippy::unwrap_used,
clippy::expect_used,
reason = "test code — panics are acceptable failures"
)]
#![cfg(feature = "pgvector")]
mod common;
use cognee_vector::{PgVectorAdapter, VectorDB};
use serial_test::serial;
fn test_url() -> Option<String> {
std::env::var("PGVECTOR_TEST_URL").ok()
}
async fn make_adapter() -> Option<PgVectorAdapter> {
let url = test_url()?;
let db = PgVectorAdapter::new(&url, 384).await.ok()?;
if let Ok(cols) = db.list_collections().await {
for (dt, fn_) in cols {
let _ = db.delete_collection(&dt, &fn_).await;
}
}
Some(db)
}
macro_rules! pgvector_test {
($name:ident) => {
#[tokio::test]
#[serial]
async fn $name() {
let Some(db) = make_adapter().await else {
eprintln!("PGVECTOR_TEST_URL not set — skipping {}", stringify!($name));
return;
};
common::$name(&db).await;
}
};
}
pgvector_test!(test_create_and_has_collection);
pgvector_test!(test_create_duplicate_errors);
pgvector_test!(test_delete_collection);
pgvector_test!(test_list_collections);
pgvector_test!(test_index_and_collection_size);
pgvector_test!(test_empty_points_index);
pgvector_test!(test_dimension_validation);
pgvector_test!(test_upsert_overwrites);
pgvector_test!(test_index_and_search);
pgvector_test!(test_search_returns_top_k);
pgvector_test!(test_metadata_preserved);
pgvector_test!(test_uuid_round_trip);
pgvector_test!(test_delete_points);
pgvector_test!(test_batch_search);