use mockito::Server;
use openrouter_rust::{
OpenRouterClient,
providers::{Provider, ProvidersResponse},
};
use serde_json::json;
#[tokio::test]
async fn test_list_providers() {
let mut server = Server::new_async().await;
let mock_response = json!({
"data": [
{
"name": "OpenAI",
"slug": "openai",
"privacy_policy_url": "https://openai.com/privacy",
"terms_of_service_url": "https://openai.com/terms",
"status_page_url": "https://status.openai.com"
},
{
"name": "Anthropic",
"slug": "anthropic",
"privacy_policy_url": "https://www.anthropic.com/privacy",
"terms_of_service_url": null,
"status_page_url": null
}
]
});
let _m = server.mock("GET", "/providers")
.match_header("authorization", "Bearer test-key")
.with_status(200)
.with_header("content-type", "application/json")
.with_body(mock_response.to_string())
.create_async()
.await;
let client = OpenRouterClient::builder()
.api_key("test-key")
.base_url(&server.url())
.build()
.unwrap();
let response = client.list_providers().await.unwrap();
assert_eq!(response.data.len(), 2);
assert_eq!(response.data[0].name, "OpenAI");
assert_eq!(response.data[0].slug, "openai");
assert_eq!(response.data[0].privacy_policy_url, Some("https://openai.com/privacy".to_string()));
assert_eq!(response.data[1].name, "Anthropic");
assert_eq!(response.data[1].terms_of_service_url, None);
}
#[tokio::test]
async fn test_list_providers_empty() {
let mut server = Server::new_async().await;
let mock_response = json!({"data": []});
let _m = server.mock("GET", "/providers")
.with_status(200)
.with_header("content-type", "application/json")
.with_body(mock_response.to_string())
.create_async()
.await;
let client = OpenRouterClient::builder()
.api_key("test-key")
.base_url(&server.url())
.build()
.unwrap();
let response = client.list_providers().await.unwrap();
assert!(response.data.is_empty());
}
#[test]
fn test_provider_struct() {
let provider = Provider {
name: "Test Provider".to_string(),
slug: "test-provider".to_string(),
privacy_policy_url: Some("https://example.com/privacy".to_string()),
terms_of_service_url: None,
status_page_url: Some("https://status.example.com".to_string()),
};
assert_eq!(provider.name, "Test Provider");
assert_eq!(provider.slug, "test-provider");
assert!(provider.privacy_policy_url.is_some());
assert!(provider.terms_of_service_url.is_none());
}