Codex Handbook
backend-client/src/client/rate_limit_resets_tests.rs 71 lines
use super::*;use crate::types::ConsumeRateLimitResetCreditCode;use crate::types::RateLimitResetCreditsSummary;use pretty_assertions::assert_eq;#[test]fn rate_limit_reset_contract_uses_expected_paths_and_payloads() {    assert_eq!(        test_client("https://example.test", PathStyle::CodexApi).rate_limit_status_url(),        "https://example.test/api/codex/usage"    );    assert_eq!(        test_client("https://example.test", PathStyle::CodexApi)            .consume_rate_limit_reset_credit_url(),        "https://example.test/api/codex/rate-limit-reset-credits/consume"    );    assert_eq!(        test_client("https://chatgpt.com/backend-api", PathStyle::ChatGptApi)            .rate_limit_status_url(),        "https://chatgpt.com/backend-api/wham/usage"    );    assert_eq!(        test_client("https://chatgpt.com/backend-api", PathStyle::ChatGptApi)            .consume_rate_limit_reset_credit_url(),        "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consume"    );    assert_eq!(        serde_json::to_value(ConsumeRateLimitResetCreditRequest {            redeem_request_id: "redeem-123",        })        .unwrap(),        serde_json::json!({ "redeem_request_id": "redeem-123" })    );    let status: RateLimitStatusWithResetCredits = serde_json::from_value(serde_json::json!({        "plan_type": "plus",        "rate_limit_reset_credits": { "available_count": 3 }    }))    .unwrap();    assert_eq!(        status.rate_limit_reset_credits,        Some(RateLimitResetCreditsSummary { available_count: 3 })    );    let response: ConsumeRateLimitResetCreditResponse = serde_json::from_value(serde_json::json!({        "code": "reset",        "credit": { "id": "ignored-by-cli" },        "windows_reset": 2    }))    .unwrap();    assert_eq!(        response,        ConsumeRateLimitResetCreditResponse {            code: ConsumeRateLimitResetCreditCode::Reset,            windows_reset: 2,        }    );}fn test_client(base_url: &str, path_style: PathStyle) -> Client {    Client {        base_url: base_url.to_string(),        http: reqwest::Client::new(),        auth_provider: codex_model_provider::unauthenticated_auth_provider(),        user_agent: None,        chatgpt_account_id: None,        chatgpt_account_is_fedramp: false,        path_style,    }}