use crate::demo::{DemoConfig, DemoMetrics, DemoResult, DemoRunner, Protocol};
use std::path::PathBuf;
use std::time::Duration;
use tempfile::TempDir;
#[tokio::test]
async fn test_demo_config_creation() {
let config = DemoConfig::default();
assert_eq!(config.port, 3000);
assert_eq!(config.host, "localhost");
assert!(!config.no_browser);
}
#[tokio::test]
async fn test_demo_config_with_path() {
let temp_dir = TempDir::new().unwrap();
let config = DemoConfig {
project_path: Some(temp_dir.path().to_path_buf()),
..Default::default()
};
assert!(config.project_path.is_some());
}
#[tokio::test]
async fn test_protocol_variants() {
let protocols = vec![
Protocol::Cli,
Protocol::Http,
Protocol::Mcp,
Protocol::All,
];
for protocol in protocols {
match protocol {
Protocol::Cli => assert_eq!(format!("{:?}", protocol), "Cli"),
Protocol::Http => assert_eq!(format!("{:?}", protocol), "Http"),
Protocol::Mcp => assert_eq!(format!("{:?}", protocol), "Mcp"),
Protocol::All => assert_eq!(format!("{:?}", protocol), "All"),
#[cfg(feature = "tui")]
Protocol::Tui => assert_eq!(format!("{:?}", protocol), "Tui"),
}
}
}
#[test]
fn test_demo_result_creation() {
let result = DemoResult {
traces: vec![],
metrics: DemoMetrics {
total_requests: 10,
successful_requests: 8,
failed_requests: 2,
average_response_time: Duration::from_millis(50),
},
};
assert_eq!(result.metrics.total_requests, 10);
assert_eq!(result.metrics.successful_requests, 8);
assert_eq!(result.metrics.failed_requests, 2);
assert_eq!(result.metrics.average_response_time.as_millis(), 50);
}
#[test]
fn test_demo_metrics_default() {
let metrics = DemoMetrics::default();
assert_eq!(metrics.total_requests, 0);
assert_eq!(metrics.successful_requests, 0);
assert_eq!(metrics.failed_requests, 0);
assert_eq!(metrics.average_response_time, Duration::from_secs(0));
}
#[tokio::test]
async fn test_demo_runner_creation() {
let temp_dir = TempDir::new().unwrap();
let config = DemoConfig {
project_path: Some(temp_dir.path().to_path_buf()),
protocol: Protocol::Cli,
..Default::default()
};
let runner = DemoRunner::new(config);
assert!(runner.is_ok());
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod demo_server_tests {
use super::*;
use axum::http::StatusCode;
use axum::response::IntoResponse;
async fn health_check() -> impl IntoResponse {
(StatusCode::OK, "OK")
}
async fn not_found() -> impl IntoResponse {
(StatusCode::NOT_FOUND, "Not Found")
}
#[tokio::test]
async fn test_health_check_handler() {
let response = health_check().await.into_response();
assert_eq!(response.status(), StatusCode::OK);
}
#[tokio::test]
async fn test_not_found_handler() {
let response = not_found().await.into_response();
assert_eq!(response.status(), StatusCode::NOT_FOUND);
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod router_tests {
use super::*;
fn create_router() -> &'static str {
"mock_router"
}
#[test]
fn test_create_router() {
let router = create_router();
assert_eq!(router, "mock_router");
}
}