use crate::helpers::{TestApp, assert_is_redirect_to}; use uuid::Uuid; #[tokio::test] async fn you_must_be_logged_in_to_change_your_password() { let app = TestApp::spawn().await; let new_password = Uuid::new_v4().to_string(); let response = app .post_change_password(&serde_json::json!({ "current_password": Uuid::new_v4().to_string(), "new_password": new_password, "new_password_check": new_password, })) .await; assert_is_redirect_to(&response, "/login"); } #[tokio::test] async fn new_password_fields_must_match() { let app = TestApp::spawn().await; app.post_login(&serde_json::json!({ "username": app.test_user.username, "password": app.test_user.password, })) .await; let new_password = Uuid::new_v4().to_string(); let another_new_password = Uuid::new_v4().to_string(); let response = app .post_change_password(&serde_json::json!({ "current_password": app.test_user.password, "new_password": new_password, "new_password_check": another_new_password, })) .await; assert!(response.status().is_success()); let html_fragment = response.text().await.unwrap(); assert!(html_fragment.contains("You entered two different passwords")); } #[tokio::test] async fn current_password_is_invalid() { let app = TestApp::spawn().await; app.post_login(&serde_json::json!({ "username": app.test_user.username, "password": app.test_user.password, })) .await; let new_password = Uuid::new_v4().to_string(); let response = app .post_change_password(&serde_json::json!({ "current_password": Uuid::new_v4().to_string(), "new_password": new_password, "new_password_check": new_password, })) .await; assert!(response.status().is_success()); let html_fragment = response.text().await.unwrap(); assert!(html_fragment.contains("The current password is incorrect")); } #[tokio::test] async fn changing_password_works() { let app = TestApp::spawn().await; let login_body = &serde_json::json!({ "username": app.test_user.username, "password": app.test_user.password, }); let response = app.post_login(login_body).await; assert_is_redirect_to(&response, "/admin/dashboard"); let new_password = Uuid::new_v4().to_string(); let response = app .post_change_password(&serde_json::json!({ "current_password": app.test_user.password, "new_password": new_password, "new_password_check": new_password, })) .await; assert!(response.status().is_success()); let html_page_fragment = response.text().await.unwrap(); assert!(html_page_fragment.contains("Your password has been changed")); let response = app.post_logout().await; assert_is_redirect_to(&response, "/login"); let login_body = &serde_json::json!({ "username": app.test_user.username, "password": new_password, }); let response = app.post_login(login_body).await; assert_is_redirect_to(&response, "/admin/dashboard"); }