#[ cfg( feature = "compression" ) ]
mod compression_tests
{
use api_gemini::
{
client ::Client,
CompressionConfig,
CompressionAlgorithm,
};
#[ test ]
fn test_compression_config_defaults()
{
let config = CompressionConfig::new();
assert_eq!( config.algorithm, CompressionAlgorithm::Gzip );
assert_eq!( config.level, 6 );
assert_eq!( config.min_size, 1024 );
}
#[ test ]
fn test_compression_config_builder()
{
let config = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Brotli )
.level( 9 )
.min_size( 2048 );
assert_eq!( config.algorithm, CompressionAlgorithm::Brotli );
assert_eq!( config.level, 9 );
assert_eq!( config.min_size, 2048 );
}
#[ test ]
fn test_compression_algorithm_content_encoding()
{
assert_eq!( CompressionAlgorithm::Gzip.content_encoding(), Some( "gzip" ) );
assert_eq!( CompressionAlgorithm::Deflate.content_encoding(), Some( "deflate" ) );
assert_eq!( CompressionAlgorithm::Brotli.content_encoding(), Some( "br" ) );
assert_eq!( CompressionAlgorithm::None.content_encoding(), None );
}
#[ test ]
fn test_client_builder_with_compression()
{
let compression = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Gzip )
.level( 6 )
.min_size( 1024 );
let result = Client::builder()
.api_key( "test-key".to_string() )
.enable_compression( compression )
.build();
assert!( result.is_ok(), "Client build should succeed with compression config" );
}
#[ test ]
fn test_client_builder_disable_compression()
{
let result = Client::builder()
.api_key( "test-key".to_string() )
.enable_compression( CompressionConfig::new() )
.disable_compression()
.build();
assert!( result.is_ok(), "Client build should succeed after disabling compression" );
}
#[ test ]
fn test_compression_config_algorithm_builder()
{
let gzip = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Gzip );
assert_eq!( gzip.algorithm, CompressionAlgorithm::Gzip );
let deflate = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Deflate );
assert_eq!( deflate.algorithm, CompressionAlgorithm::Deflate );
let brotli = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Brotli );
assert_eq!( brotli.algorithm, CompressionAlgorithm::Brotli );
}
#[ test ]
fn test_compression_level_variations()
{
let fast = CompressionConfig::new().level( 1 );
assert_eq!( fast.level, 1 );
let default = CompressionConfig::new();
assert_eq!( default.level, 6 );
let best = CompressionConfig::new().level( 9 );
assert_eq!( best.level, 9 );
let brotli_best = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Brotli )
.level( 11 );
assert_eq!( brotli_best.level, 11 );
}
#[ test ]
fn test_compression_min_size_variations()
{
let aggressive = CompressionConfig::new().min_size( 100 );
assert_eq!( aggressive.min_size, 100 );
let default = CompressionConfig::new();
assert_eq!( default.min_size, 1024 );
let conservative = CompressionConfig::new().min_size( 10240 );
assert_eq!( conservative.min_size, 10240 );
}
#[ test ]
fn test_compression_config_method_chaining()
{
let config = CompressionConfig::new()
.algorithm( CompressionAlgorithm::Gzip )
.level( 7 )
.min_size( 512 );
assert_eq!( config.algorithm, CompressionAlgorithm::Gzip );
assert_eq!( config.level, 7 );
assert_eq!( config.min_size, 512 );
}
#[ test ]
fn test_client_with_different_compression_algorithms()
{
let gzip_client = Client::builder()
.api_key( "test-key".to_string() )
.enable_compression( CompressionConfig::new().algorithm( CompressionAlgorithm::Gzip ) )
.build();
assert!( gzip_client.is_ok() );
let deflate_client = Client::builder()
.api_key( "test-key".to_string() )
.enable_compression( CompressionConfig::new().algorithm( CompressionAlgorithm::Deflate ) )
.build();
assert!( deflate_client.is_ok() );
let brotli_client = Client::builder()
.api_key( "test-key".to_string() )
.enable_compression( CompressionConfig::new().algorithm( CompressionAlgorithm::Brotli ) )
.build();
assert!( brotli_client.is_ok() );
}
#[ tokio::test ]
#[ cfg( feature = "integration" ) ]
async fn test_compression_integration_with_models_list()
{
let api_key = match std::env::var( "GEMINI_API_KEY" )
{
Ok( key ) => key,
Err( _ ) => {
eprintln!( "Skipping integration test: GEMINI_API_KEY not set" );
return;
}
};
let client = Client::builder()
.api_key( api_key )
.enable_compression(
CompressionConfig::new()
.algorithm( CompressionAlgorithm::Gzip )
.level( 6 )
.min_size( 100 ) )
.build()
.expect( "Failed to build client" );
let result = client.models().list().await;
assert!(
result.is_ok(),
"Request with compression should succeed : {:?}",
result.err()
);
}
#[ tokio::test ]
#[ cfg( all( feature = "integration", feature = "retry" ) ) ]
async fn test_compression_with_retry_logic()
{
let api_key = match std::env::var( "GEMINI_API_KEY" )
{
Ok( key ) => key,
Err( _ ) => {
eprintln!( "Skipping integration test: GEMINI_API_KEY not set" );
return;
}
};
let client = Client::builder()
.api_key( api_key )
.max_retries( 2 )
.enable_compression( CompressionConfig::new().min_size( 100 ) )
.build()
.expect( "Failed to build client" );
let result = client.models().list().await;
assert!(
result.is_ok(),
"Request with compression and retry should succeed : {:?}",
result.err()
);
}
#[ test ]
fn test_compression_config_default_trait()
{
let config = CompressionConfig::default();
assert_eq!( config.algorithm, CompressionAlgorithm::Gzip );
assert_eq!( config.level, 6 );
assert_eq!( config.min_size, 1024 );
}
#[ test ]
fn test_compression_algorithm_default_trait()
{
let algorithm = CompressionAlgorithm::default();
assert_eq!( algorithm, CompressionAlgorithm::Gzip );
}
}