use crate::AppState;
use crate::acp::AcpSupervisor;
use crate::auth::LoginGuard;
use crate::engine::EngineRegistry;
use crate::proxy::ProxyState;
use sqlx::sqlite::SqlitePoolOptions;
use std::collections::HashMap;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, AtomicU64};
pub async fn test_state() -> AppState {
let db = SqlitePoolOptions::new()
.max_connections(1)
.connect("sqlite::memory:")
.await
.expect("in-memory sqlite pool");
sqlx::migrate!("./migrations").run(&db).await.expect("run migrations");
AppState {
jwt_secret: "test-secret".into(),
token_cookie: crate::TOKEN_COOKIE_BASE.to_string(),
api_keys: HashMap::new(),
auth_enabled: Arc::new(AtomicBool::new(false)),
local_auth_required: Arc::new(AtomicBool::new(true)),
acp_idle_recycle_secs: Arc::new(AtomicU64::new(300)),
acp_perm_timeout: Arc::new(crate::acp::reaper::PermissionTimeoutConfig::default()),
login_guard: LoginGuard::new(),
engines: EngineRegistry::new(db.clone(), 9777),
acp_supervisor: AcpSupervisor::default(),
proxy: ProxyState {
client: reqwest::Client::new(),
self_port: 9777,
base_host: None,
max_request_body: crate::proxy::MAX_REQUEST_BODY,
audited_ports: std::sync::Arc::new(std::sync::Mutex::new(
crate::proxy::PortAuditLog::default(),
)),
},
max_upload_body: crate::api::files::MAX_UPLOAD_BODY_DEFAULT,
db,
}
}