# retoor import time import requests from tests.conftest import BASE_URL JSON = {"Accept": "application/json"} _counter = [0] def _unique(prefix="side"): _counter[0] += 1 return f"{prefix}{int(time.time() * 1000)}{_counter[0]}" def _signup(): name = _unique("sideuser") session = requests.Session() session.post( f"{BASE_URL}/auth/signup", data={ "username": name, "email": f"{name}@t.dev", "password": "secret123", "confirm_password": "secret123", "birth_date": "1990-01-01", "accept_terms": "1", }, allow_redirects=True, ) return session, name def _new_post(session): return session.post( f"{BASE_URL}/posts/create", headers=JSON, data={ "title": _unique("sidepost"), "content": "content for the author-sidebar test post", "topic": "devlog", }, ).json()["data"] def _new_gist(session, title=None): return session.post( f"{BASE_URL}/gists/create", headers=JSON, data={ "title": title or _unique("sidegist"), "description": "a gist used for the author sidebar test", "source_code": "print('hi')", "language": "python", }, ).json()["data"] def _new_project(session, title=None, is_private=None): data = { "title": title or _unique("sideproj"), "description": "a project used for the author sidebar test", "project_type": "software", "status": "In Development", "platforms": "", } created = session.post(f"{BASE_URL}/projects/create", headers=JSON, data=data).json()["data"] if is_private: session.post( f"{BASE_URL}/projects/{created['slug']}/private", headers=JSON, data={"value": "true"}, ) return created def test_post_page_has_no_author_cards_with_nothing_else(app_server): session, name = _signup() post = _new_post(session) r = requests.get(f"{BASE_URL}/posts/{post['slug']}") assert r.status_code == 200 assert f"Gists from {name}" not in r.text assert f"Projects from {name}" not in r.text def test_post_page_shows_author_gists_and_projects(app_server): session, name = _signup() post = _new_post(session) _new_gist(session, title="Alpha Gist") _new_project(session, title="Alpha Project") r = requests.get(f"{BASE_URL}/posts/{post['slug']}") assert r.status_code == 200 assert f"Gists from {name}" in r.text assert f"Projects from {name}" in r.text assert "Alpha Gist" in r.text assert "Alpha Project" in r.text def test_post_page_sidebar_json_parity_and_limit(app_server): session, name = _signup() post = _new_post(session) for i in range(7): _new_gist(session, title=f"Gist {i}") r = requests.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) assert r.status_code == 200 data = r.json() assert len(data["author_gists"]) == 5 assert data["author_projects"] == [] def test_post_page_hides_private_project_from_stranger(app_server): session, name = _signup() post = _new_post(session) _new_project(session, title="Hidden Project", is_private=True) stranger = requests.Session() r = stranger.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) assert r.status_code == 200 titles = [p["title"] for p in r.json()["author_projects"]] assert "Hidden Project" not in titles def test_post_page_sidebar_updates_live_after_new_gist(app_server): session, name = _signup() post = _new_post(session) r0 = requests.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) assert r0.json()["author_gists"] == [] _new_gist(session, title="Just Created Gist") r1 = requests.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) titles = [g["title"] for g in r1.json()["author_gists"]] assert "Just Created Gist" in titles