use browsing::browser::{Browser, BrowserProfile};
use browsing::error::{BrowsingError, Result};
use std::time::Duration;
use tokio::time::timeout;
#[tokio::test]
async fn test_browser_session_creation() {
let profile = BrowserProfile::default();
let mut browser = Browser::new(profile);
assert!(browser.get_cdp_client().is_err());
assert!(browser.get_session_id().is_err());
assert!(browser.get_current_target_id().is_err());
assert!(true);
}
#[tokio::test]
async fn test_browser_profile_configuration() {
let profile = BrowserProfile {
headless: Some(true),
user_data_dir: Some("/tmp/test_browser".into()),
allowed_domains: Some(vec!["example.com".to_string()]),
downloads_path: Some("/tmp/downloads".into()),
proxy: None,
};
let browser = Browser::new(profile);
assert!(true); }
#[tokio::test]
async fn test_browser_with_cdp_url() {
let mut browser =
Browser::new(BrowserProfile::default()).with_cdp_url("ws://localhost:9222".to_string());
assert!(true); }
#[tokio::test]
async fn test_browser_stop_before_start() {
let mut browser = Browser::new(BrowserProfile::default());
let result = browser.stop().await;
assert!(result.is_ok());
}
#[tokio::test]
async fn test_browser_duplicate_start() {
let mut browser = Browser::new(BrowserProfile::default());
assert!(true); }
#[tokio::test]
async fn test_browser_session_cleanup() {
let profile = BrowserProfile::default();
let browser = Browser::new(profile);
{
let _scoped_browser = Browser::new(BrowserProfile::default());
}
assert!(true);
}
#[tokio::test]
async fn test_browser_timeout_handling() {
let mut browser = Browser::new(BrowserProfile::default());
let result = timeout(Duration::from_secs(1), async {
tokio::time::sleep(Duration::from_millis(500)).await;
Ok::<(), BrowsingError>(())
})
.await;
assert!(result.is_ok());
}
#[cfg(unix)]
#[tokio::test]
async fn test_browser_signal_handling() {
use browsing::utils::signal;
let initial_state = signal::is_shutdown_requested();
signal::set_shutdown_requested();
let after_state = signal::is_shutdown_requested();
assert!(after_state);
}
#[test]
fn test_browser_profile_validation() {
let invalid_profile = BrowserProfile {
headless: Some(true),
user_data_dir: None,
allowed_domains: Some(vec![]), downloads_path: None,
proxy: None,
};
let browser = Browser::new(invalid_profile);
assert!(true);
}
#[tokio::test]
async fn test_browser_concurrent_sessions() {
use tokio::task;
let handles: Vec<_> = (0..3)
.map(|i| {
task::spawn(async move {
let profile = BrowserProfile {
headless: Some(true),
user_data_dir: Some(format!("/tmp/test_browser_{}", i).into()),
allowed_domains: None,
downloads_path: None,
proxy: None,
};
Browser::new(profile)
})
})
.collect();
let browsers: std::result::Result<Vec<_>, _> = futures_util::future::join_all(handles)
.await
.into_iter()
.collect::<std::result::Result<Vec<_>, _>>();
assert!(browsers.is_ok());
assert_eq!(browsers.unwrap().len(), 3);
}