use std::collections::HashMap;
use std::env;
use tx3_sdk::core::{TirEncoding, TirEnvelope};
use tx3_sdk::trp::{Client, ClientOptions, ResolveParams};
fn get_trp_endpoint() -> Option<String> {
env::var("TRP_ENDPOINT_PREPROD").ok()
}
fn get_trp_api_key() -> Option<String> {
env::var("TRP_API_KEY_PREPROD").ok()
}
fn create_trp_client() -> Option<Client> {
get_trp_endpoint().map(|endpoint| {
let mut headers = HashMap::new();
if let Some(api_key) = get_trp_api_key() {
headers.insert("dmtr-api-key".to_string(), api_key);
}
Client::new(ClientOptions {
endpoint,
headers: if headers.is_empty() {
None
} else {
Some(headers)
},
})
})
}
#[tokio::test]
async fn test_trp_resolve_invalid_tir() {
let Some(client) = create_trp_client() else {
println!("Skipping test_trp_resolve_invalid_tir: TRP_ENDPOINT_PREPROD not set");
return;
};
let invalid_params = ResolveParams {
tir: TirEnvelope {
content: "00".to_string(),
encoding: TirEncoding::Hex,
version: "v1beta0".to_string(),
},
args: serde_json::Map::new(),
env: None,
};
let result = client.resolve(invalid_params).await;
match result {
Ok(_) => {
panic!("Invalid TIR was unexpectedly accepted - expected an error");
}
Err(e) => {
println!("Invalid TIR correctly rejected: {}", e);
let error_string = e.to_string();
assert!(
error_string.contains("InvalidTirBytes")
|| error_string.contains("UnsupportedTir")
|| error_string.contains("GenericRpcError")
|| error_string.contains("invalid"),
"Error should indicate invalid TIR: {}",
error_string
);
}
}
}