rho-coding-agent 0.27.0

A lightweight agent harness inspired by Pi
Documentation
use super::*;
use pretty_assertions::assert_eq;

fn previous_tokens() -> XaiTokens {
    XaiTokens {
        access_token: "expired-access".into(),
        refresh_token: Some("refresh".into()),
        expires_at_unix: Some(1_000),
        id_token: Some("old-id".into()),
    }
}

#[test]
fn refresh_without_expires_in_clears_stale_expiry() {
    let refreshed = merge_refreshed_tokens(
        XaiRefreshResponse {
            access_token: Some("new-access".into()),
            refresh_token: Some("new-refresh".into()),
            id_token: Some("new-id".into()),
            expires_in: None,
        },
        "refresh",
        &previous_tokens(),
        Some(10_000),
    )
    .unwrap();

    assert_eq!(
        refreshed,
        XaiTokens {
            access_token: "new-access".into(),
            refresh_token: Some("new-refresh".into()),
            expires_at_unix: None,
            id_token: Some("new-id".into()),
        }
    );
    assert!(!token_is_expiring(&refreshed));
}

#[test]
fn refresh_with_expires_in_sets_absolute_expiry() {
    let refreshed = merge_refreshed_tokens(
        XaiRefreshResponse {
            access_token: Some("new-access".into()),
            refresh_token: None,
            id_token: None,
            expires_in: Some(3_600),
        },
        "refresh",
        &previous_tokens(),
        Some(10_000),
    )
    .unwrap();

    assert_eq!(
        refreshed,
        XaiTokens {
            access_token: "new-access".into(),
            refresh_token: Some("refresh".into()),
            expires_at_unix: Some(13_600),
            id_token: Some("old-id".into()),
        }
    );
}