use aimo_client::types::statistics::{
ProviderMetadataResponse, ProviderModelItem, UserBalanceItem, UserBalanceResponse,
};
use aimo_core::provider::{Category, Model, ModelProvider, Price, ProviderMetadata};
#[test]
fn test_category_serialization() {
let metadata = ProviderMetadata::ModelProvider(ModelProvider {
id: "test-provider".to_string(),
name: "Test Provider".to_string(),
models: vec![Model {
name: "test-model".to_string(),
display_name: String::new(),
provider_name: String::new(),
pricing: vec![Price {
token: "test-mint".to_string(),
input_price: 1000,
output_price: 2000,
}],
}],
category: Category::CompletionModel,
});
let items = ProviderModelItem::from_provider_metadata("test-id".to_string(), &metadata, None);
assert_eq!(items.len(), 1);
assert_eq!(items[0].category, "completion_model");
let response =
ProviderMetadataResponse::from_provider_metadata("test-id".to_string(), metadata);
assert_eq!(response.category, "completion_model");
}
#[test]
fn test_user_balance_serialization() {
let balance_item = UserBalanceItem {
token: "So11111111111111111111111111111111111111112".to_string(),
available: 5000,
locked: 2000,
total: 7000,
};
let balance_response = UserBalanceResponse {
balance: vec![balance_item.clone()],
};
let json = serde_json::to_string(&balance_response).unwrap();
assert!(json.contains("\"token\":\"So11111111111111111111111111111111111111112\""));
assert!(json.contains("\"available\":5000"));
assert!(json.contains("\"locked\":2000"));
assert!(json.contains("\"total\":7000"));
let deserialized: UserBalanceResponse = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized.balance.len(), 1);
assert_eq!(deserialized.balance[0].token, balance_item.token);
assert_eq!(deserialized.balance[0].available, balance_item.available);
assert_eq!(deserialized.balance[0].locked, balance_item.locked);
assert_eq!(deserialized.balance[0].total, balance_item.total);
}