use std::collections::HashMap; use std::sync::Arc; use axum::body::Body; use axum::http::{Request, StatusCode}; use tower::util::ServiceExt; use doctate_server::config::Config; fn test_config() -> Arc { Arc::new(Config { server_port: 3000, data_path: "/tmp/doctate-test".into(), log_level: "info".into(), log_path: "/tmp/doctate-test/logs".into(), log_max_days: 90, users: vec![], api_keys: HashMap::new(), retention_audio_days: 30, retention_transcript_days: 30, retention_document_days: 0, whisper_url: "http://localhost:10300".into(), whisper_timeout_seconds: 120, ollama_url: "http://localhost:11434".into(), ollama_model: "gemma3:4b".into(), ollama_keep_alive: 0, llm_url: String::new(), llm_api_key: String::new(), llm_model: String::new(), llm_temperature: 0.0, session_timeout_hours: 8, }) } #[tokio::test] async fn health_returns_ok() { let app = doctate_server::create_router(test_config()); let response = app .oneshot( Request::builder() .uri("/api/health") .body(Body::empty()) .unwrap(), ) .await .unwrap(); assert_eq!(response.status(), StatusCode::OK); } #[tokio::test] async fn health_returns_json_with_status() { let app = doctate_server::create_router(test_config()); let response = app .oneshot( Request::builder() .uri("/api/health") .body(Body::empty()) .unwrap(), ) .await .unwrap(); let body = axum::body::to_bytes(response.into_body(), usize::MAX) .await .unwrap(); let json: serde_json::Value = serde_json::from_slice(&body).unwrap(); assert_eq!(json["status"], "ok"); assert_eq!(json["port"], 3000); }