use crate::client::JupiterApiClient;
use httpmock::prelude::*;
use std::collections::HashMap;
#[tokio::test]
async fn test_new_client() {
let client = JupiterApiClient::new();
assert!(client.is_ok());
}
#[tokio::test]
async fn test_get_prices_v3_exact_sample() {
let server = MockServer::start();
let sample_response = r#"{
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": {
"createdAt": "2024-06-05T08:55:25.527Z",
"liquidity": 4235561.009987704,
"usdPrice": 0.9997073145154354,
"blockId": 395374169,
"decimals": 6,
"priceChange24h": 0.0003915640587189741
},
"So11111111111111111111111111111111111111112": {
"createdAt": "2024-06-05T08:55:25.527Z",
"liquidity": 151608370.92457405,
"usdPrice": 127.02993218743363,
"blockId": 395374172,
"decimals": 9,
"priceChange24h": -2.231717089336497
}
}"#;
let mock = server.mock(|when, then| {
when.method(GET)
.path("/price/v3")
.query_param("ids", "So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
then.status(200)
.header("content-type", "application/json")
.body(sample_response);
});
let mut client = JupiterApiClient::new().unwrap();
client.base_url = server.base_url();
let ids = vec![
"So11111111111111111111111111111111111111112".to_string(),
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v".to_string(),
];
let result = client.get_prices(&ids).await;
mock.assert();
assert!(result.is_ok());
let prices = result.unwrap();
assert_eq!(prices.len(), 2);
let sol = prices.get("So11111111111111111111111111111111111111112").unwrap();
assert!((sol.usd_price - 127.02993218743363).abs() < f64::EPSILON * 100.0);
assert_eq!(sol.decimals, 9);
assert_eq!(sol.created_at.as_deref(), Some("2024-06-05T08:55:25.527Z"));
assert!((sol.liquidity.unwrap() - 151608370.92457405).abs() < f64::EPSILON * 100000.0);
assert_eq!(sol.block_id, Some(395374172));
assert!((sol.price_change_24h.unwrap() - (-2.231717089336497)).abs() < f64::EPSILON * 100.0);
let usdc = prices.get("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v").unwrap();
assert!((usdc.usd_price - 0.9997073145154354).abs() < f64::EPSILON);
assert_eq!(usdc.decimals, 6);
assert_eq!(usdc.created_at.as_deref(), Some("2024-06-05T08:55:25.527Z"));
assert!((usdc.liquidity.unwrap() - 4235561.009987704).abs() < f64::EPSILON * 1000.0);
assert_eq!(usdc.block_id, Some(395374169));
assert!((usdc.price_change_24h.unwrap() - 0.0003915640587189741).abs() < f64::EPSILON);
}