ironclaw 0.22.0

Secure personal AI assistant that protects your data and expands its capabilities on the fly
Documentation
//! Shared test helpers for OpenAI Codex provider tests.

use crate::config::OpenAiCodexConfig;

/// Build a minimal JWT for testing (header.payload.signature).
pub(crate) fn make_test_jwt(account_id: &str) -> String {
    use base64::Engine;
    let engine = base64::engine::general_purpose::URL_SAFE_NO_PAD;

    let header = engine.encode(b"{\"alg\":\"RS256\",\"typ\":\"JWT\"}");
    let payload_json = serde_json::json!({
        "sub": "user123",
        "https://api.openai.com/auth": {
            "chatgpt_account_id": account_id,
        },
    });
    let payload = engine.encode(payload_json.to_string().as_bytes());
    let sig = engine.encode(b"fake-signature");
    format!("{header}.{payload}.{sig}")
}

/// Build a test `OpenAiCodexConfig` with a given session path.
pub(crate) fn test_codex_config(session_path: std::path::PathBuf) -> OpenAiCodexConfig {
    OpenAiCodexConfig {
        model: "gpt-5.3-codex".to_string(),
        auth_endpoint: "https://auth.openai.com".to_string(),
        api_base_url: "https://chatgpt.com/backend-api/codex".to_string(),
        client_id: "test_client_id".to_string(),
        session_path,
        token_refresh_margin_secs: 300,
    }
}