#[cfg(test)]
mod package_smoke {
use crate::admin_auth::*;
use crate::kv::*;
#[test]
fn admin_auth_client_is_importable() {
assert!(std::mem::size_of::<AdminAuthClient>() > 0);
}
#[test]
fn kv_client_is_importable() {
assert!(std::mem::size_of::<KvClient>() > 0);
}
#[test]
fn push_client_is_importable() {
use crate::push::PushClient;
assert!(std::mem::size_of::<PushClient>() > 0);
}
#[test]
fn functions_client_is_importable() {
use crate::functions::FunctionsClient;
assert!(std::mem::size_of::<FunctionsClient>() > 0);
}
#[test]
fn analytics_client_is_importable() {
use crate::analytics::AnalyticsClient;
assert!(std::mem::size_of::<AnalyticsClient>() > 0);
}
#[test]
fn d1_client_is_importable() {
use crate::d1::D1Client;
assert!(std::mem::size_of::<D1Client>() > 0);
}
#[test]
fn vectorize_client_is_importable() {
use crate::vectorize::VectorizeClient;
assert!(std::mem::size_of::<VectorizeClient>() > 0);
}
}
#[cfg(test)]
mod edgebase_construction_tests {
use crate::edgebase::EdgeBase;
#[test]
fn server_creates_instance() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test");
assert!(eb.is_ok());
}
#[test]
fn server_strips_trailing_slash() {
let eb = EdgeBase::server("http://localhost:8688/", "sk_test");
assert!(eb.is_ok());
}
#[test]
fn server_with_empty_key() {
let eb = EdgeBase::server("http://localhost:8688", "");
assert!(eb.is_ok());
}
#[test]
fn admin_auth_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _auth = eb.admin_auth();
}
#[test]
fn storage_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _storage = eb.storage();
}
#[test]
fn kv_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _kv = eb.kv("my-namespace");
}
#[test]
fn d1_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _d1 = eb.d1("my-db");
}
#[test]
fn vector_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _vec = eb.vector("my-index");
}
#[test]
fn push_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _push = eb.push();
}
#[test]
fn functions_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _functions = eb.functions();
}
#[test]
fn analytics_returns_client() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _analytics = eb.analytics();
}
#[test]
fn db_shared_returns_ref() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _db = eb.db("shared", None);
}
#[test]
fn db_workspace_with_id_returns_ref() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let _db = eb.db("workspace", Some("ws-123"));
}
#[test]
fn db_returns_table_ref() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("shared", None).table("posts");
assert_eq!(t.name(), "posts");
}
#[test]
fn db_with_instance_returns_table_ref() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("workspace", Some("ws-456")).table("items");
assert_eq!(t.name(), "items");
}
}
#[cfg(test)]
mod kv_unit_tests {
use crate::kv::KvClient;
#[test]
fn kv_client_type_size_nonzero() {
assert!(std::mem::size_of::<KvClient>() > 0);
}
#[test]
fn kv_client_namespace_stored() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let kv = eb.kv("my-cache");
assert_eq!(kv.namespace, "my-cache");
}
#[test]
fn kv_client_different_namespaces() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let kv1 = eb.kv("cache-1");
let kv2 = eb.kv("cache-2");
assert_ne!(kv1.namespace, kv2.namespace);
}
}
#[cfg(test)]
mod admin_auth_unit_tests {
use crate::admin_auth::AdminAuthClient;
#[test]
fn admin_auth_client_type_size_nonzero() {
assert!(std::mem::size_of::<AdminAuthClient>() > 0);
}
}
#[cfg(test)]
mod d1_unit_tests {
use crate::d1::D1Client;
#[test]
fn d1_client_type_size_nonzero() {
assert!(std::mem::size_of::<D1Client>() > 0);
}
#[test]
fn d1_client_database_stored() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let d1 = eb.d1("analytics");
assert_eq!(d1.database, "analytics");
}
}
#[cfg(test)]
mod vectorize_unit_tests {
use crate::vectorize::VectorizeClient;
#[test]
fn vectorize_client_type_size_nonzero() {
assert!(std::mem::size_of::<VectorizeClient>() > 0);
}
#[test]
fn vectorize_client_index_stored() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("embeddings");
assert_eq!(vc.index, "embeddings");
}
#[test]
fn vectorize_client_different_indexes() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc1 = eb.vector("embeddings");
let vc2 = eb.vector("search-index");
assert_ne!(vc1.index, vc2.index);
}
#[test]
fn vectorize_client_has_upsert_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("embeddings");
assert_eq!(vc.index, "embeddings");
}
#[test]
fn vectorize_client_has_insert_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("test-idx");
assert_eq!(vc.index, "test-idx");
}
#[test]
fn vectorize_client_has_search_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("search-idx");
assert_eq!(vc.index, "search-idx");
}
#[test]
fn vectorize_client_has_query_by_id_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("qbi-idx");
assert_eq!(vc.index, "qbi-idx");
}
#[test]
fn vectorize_client_has_get_by_ids_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("gbi-idx");
assert_eq!(vc.index, "gbi-idx");
}
#[test]
fn vectorize_client_has_delete_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("del-idx");
assert_eq!(vc.index, "del-idx");
}
#[test]
fn vectorize_client_has_describe_method() {
let eb = crate::edgebase::EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let vc = eb.vector("desc-idx");
assert_eq!(vc.index, "desc-idx");
}
}
#[cfg(test)]
mod push_unit_tests {
use crate::push::PushResult;
#[test]
fn push_result_default_values() {
let pr = PushResult::default();
assert_eq!(pr.sent, 0);
assert_eq!(pr.failed, 0);
assert_eq!(pr.removed, 0);
}
#[test]
fn push_result_debug_printable() {
let pr = PushResult { sent: 5, failed: 1, removed: 2 };
let dbg = format!("{:?}", pr);
assert!(dbg.contains("sent"));
assert!(dbg.contains("5"));
}
#[test]
fn push_result_custom_values() {
let pr = PushResult { sent: 100, failed: 0, removed: 3 };
assert_eq!(pr.sent, 100);
assert_eq!(pr.failed, 0);
assert_eq!(pr.removed, 3);
}
}
#[cfg(test)]
mod error_display_tests {
use edgebase_core::error::Error;
#[test]
fn api_error_format_contains_status() {
let err = Error::Api { status: 401, message: "Unauthorized".to_string() };
assert!(format!("{}", err).contains("401"));
}
#[test]
fn config_error_format() {
let err = Error::Config("missing service key".to_string());
assert!(format!("{}", err).contains("missing service key"));
}
#[test]
fn api_error_message_in_format() {
let err = Error::Api { status: 403, message: "Forbidden".to_string() };
assert!(format!("{}", err).contains("Forbidden"));
}
#[test]
fn api_error_500_display() {
let err = Error::Api { status: 500, message: "Server Error".to_string() };
let s = format!("{}", err);
assert!(s.contains("500"));
assert!(s.contains("Server Error"));
}
#[test]
fn url_error_display() {
let err = Error::Url("bad scheme".to_string());
assert!(format!("{}", err).contains("bad scheme"));
}
#[test]
fn api_error_404_display() {
let err = Error::Api { status: 404, message: "Not Found".to_string() };
let s = format!("{}", err);
assert!(s.contains("404"));
assert!(s.contains("Not Found"));
}
#[test]
fn api_error_429_display() {
let err = Error::Api { status: 429, message: "Too Many Requests".to_string() };
let s = format!("{}", err);
assert!(s.contains("429"));
}
}
#[cfg(test)]
mod table_via_db_tests {
use crate::edgebase::EdgeBase;
#[test]
fn table_from_shared_db() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("shared", None).table("users");
assert_eq!(t.name(), "users");
}
#[test]
fn table_from_workspace_db() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("workspace", Some("ws-1")).table("tasks");
assert_eq!(t.name(), "tasks");
}
#[test]
fn table_from_user_db() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("user", Some("user-123")).table("notes");
assert_eq!(t.name(), "notes");
}
#[test]
fn table_chainable_query_builder() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let t = eb.db("shared", None).table("posts")
.where_("status", "==", "published")
.order_by("createdAt", "desc")
.limit(10);
assert_eq!(t.name(), "posts");
}
#[test]
fn multiple_tables_from_same_db() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let db = eb.db("shared", None);
let t1 = db.table("posts");
let t2 = db.table("comments");
assert_eq!(t1.name(), "posts");
assert_eq!(t2.name(), "comments");
}
}
#[cfg(test)]
mod storage_via_edgebase_tests {
use crate::edgebase::EdgeBase;
#[test]
fn storage_bucket_name() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let b = eb.storage().bucket("avatars");
assert_eq!(b.name, "avatars");
}
#[test]
fn storage_bucket_get_url() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let url = eb.storage().bucket("images").get_url("photo.jpg");
assert!(url.contains("/api/storage/images/photo.jpg"));
}
#[test]
fn storage_multiple_buckets() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let s = eb.storage();
let b1 = s.bucket("images");
let b2 = s.bucket("documents");
assert_ne!(b1.name, b2.name);
}
}
#[cfg(test)]
mod sql_signature_tests {
use crate::edgebase::EdgeBase;
use serde_json::json;
#[test]
fn sql_accepts_numeric_params() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let future = eb.sql("shared", None, "SELECT * FROM posts WHERE views > ?", &[10]);
drop(future);
}
#[test]
fn sql_accepts_json_params() {
let eb = EdgeBase::server("http://localhost:8688", "sk_test").unwrap();
let params = [json!("published")];
let future = eb.sql(
"shared",
None,
"SELECT * FROM posts WHERE status = ?",
¶ms,
);
drop(future);
}
}