use rustlavel::test_prelude::*;
fn app() -> App {
App::bare()
.middleware(SessionManager::new(
&rustlavel::auth::AppKey::from_bytes([7u8; 32]),
rustlavel::auth::MemoryStore::new(),
))
.middleware(Csrf::new())
.routes({{crate_name}}::routes::auth::routes)
.routes({{crate_name}}::routes::web::routes)
}
#[rustlavel::test]
async fn the_sign_in_page_is_public() {
app().test_client().get("/login").await.assert_ok().assert_see("Sign in");
}
#[rustlavel::test]
async fn a_signed_out_visitor_is_sent_to_the_sign_in_page() {
let client = app().test_client();
for path in ["/", "/dashboard", "/profile", "/settings/security", "/admin/users"] {
let response = client.get(path).await;
assert!(
(300..400).contains(&response.status()),
"{path} answered {} for a signed-out visitor",
response.status()
);
}
}
#[rustlavel::test]
async fn a_form_post_without_a_csrf_token_is_refused() {
let client = app().test_client();
let response = client.post("/login", &[("email", "a@example.com"), ("password", "x")]).await;
assert_eq!(response.status(), 419, "a login without a token must not reach the handler");
}
#[rustlavel::test]
async fn the_sign_in_form_carries_a_token_to_send_back() {
let body = app().test_client().get("/login").await.body();
assert!(body.contains(r#"name="_token""#), "the form has no CSRF field");
}
#[rustlavel::test]
async fn magic_link_routes_are_absent_until_the_setting_is_on() {
let client = app().test_client();
for path in ["/magic-link", "/magic/0123456789abcdef"] {
let response = client.get(path).await;
assert_eq!(response.status(), 404, "{path} answered while the setting is off");
}
}
#[rustlavel::test]
async fn the_sign_in_page_does_not_offer_a_magic_link_while_it_is_off() {
app().test_client().get("/login").await.assert_dont_see("/magic-link");
}