Codex Handbook
app-server-protocol/src/protocol/common_tests.rs 44 lines
use super::*;use anyhow::Result;use codex_protocol::protocol::TurnAbortReason;use pretty_assertions::assert_eq;use serde_json::json;#[test]fn client_response_payload_returns_jsonrpc_parts_and_client_response() -> Result<()> {    let (request_id, result, payload) =        ClientResponsePayload::ThreadArchive(v2::ThreadArchiveResponse {})            .into_jsonrpc_parts_and_payload(RequestId::Integer(7))?;    assert_eq!(request_id, RequestId::Integer(7));    assert_eq!(result, json!({}));    let Some(ClientResponse::ThreadArchive {        request_id,        response: _,    }) = payload.and_then(|payload| payload.into_client_response(RequestId::Integer(7)))    else {        panic!("expected thread/archive client response");    };    assert_eq!(request_id, RequestId::Integer(7));    Ok(())}#[test]fn interrupt_conversation_payload_stays_jsonrpc_only() -> Result<()> {    let (request_id, result, payload) =        ClientResponsePayload::InterruptConversation(v1::InterruptConversationResponse {            abort_reason: TurnAbortReason::Interrupted,        })        .into_jsonrpc_parts_and_payload(RequestId::Integer(8))?;    assert_eq!(request_id, RequestId::Integer(8));    assert_eq!(        result,        json!({            "abortReason": "interrupted",        })    );    assert!(payload.is_none());    Ok(())}