//! Appeal workflow tests: suspended user submits appeal. //! //! The `suspended` flag is stored in the session, so after suspending a user //! via direct SQL we must log out + log back in to pick up the new state. use crate::harness::TestHarness; #[tokio::test] async fn appeal_requires_auth() { let mut h = TestHarness::new().await; let resp = h .client .post_form("/api/users/me/appeal", "appeal_text=Please+unsuspend+me") .await; assert_eq!( resp.status, 403, "Unauthenticated appeal should be rejected: {} {}", resp.status, resp.text ); } #[tokio::test] async fn appeal_non_suspended_user_rejected() { let mut h = TestHarness::new().await; let _user_id = h .signup("appealok", "appealok@test.com", "password123") .await; let resp = h .client .post_form("/api/users/me/appeal", "appeal_text=I+want+to+appeal") .await; assert_eq!( resp.status, 400, "Non-suspended user appeal should be rejected: {} {}", resp.status, resp.text ); } #[tokio::test] async fn appeal_empty_text_rejected() { let mut h = TestHarness::new().await; let user_id = h .signup("appealempty", "appealempty@test.com", "password123") .await; h.suspend_user(user_id).await; // Re-login to pick up suspended state in session h.client.post_form("/logout", "").await; h.login("appealempty", "password123").await; let resp = h .client .post_form("/api/users/me/appeal", "appeal_text=") .await; assert_eq!( resp.status, 422, "Empty appeal text should be rejected: {} {}", resp.status, resp.text ); } #[tokio::test] async fn appeal_too_long_rejected() { let mut h = TestHarness::new().await; let user_id = h .signup("appeallong", "appeallong@test.com", "password123") .await; h.suspend_user(user_id).await; h.client.post_form("/logout", "").await; h.login("appeallong", "password123").await; let long_text = "a".repeat(2001); let resp = h .client .post_form("/api/users/me/appeal", &format!("appeal_text={long_text}")) .await; assert_eq!( resp.status, 422, "Appeal text >2000 chars should be rejected: {} {}", resp.status, resp.text ); } #[tokio::test] async fn appeal_suspended_user_succeeds() { let mut h = TestHarness::new().await; let user_id = h .signup("appealgood", "appealgood@test.com", "password123") .await; h.suspend_user(user_id).await; h.client.post_form("/logout", "").await; h.login("appealgood", "password123").await; let resp = h .client .post_form( "/api/users/me/appeal", "appeal_text=I+believe+this+was+a+mistake", ) .await; assert_eq!( resp.status, 204, "Suspended user appeal should succeed: {} {}", resp.status, resp.text ); }