hrobot 6.1.0

Unofficial Hetzner Robot API client
Documentation
mod common;

use hrobot::{
    api::server::{Cancellation, ServerId},
    error::{ApiError, Error},
    AsyncRobot,
};
use tracing::info;
use tracing_test::traced_test;

#[tokio::test]
#[traced_test]
async fn list_servers() {
    let _ = dotenvy::dotenv().ok();

    let robot = crate::AsyncRobot::default();

    let servers = robot.list_servers().await.unwrap();
    info!("{servers:#?}");
}

#[tokio::test]
#[traced_test]
async fn get_server() {
    let _ = dotenvy::dotenv().ok();

    let robot = crate::AsyncRobot::default();

    let server = common::provisioned_server().await;
    let retrieved_server = robot.get_server(server.id).await.unwrap();

    assert_eq!(retrieved_server.name, server.name);
}

#[tokio::test]
#[traced_test]
async fn get_nonexistent_server() {
    let _ = dotenvy::dotenv().ok();

    let robot = AsyncRobot::default();

    let result = robot.get_server(ServerId(1)).await;
    info!("{result:#?}");

    assert!(matches!(
        result,
        Err(Error::Api(ApiError::ServerNotFound { .. }))
    ));
}

#[tokio::test]
#[traced_test]
async fn get_server_cancellation() {
    let _ = dotenvy::dotenv().ok();

    let robot = crate::AsyncRobot::default();

    let server = common::provisioned_server().await;
    let status = robot.get_server_cancellation(server.id).await.unwrap();
    info!("{status:#?}");
    assert!(matches!(status, Cancellation::Cancellable(_)));
}