use axum::http::StatusCode; use crate::harness::TestHarness; #[tokio::test] async fn write_endpoints_rate_limited() { let mut h = TestHarness::new().await; let user_id = h.login_as("ratelimituser").await; let comm_id = h.create_community("RL Test", "rl-test").await; let _cat_id = h.create_category(comm_id, "General", "general").await; h.add_membership(user_id, comm_id, "member").await; // GET new thread form to establish CSRF token h.client.get("/p/rl-test/general/new").await; // Send burst_size (10) requests — all should succeed for i in 0..10 { let body = format!("title=Thread+{i}&body=Body+{i}"); let resp = h.client.post_form("/p/rl-test/general/new", &body).await; assert_ne!( resp.status, StatusCode::TOO_MANY_REQUESTS, "Request {i} should not be rate limited" ); } // 11th request should be rate limited let resp = h .client .post_form("/p/rl-test/general/new", "title=Overflow&body=Nope") .await; assert_eq!( resp.status, StatusCode::TOO_MANY_REQUESTS, "Request 11 should be rate limited (429)" ); } #[tokio::test] async fn get_endpoints_not_rate_limited() { let mut h = TestHarness::new().await; let _comm_id = h.create_community("ReadTest", "read-test").await; // Send 15 GET requests — none should be rate limited for i in 0..15 { let resp = h.client.get("/p/read-test").await; assert_ne!( resp.status, StatusCode::TOO_MANY_REQUESTS, "GET request {i} should never be rate limited" ); } }