use std::net::SocketAddr;
use axum_test::{TestServer, TestServerConfig};
use crate::{
app::{AppContext, Hooks},
boot::{self, BootResult},
environment::Environment,
Result,
};
pub async fn boot_test<H: Hooks>() -> Result<BootResult> {
let config = H::load_config(&Environment::Test).await?;
H::boot(boot::StartMode::ServerOnly, &Environment::Test, config).await
}
#[allow(clippy::future_not_send)]
#[allow(clippy::future_not_send)]
pub async fn request<H: Hooks, F, Fut>(callback: F)
where
F: FnOnce(TestServer, AppContext) -> Fut,
Fut: std::future::Future<Output = ()>,
{
let boot = boot_test::<H>().await.unwrap();
let config = TestServerConfig {
default_content_type: Some("application/json".to_string()),
..Default::default()
};
let server = TestServer::new_with_config(
boot.router
.unwrap()
.into_make_service_with_connect_info::<SocketAddr>(),
config,
)
.unwrap();
callback(server, boot.app_context.clone()).await;
}