use axum::{http::Uri, response::IntoResponse, routing::get}; use crate::state::AppState; pub mod error; pub mod users; pub fn router() -> axum::Router { axum::Router::new() .merge(users::router()) .route("/healthcheck", get(healthcheck)) .fallback(fallback) } pub async fn healthcheck() -> impl IntoResponse { "success" } pub async fn fallback(uri: Uri) -> impl IntoResponse { self::error::Error::RouteNotFound(uri) } #[cfg(test)] mod tests { use crate::tests::{setup_test_env, TestResult}; use super::*; use axum::{ body::Body, http::{Request, StatusCode}, Router, }; use sqlx::PgPool; use tower::ServiceExt; #[sqlx::test] async fn test_healthcheck_ok(pool: PgPool) -> TestResult { setup_test_env(); let router = Router::new().merge(router()).with_state(AppState { pool }); let request = Request::builder().uri("/healthcheck").body(Body::empty())?; let response = router.oneshot(request).await?; assert_eq!(StatusCode::OK, response.status()); Ok(()) } #[sqlx::test] async fn test_fallback_not_found(pool: PgPool) -> TestResult { setup_test_env(); let router = Router::new().merge(router()).with_state(AppState { pool }); let request = Request::builder() .uri("/does-not-exist") .body(Body::empty())?; let response = router.oneshot(request).await?; assert_eq!(StatusCode::NOT_FOUND, response.status()); Ok(()) } }