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 client = reqwest::Client::builder().cookie_store(true).build()?; // Signup let resp = client .post(server.url("/auth/signup")) .header("Content-Type", "application/x-www-form-urlencoded") .body("email=admin1&password=hunter2") .send() .await?; assert_eq!(resp.status(), 200, "signup succeeds"); // Login let resp = client .post(server.url("/auth/login")) .header("Content-Type", "application/x-www-form-urlencoded") .body("email=admin1&password=hunter2") .send() .await?; assert_eq!(resp.status(), 200, "login succeeds"); // Logout let resp = client.post(server.url("/auth/logout")).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 client = reqwest::Client::new(); // Signup let resp = client .post(server.url("/auth/signup")) .header("Content-Type", "application/x-www-form-urlencoded") .body("email=admin2&password=hunter2") .send() .await?; assert_eq!(resp.status(), 200, "signup succeeds"); // Login let resp = client .post(server.url("/auth/login")) .header("Content-Type", "application/x-www-form-urlencoded") .body("email=admin2&password=hunter3") .send() .await?; assert_ne!( resp.status(), 200, "login suceeded with invalid credentials" ); assert!( resp.headers().get("Set-Cookie").is_none(), "auth cookie was set for invalid crednetials" ); server.shutdown().await } #[traced(tokio::test)] async fn login_rejects_missing_credentials() -> Result<()> { let server = TestServer::spawn().await; let client = reqwest::Client::new(); let resp = client .post(server.url("/auth/login")) .header("Content-Type", "application/x-www-form-urlencoded") .body("email=&password=") .send() .await?; assert_eq!( resp.status(), 401, "login didn't reject missing credentials" ); assert!( resp.headers().get("Set-Cookie").is_none(), "auth cookie was set for missing crednetials" ); server.shutdown().await }