use crate::{ContentCache, MetadataCache, S3Client, TemplateServer, TemplateServerTrait};
use std::sync::Arc;
use tokio::sync::RwLock;
mod code_smell_comprehensive_tests;
mod clap_command_structure_tests;
mod clap_argument_parsing_tests;
mod clap_env_var_tests;
mod project_meta_integration_test;
mod kaizen_test_optimizations;
mod kaizen_reliability_patterns;
mod gitignore_respect_tests;
mod metric_accuracy_suite;
mod test_include_patterns;
mod cli_basic_tests;
mod protocol_service_tests;
#[tokio::test]
async fn test_template_server_new() {
let server = TemplateServer::new().await;
assert!(server.is_ok());
let server = server.unwrap();
assert_eq!(server.bucket_name, "dummy");
}
#[tokio::test]
async fn test_template_server_trait_implementation() {
let server = TemplateServer::new().await.unwrap();
let renderer = server.get_renderer();
assert!(std::ptr::eq(renderer, &server.renderer));
assert!(server.get_metadata_cache().is_some());
assert!(server.get_content_cache().is_some());
assert!(server.get_s3_client().is_some());
assert_eq!(server.get_bucket_name(), Some("dummy"));
}
#[tokio::test]
async fn test_template_server_deprecated_methods() {
let server = TemplateServer::new().await.unwrap();
let result = server.get_template_metadata("test").await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("deprecated"));
let result = server.get_template_content("test").await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("deprecated"));
let result = TemplateServerTrait::list_templates(&server, "test").await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("deprecated"));
}
#[tokio::test]
async fn test_warm_cache() {
let server = TemplateServer::new().await.unwrap();
let result = server.warm_cache().await;
assert!(result.is_ok());
}
#[tokio::test]
async fn test_template_server_cache_initialization() {
let server = TemplateServer::new().await.unwrap();
let metadata_cache = server.metadata_cache.read().await;
assert_eq!(metadata_cache.len(), 0);
drop(metadata_cache);
let content_cache = server.content_cache.read().await;
assert_eq!(content_cache.len(), 0);
}
#[tokio::test]
async fn test_template_server_cache_sizes() {
let server = TemplateServer::new().await.unwrap();
let metadata_cache = server.metadata_cache.read().await;
assert!(metadata_cache.cap().get() >= 512);
drop(metadata_cache);
let content_cache = server.content_cache.read().await;
assert!(content_cache.cap().get() >= 1024);
}
#[tokio::test]
async fn test_warm_cache_templates() {
let server = TemplateServer::new().await.unwrap();
let result = server.warm_cache().await;
assert!(result.is_ok());
let metadata_cache = server.metadata_cache.read().await;
assert_eq!(metadata_cache.len(), 0);
}
#[tokio::test]
async fn test_template_server_trait_via_methods() {
let server = TemplateServer::new().await.unwrap();
let result = TemplateServerTrait::get_template_metadata(&server, "test").await;
assert!(result.is_err());
let result = TemplateServerTrait::get_template_content(&server, "test").await;
assert!(result.is_err());
let _ = TemplateServerTrait::get_renderer(&server);
let _ = TemplateServerTrait::get_metadata_cache(&server);
let _ = TemplateServerTrait::get_content_cache(&server);
let _ = TemplateServerTrait::get_s3_client(&server);
let _ = TemplateServerTrait::get_bucket_name(&server);
}
#[test]
fn test_type_aliases() {
use lru::LruCache;
use std::num::NonZeroUsize;
let metadata_cache: MetadataCache =
Arc::new(RwLock::new(LruCache::new(NonZeroUsize::new(10).unwrap())));
let content_cache: ContentCache =
Arc::new(RwLock::new(LruCache::new(NonZeroUsize::new(10).unwrap())));
assert!(Arc::strong_count(&metadata_cache) == 1);
assert!(Arc::strong_count(&content_cache) == 1);
}
#[test]
fn test_s3_client_instantiation() {
let _client = S3Client;
}
#[tokio::test]
async fn test_run_mcp_server_basic() {
use crate::run_mcp_server;
use crate::stateless_server::StatelessTemplateServer;
use std::sync::Arc;
let server = Arc::new(StatelessTemplateServer::new().unwrap());
std::thread::spawn(move || {
let _result = tokio::runtime::Runtime::new()
.unwrap()
.block_on(run_mcp_server(server));
});
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
}
#[test]
fn test_public_exports() {
use crate::{ParameterSpec, ParameterType, TemplateError};
let _param_type = ParameterType::String;
let _param_spec = ParameterSpec {
name: "test".to_string(),
description: "test".to_string(),
param_type: ParameterType::String,
required: true,
default_value: None,
validation_pattern: None,
};
let _error = TemplateError::InvalidUri {
uri: "test".to_string(),
};
}