#![ cfg( all( feature = "builder_patterns", feature = "integration_tests" ) ) ]
use api_ollama::{
OllamaClient,
ChatRequestBuilder,
GenerateRequestBuilder,
EmbeddingsRequestBuilder,
};
mod server_helpers;
#[ tokio::test ]
async fn test_chat_request_builder_basic()
{
with_test_server!(|mut client : OllamaClient, model : String| async move {
let request = ChatRequestBuilder::new()
.model(&model)
.user_message("Hi")
.max_tokens(10)
.build()
.expect("Failed to build chat request");
let response = client.chat(request).await
.expect("Chat request should succeed - network/timeout failures must fail test loudly");
assert!(!response.message.content.is_empty(), "Response should have content");
println!( "✓ Basic chat request builder successful" );
});
}
#[ tokio::test ]
async fn test_chat_request_builder_streaming()
{
#[ cfg( feature = "streaming" ) ]
{
with_test_server!(|mut client : OllamaClient, model : String| async move {
let request = ChatRequestBuilder::new()
.model(&model)
.user_message("Count from 1 to 3")
.streaming(true)
.max_tokens(10)
.build()
.expect("Failed to build streaming chat request");
assert_eq!(request.stream, Some(true), "Should enable streaming");
let _stream = client.chat_stream(request).await
.expect("Streaming chat request should succeed - network/timeout failures must fail test loudly");
println!( "✓ Streaming chat request builder successful" );
});
}
#[ cfg( not( feature = "streaming" ) ) ]
{
println!( "⚠ Skipping streaming test - streaming feature not enabled" );
}
}
#[ tokio::test ]
async fn test_generate_request_builder_basic()
{
with_test_server!(|mut client : OllamaClient, model : String| async move {
let request = GenerateRequestBuilder::new()
.model(&model)
.prompt("Write a haiku about coding")
.max_tokens(10)
.build()
.expect("Failed to build generate request");
let response = client.generate(request).await
.expect("Generate request should succeed - network/timeout failures must fail test loudly");
assert!(!response.response.is_empty(), "Response should have content");
println!( "✓ Basic generate request builder successful" );
});
}
#[ tokio::test ]
async fn test_embeddings_request_builder_basic()
{
#[ cfg( feature = "embeddings" ) ]
{
with_test_server!(|mut client : OllamaClient, model : String| async move {
let request = EmbeddingsRequestBuilder::new()
.model(&model)
.prompt("Hello world")
.build()
.expect("Failed to build embeddings request");
let response = client.embeddings(request).await
.expect("Embeddings request should succeed - network/timeout failures must fail test loudly");
assert!(!response.embedding.is_empty(), "Should have embeddings");
println!( "✓ Basic embeddings request builder successful" );
});
}
#[ cfg( not( feature = "embeddings" ) ) ]
{
println!( "⚠ Skipping embeddings test - embeddings feature not enabled" );
}
}
#[ tokio::test ]
async fn test_builder_authentication_integration()
{
#[ cfg( feature = "secret_management" ) ]
{
use api_ollama::SecretStore;
with_test_server!(|client : OllamaClient, model : String| async move {
let _request = ChatRequestBuilder::new()
.model(&model)
.user_message("Hi")
.max_tokens(10)
.build()
.expect("Builder with auth should work");
let mut secret_store = SecretStore::new();
secret_store.set("api_key", "test-key").expect("Failed to set API key");
let mut auth_client = client.with_secret_store(secret_store);
auth_client.list_models().await
.expect("list_models with auth should succeed - network/timeout failures must fail test loudly");
println!( "✓ Builder authentication integration successful" );
});
}
#[ cfg( not( feature = "secret_management" ) ) ]
{
println!( "⚠ Skipping authentication test - secret_management feature not enabled" );
}
}