from __future__ import annotations

from codex_appserver import (
    INITIALIZE_REQUEST,
    RATE_LIMITS_REQUEST,
    CodexAppServer,
    RateLimitsReply,
)


def test_request_lines_match_json_rpc_contract() -> None:
    assert CodexAppServer().request_lines() == (
        INITIALIZE_REQUEST,
        RATE_LIMITS_REQUEST,
    )


def test_parse_rate_limits_response_handles_nested_rate_limits() -> None:
    line = (
        '{"id":2,"result":{"rateLimits":{"primary":{"usedPercent":42},'
        '"secondary":{"usedPercent":7}}}}\n'
    )

    assert CodexAppServer().parse_rate_limits_response(line) == RateLimitsReply(
        is_error=False,
        primary_used_pct=42,
        secondary_used_pct=7,
    )


def test_parse_rate_limits_response_handles_error_and_non_target_lines() -> None:
    assert CodexAppServer().parse_rate_limits_response(
        '{"id":2,"error":{"code":-32603,"message":"token_revoked"}}\n'
    ) == RateLimitsReply(is_error=True, primary_used_pct=None, secondary_used_pct=None)
    assert CodexAppServer().parse_rate_limits_response('{"id":1,"result":{"ok":true}}\n') is None
