use aurabase::{AuraClient, AuraClientOptions};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
struct Sensor {
id: uuid::Uuid,
value: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct NewSensor {
value: f64,
}
#[tokio::test]
async fn test_client_init_and_query_builder_compiles() {
let url = "http://localhost:8080";
let key = "aura_anon_test_key";
let client = AuraClient::new(url, key, None);
assert_eq!(client.base_url(), url);
assert_eq!(client.api_key(), Some(key));
let options = AuraClientOptions { auth_storage: None };
let client_with_opt = AuraClient::new(url, key, Some(options));
assert_eq!(client_with_opt.base_url(), url);
let query = client
.from::<Sensor>("sensors")
.select("id,value")
.order("captured_at", "desc")
.limit(50);
let qs = query.build_query_string();
assert!(qs.contains("select="));
assert!(qs.contains("sort_by=captured_at"));
assert!(qs.contains("sort_order=desc"));
assert!(qs.contains("limit=50"));
let filtered_query = client
.from::<Sensor>("sensors")
.eq("status", "active")
.gt("value", 24.0)
.gte("value", 20.0)
.lt("value", 100.0)
.lte("value", 99.9)
.neq("archived", true)
.limit(10);
let filter_qs = filtered_query.build_query_string();
assert!(filter_qs.contains("status=eq.active"));
assert!(filter_qs.contains("value=gt.24"));
let _insert_query = client
.from::<Sensor>("sensors")
.insert(NewSensor { value: 42.5 });
let _update_query = client
.from::<Sensor>("sensors")
.update("sensor-uuid", serde_json::json!({ "value": 45.0 }));
let _delete_query = client.from::<Sensor>("sensors").delete("sensor-uuid");
let channel = client.channel("room-test");
assert_eq!(channel.name, "room-test");
let _auth = client.auth();
let _storage = client.storage();
let _functions = client.functions();
let _ai = client.ai();
let _notifications = client.notifications();
}