import time import requests from tests.conftest import BASE_URL def _session(): s = requests.Session() name = f"val_{int(time.time() * 1000)}" s.post(f"{BASE_URL}/auth/signup", data={ "username": name, "email": f"{name}@t.dev", "password": "secret123", "confirm_password": "secret123", }, allow_redirects=True) return s def test_vote_bad_value_is_handled_not_500(app_server): s = _session() r = s.post(f"{BASE_URL}/votes/post/nonexistent", data={"value": "abc"}, allow_redirects=False) assert r.status_code != 500 assert r.status_code in (302, 303, 400) def test_oversized_post_content_rejected(app_server): s = _session() r = s.post(f"{BASE_URL}/posts/create", data={"content": "x" * 2001, "topic": "random"}, allow_redirects=False) assert r.status_code in (302, 303, 400) assert "/posts/" not in (r.headers.get("location") or "") def test_short_post_content_rejected(app_server): s = _session() r = s.post(f"{BASE_URL}/posts/create", data={"content": "short", "topic": "random"}, allow_redirects=False) assert "/posts/" not in (r.headers.get("location") or "") def test_profile_update_overlong_bio_rejected(app_server): s = _session() r = s.post(f"{BASE_URL}/profile/update", data={ "bio": "x" * 600, "location": "", "git_link": "", "website": "", }, allow_redirects=False) assert r.status_code in (302, 303, 400) def test_signup_short_username_rerenders_with_message(app_server): r = requests.post(f"{BASE_URL}/auth/signup", data={ "username": "ab", "email": "x@y.zz", "password": "secret123", "confirm_password": "secret123", }, allow_redirects=False) assert r.status_code == 400 assert "Username must be between 3 and 32 characters" in r.text