zero-to-axum/tests/auth.rs
2025-07-24 10:43:29 -05:00

93 lines
2.2 KiB
Rust

pub mod fixture;
use fixture::TestServer;
use anyhow::Result;
use test_log::test as traced;
#[traced(tokio::test)]
async fn login_succeeds_with_valid_credentials() -> Result<()> {
let server = TestServer::spawn().await;
let mut client = server.browser_client();
client.get_csrf_token().await?;
// Signup
let resp = client
.post("/auth/signup")
.csrf_form(&[("email", "admin"), ("password", "hunter2")])
.send()
.await?;
assert_eq!(resp.status(), 200, "signup succeeds");
// Login
let resp = client
.post("/auth/login")
.csrf_form(&[("email", "admin"), ("password", "hunter2")])
.send()
.await?;
assert_eq!(resp.status(), 200, "login succeeds");
// Logout
let resp = client
.post("/auth/logout")
.csrf_form::<[(&str, &str)]>(&[])
.send()
.await?;
assert_eq!(resp.status(), 200, "logout succeeds");
server.shutdown().await
}
#[traced(tokio::test)]
async fn login_fails_with_invalid_credentials() -> Result<()> {
let server = TestServer::spawn().await;
let mut client = server.browser_client();
client.get_csrf_token().await?;
// Signup
let resp = client
.post("/auth/signup")
.csrf_form(&[("email", "admin"), ("password", "hunter2")])
.send()
.await?;
assert_eq!(resp.status(), 200, "signup succeeds");
// Login
let resp = client
.post("/auth/login")
.csrf_form(&[("email", "admin"), ("password", "hunter3")])
.send()
.await?;
assert_eq!(
resp.status(),
401,
"login didn't reject invalid credentials"
);
server.shutdown().await
}
#[traced(tokio::test)]
async fn login_rejects_missing_credentials() -> Result<()> {
let server = TestServer::spawn().await;
let mut client = server.browser_client();
client.get_csrf_token().await?;
let resp = client
.post("/auth/login")
.csrf_form(&[("email", ""), ("password", "")])
.send()
.await?;
assert_eq!(
resp.status(),
401,
"login didn't reject missing credentials"
);
server.shutdown().await
}