elif_http/testing/
server.rs

1//! Test server utilities
2
3use crate::testing::container::create_test_container;
4use crate::{ElifRouter, HttpConfig, Server};
5use std::net::SocketAddr;
6
7/// Test server builder for integration tests
8pub struct TestServerBuilder {
9    config: HttpConfig,
10    router: Option<ElifRouter>,
11}
12
13impl TestServerBuilder {
14    pub fn new() -> Self {
15        Self {
16            config: HttpConfig::default(),
17            router: None,
18        }
19    }
20
21    pub fn with_config(mut self, config: HttpConfig) -> Self {
22        self.config = config;
23        self
24    }
25
26    pub fn with_router(mut self, router: ElifRouter) -> Self {
27        self.router = Some(router);
28        self
29    }
30
31    pub fn build(self) -> Server {
32        let container = create_test_container();
33        let mut server =
34            Server::with_container(container, self.config).expect("Failed to create test server");
35
36        if let Some(router) = self.router {
37            server.use_router(router);
38        }
39
40        server
41    }
42}
43
44impl Default for TestServerBuilder {
45    fn default() -> Self {
46        Self::new()
47    }
48}
49
50/// Get a free port for testing
51pub fn get_test_port() -> u16 {
52    // In a real implementation, this would find an available port
53    // For now, return a commonly available test port
54    3001
55}
56
57/// Create a test socket address
58pub fn test_socket_addr() -> SocketAddr {
59    format!("127.0.0.1:{}", get_test_port()).parse().unwrap()
60}