use anyhow::Result;
use crate::transport_layer::IntoTransportLayer;
use crate::TestServer;
use crate::TestServerBuilder;
use crate::Transport;
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct TestServerConfig {
pub transport: Option<Transport>,
pub save_cookies: bool,
pub expect_success_by_default: bool,
pub restrict_requests_with_http_schema: bool,
pub default_content_type: Option<String>,
pub default_scheme: Option<String>,
}
impl TestServerConfig {
pub fn new() -> Self {
Default::default()
}
pub fn build<A>(self, app: A) -> Result<TestServer>
where
A: IntoTransportLayer,
{
TestServer::new_with_config(app, self)
}
}
impl Default for TestServerConfig {
fn default() -> Self {
Self {
transport: None,
save_cookies: false,
expect_success_by_default: false,
restrict_requests_with_http_schema: false,
default_content_type: None,
default_scheme: None,
}
}
}
impl From<TestServerBuilder> for TestServerConfig {
fn from(builder: TestServerBuilder) -> Self {
builder.into_config()
}
}
#[cfg(test)]
mod test_scheme {
use axum::extract::Request;
use axum::routing::get;
use axum::Router;
use crate::TestServer;
use crate::TestServerConfig;
async fn route_get_scheme(request: Request) -> String {
request.uri().scheme_str().unwrap().to_string()
}
#[tokio::test]
async fn it_should_set_scheme_when_present_in_config() {
let router = Router::new().route("/scheme", get(route_get_scheme));
let config = TestServerConfig {
default_scheme: Some("https".to_string()),
..Default::default()
};
let server = TestServer::new_with_config(router, config).unwrap();
server.get("/scheme").await.assert_text("https");
}
}