#![cfg(feature = "banco")]
use std::time::Duration;
async fn start_server() -> (String, tokio::task::JoinHandle<()>) {
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
let port = listener.local_addr().unwrap().port();
let base = format!("http://127.0.0.1:{port}");
let state = batuta::serve::banco::state::BancoStateInner::with_defaults();
let app = batuta::serve::banco::router::create_banco_router(state);
let handle = tokio::spawn(async move { axum::serve(listener, app).await.unwrap() });
tokio::time::sleep(Duration::from_millis(200)).await;
(base, handle)
}
async fn try_launch_browser() -> Option<jugar_probar::Browser> {
let config = jugar_probar::BrowserConfig {
headless: true,
sandbox: false, ..Default::default()
};
match jugar_probar::Browser::launch(config).await {
Ok(b) => Some(b),
Err(e) => {
eprintln!("[L4] Chrome not available, skipping: {e}");
None
}
}
}
#[tokio::test]
async fn l4_browser_loads_banco_page() {
let (base, handle) = start_server().await;
let Some(browser) = try_launch_browser().await else {
handle.abort();
return;
};
let mut page = browser.new_page().await.unwrap();
page.goto(&base).await.unwrap();
tokio::time::sleep(Duration::from_millis(1500)).await;
assert!(
page.current_url().contains("127.0.0.1"),
"Should navigate to localhost, got: {}",
page.current_url()
);
if let Ok(png) = page.screenshot().await {
assert!(png.len() > 100, "Screenshot should be non-trivial PNG ({} bytes)", png.len());
}
let _ = browser.close().await;
handle.abort();
}
#[tokio::test]
async fn l4_browser_has_chat_ui_elements() {
let (base, handle) = start_server().await;
let Some(browser) = try_launch_browser().await else {
handle.abort();
return;
};
let mut page = browser.new_page().await.unwrap();
page.goto(&base).await.unwrap();
tokio::time::sleep(Duration::from_millis(1500)).await;
let title_check = page.evaluate("document.title").await;
if let Ok(result) = title_check {
let _ = result;
}
let send_click = page.click("#send").await;
let has_send_button = send_click.is_ok();
eprintln!("[L4] Send button exists: {has_send_button}");
let _ = browser.close().await;
handle.abort();
}