aurabase 0.1.1

Official Rust SDK for Aurabase: high-performance open-source Backend-as-a-Service (BaaS)
Documentation
//! Tests de compilation des exemples documentés dans la documentation officielle d'Aurabase.
//!
//! Ce fichier s'assure qu'aucun exemple de code Rust présent dans `/docs/sdk-rust`,
//! `/docs/getting-started` ou `README.md` ne subisse de dérive d'API par rapport au crate `aurabase`.

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() {
    // 1. Initialisation par défaut documentée
    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));

    // 2. Initialisation avec options explicites
    let options = AuraClientOptions { auth_storage: None };
    let client_with_opt = AuraClient::new(url, key, Some(options));
    assert_eq!(client_with_opt.base_url(), url);

    // 3. Construction de requêtes Database typées (Select)
    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"));

    // 4. Filtres de comparaison
    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"));

    // 5. Mutation Insert
    let _insert_query = client
        .from::<Sensor>("sensors")
        .insert(NewSensor { value: 42.5 });

    // 6. Mutation Update
    let _update_query = client
        .from::<Sensor>("sensors")
        .update("sensor-uuid", serde_json::json!({ "value": 45.0 }));

    // 7. Mutation Delete
    let _delete_query = client.from::<Sensor>("sensors").delete("sensor-uuid");

    // 8. Service Realtime
    let channel = client.channel("room-test");
    assert_eq!(channel.name, "room-test");

    // 9. Accès aux microservices
    let _auth = client.auth();
    let _storage = client.storage();
    let _functions = client.functions();
    let _ai = client.ai();
    let _notifications = client.notifications();
}