enigma-node-client 0.0.1

HTTP client for Enigma node services (registry/resolve/announce/sync/nodes) using canonical enigma-node-types.
Documentation
use enigma_node_types::RegisterRequest;

use super::{client_for, sample_identity, spawn_server, stop_server};
use crate::error::EnigmaNodeClientError;
use crate::{NodeClient, NodeClientConfig};

#[tokio::test]
async fn rejects_invalid_base_url() {
    let err = NodeClient::new("ftp://invalid", NodeClientConfig::default()).unwrap_err();
    assert!(matches!(err, EnigmaNodeClientError::InvalidBaseUrl));
}

#[tokio::test]
async fn rejects_invalid_user_id_hex() {
    let server = spawn_server().await;
    let client = client_for(&server.base_url);
    let err = client.resolve("not-a-hex").await.unwrap_err();
    assert!(matches!(err, EnigmaNodeClientError::InvalidUserIdHex));
    stop_server(server).await;
}

#[tokio::test]
async fn register_wrong_path_returns_status() {
    let server = spawn_server().await;
    let bad_base = format!("{}/bad", server.base_url);
    let client = NodeClient::new(bad_base, NodeClientConfig::default()).unwrap();
    let identity = sample_identity("carol");
    let err = client
        .register(RegisterRequest { identity })
        .await
        .unwrap_err();
    match err {
        EnigmaNodeClientError::Status(code) => assert!(code >= 400),
        _ => panic!("unexpected error"),
    }
    stop_server(server).await;
}