115 lines
3.5 KiB
Rust
115 lines
3.5 KiB
Rust
//! Test Environment Management
|
|
//!
|
|
//! Handles isolated test environment setup including:
|
|
//! - Test server instance
|
|
//! - Browser automation
|
|
//! - Test data management
|
|
//! - API client for validation
|
|
|
|
pub mod browser_manager;
|
|
pub mod test_server;
|
|
pub mod test_data_manager;
|
|
pub mod api_client;
|
|
|
|
pub use browser_manager::*;
|
|
pub use test_server::*;
|
|
pub use test_data_manager::*;
|
|
pub use api_client::*;
|
|
|
|
use std::path::PathBuf;
|
|
use tokio::time::Duration;
|
|
|
|
/// Configuration for UX test environment
|
|
#[derive(Debug, Clone)]
|
|
pub struct UXTestConfig {
|
|
pub test_port: u16,
|
|
pub headless: bool,
|
|
pub timeout_seconds: u64,
|
|
pub screenshot_on_failure: bool,
|
|
pub browser_type: BrowserType,
|
|
pub test_data_dir: PathBuf,
|
|
pub screenshot_dir: PathBuf,
|
|
}
|
|
|
|
impl Default for UXTestConfig {
|
|
fn default() -> Self {
|
|
let test_mode = std::env::var("UX_TEST_MODE").unwrap_or_else(|_| "dev".to_string());
|
|
|
|
match test_mode.as_str() {
|
|
"ci" => Self {
|
|
test_port: 8081,
|
|
headless: true,
|
|
timeout_seconds: 30,
|
|
screenshot_on_failure: true,
|
|
browser_type: BrowserType::Chrome,
|
|
test_data_dir: PathBuf::from("user_data_test"),
|
|
screenshot_dir: PathBuf::from("tests/ux_suite/reports/screenshots"),
|
|
},
|
|
"dev" => Self {
|
|
test_port: 8081,
|
|
headless: false,
|
|
timeout_seconds: 60,
|
|
screenshot_on_failure: true,
|
|
browser_type: BrowserType::Chrome,
|
|
test_data_dir: PathBuf::from("user_data_test"),
|
|
screenshot_dir: PathBuf::from("tests/ux_suite/reports/screenshots"),
|
|
},
|
|
_ => Self {
|
|
test_port: 8081,
|
|
headless: false,
|
|
timeout_seconds: 60,
|
|
screenshot_on_failure: true,
|
|
browser_type: BrowserType::Chrome,
|
|
test_data_dir: PathBuf::from("user_data_test"),
|
|
screenshot_dir: PathBuf::from("tests/ux_suite/reports/screenshots"),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Complete UX test environment
|
|
pub struct UXTestEnvironment {
|
|
pub config: UXTestConfig,
|
|
pub browser: BrowserManager,
|
|
pub server: TestServer,
|
|
pub data_manager: TestDataManager,
|
|
pub api_client: APITestClient,
|
|
}
|
|
|
|
impl UXTestEnvironment {
|
|
/// Initialize a new test environment
|
|
pub async fn new() -> Result<Self, Box<dyn std::error::Error>> {
|
|
let config = UXTestConfig::default();
|
|
|
|
// Create directories
|
|
std::fs::create_dir_all(&config.test_data_dir)?;
|
|
std::fs::create_dir_all(&config.screenshot_dir)?;
|
|
|
|
// Initialize components
|
|
let data_manager = TestDataManager::new(&config.test_data_dir)?;
|
|
let server = TestServer::start(config.test_port).await?;
|
|
let browser = BrowserManager::new(&config).await?;
|
|
let api_client = APITestClient::new(config.test_port);
|
|
|
|
Ok(Self {
|
|
config,
|
|
browser,
|
|
server,
|
|
data_manager,
|
|
api_client,
|
|
})
|
|
}
|
|
|
|
/// Get a UX test helper for this environment
|
|
pub fn ux_helper(&self) -> UXTestHelper {
|
|
UXTestHelper::new(self)
|
|
}
|
|
|
|
/// Clean up test environment
|
|
pub async fn cleanup(&mut self) -> Result<(), Box<dyn std::error::Error>> {
|
|
self.browser.quit().await?;
|
|
self.server.stop().await?;
|
|
self.data_manager.cleanup()?;
|
|
Ok(())
|
|
}
|
|
} |