system2 0.1.0

An (unofficial) idiomatic Rust SDK for TypeSafe's System One model, Jev.
Documentation
//! Tests of the global client that `.ask` makes from the environment.

mod support;

use std::env;
use std::net::TcpListener;
use support::{INSTRUCTIONS, STATE, mount, noul_response, only_request, request_body};
use system2::Noul;
use system2::prelude::*;
use wiremock::MockServer;

#[tokio::test]
#[expect(unsafe_code, reason = "the test sets the environment")]
async fn ask_uses_the_global_client_from_the_environment() {
    let listener = TcpListener::bind("127.0.0.1:0").unwrap();
    let base_url = format!("http://{}", listener.local_addr().unwrap());

    // SAFETY: this test is alone in its binary, and it starts no thread before this
    unsafe {
        env::set_var("TYPESAFE_API_KEY", " env-key\n");
        env::set_var("TYPESAFE_BASE_URL", format!("{base_url}\n"));
        env::set_var("TYPESAFE_DEFAULT_MODEL", "jev-1.14.0\r\n");
    }
    let server = MockServer::builder().listener(listener).start().await;
    mount(&server, noul_response(0.92)).await;

    let answer = Noul::new(INSTRUCTIONS).unwrap().ask(STATE).await.unwrap();

    assert_eq!(answer.probability(), 0.92);
    let request = only_request(&server).await;
    assert_eq!(request.headers["authorization"], "Bearer env-key");
    assert_eq!(request_body(&request)["model"], "jev-1.14.0");
}