#![allow(clippy::unwrap_used, clippy::panic)] use super::*;
#[tokio::test]
async fn local_password_router_constructs() {
let pool =
sqlx::PgPool::connect_lazy("postgres://unused/unused").expect("lazy pool needs no server");
let accounts = Arc::new(crate::InMemoryAccountStore::new());
let state = LocalPasswordRouteState {
authenticator: Arc::new(LocalPasswordAuthenticator::new(pool.clone(), accounts)),
session_store: Arc::new(crate::PostgresSessionStore::new(pool)),
rate_limiters: Some(Arc::new(crate::RateLimiters::default())),
};
let _router = local_password_routes(Arc::new(state));
}
#[tokio::test]
async fn email_verification_refuses_a_request_with_no_session() {
use axum::{body::Body, http::Request};
use tower::ServiceExt as _;
let pool =
sqlx::PgPool::connect_lazy("postgres://unused/unused").expect("lazy pool needs no server");
let accounts = Arc::new(crate::InMemoryAccountStore::new());
let router = email_verification_routes(Arc::new(EmailVerificationRouteState {
authenticator: Arc::new(LocalPasswordAuthenticator::new(pool, accounts)),
rate_limiters: None,
}));
for (path, body) in [
("/auth/v1/email/verify/start", "{}"),
("/auth/v1/email/verify/confirm", r#"{"token":"whatever"}"#),
] {
let request = Request::builder()
.method("POST")
.uri(path)
.header("content-type", "application/json")
.extension(ConnectInfo(SocketAddr::from(([10, 0, 0, 1], 4000))))
.body(Body::from(body))
.unwrap();
let response = router.clone().oneshot(request).await.unwrap();
assert_eq!(response.status(), StatusCode::UNAUTHORIZED, "{path} without a session");
}
}