use aurabase::create_client;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
fn test_client(base_url: &str) -> aurabase::AuraClient {
create_client(base_url, "aura_anon_test", None)
}
#[tokio::test]
async fn nl2sql_n_emet_jamais_le_champ_schema() {
let server = MockServer::start().await;
Mock::given(method("POST"))
.and(path("/v1/ai/nl2sql"))
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
"data": { "sql": "SELECT 1 LIMIT 100", "limit": 100, "limit_injected": true }
})))
.mount(&server)
.await;
let client = test_client(&server.uri());
client
.ai()
.nl2sql(
"combien de todos",
Some(aurabase::services::ai::Nl2SqlOptions {
dialect: Some("postgres".to_string()),
..Default::default()
}),
)
.await
.expect("nl2sql() a échoué au transport");
let requests: Vec<Request> = server.received_requests().await.expect("aucune requête");
let body: serde_json::Value =
serde_json::from_slice(&requests[0].body).expect("corps non JSON");
let obj = body.as_object().expect("corps non objet");
assert!(
!obj.contains_key("schema"),
"le serveur refuse `schema` en 400 — le SDK ne doit plus l'émettre ; corps = {body}"
);
assert!(!obj.contains_key("allowed_schema"), "corps = {body}");
assert!(!obj.contains_key("schema_context"), "corps = {body}");
assert_eq!(
obj.get("question").and_then(|v| v.as_str()),
Some("combien de todos")
);
assert_eq!(
obj.get("dialect").and_then(|v| v.as_str()),
Some("postgres")
);
}