# retoor import time import requests from devplacepy.database import get_table from tests.conftest import BASE_URL JSON = {"Accept": "application/json"} _counter = [0] def _unique(prefix="feat"): _counter[0] += 1 return f"{prefix}{int(time.time() * 1000)}{_counter[0]}" def _signup(): name = _unique("featuser") 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 def _new_post(session): return session.post( f"{BASE_URL}/posts/create", headers=JSON, data={ "title": _unique("featpost"), "content": "content for the featured topics test post", "topic": "devlog", }, ).json()["data"] def _seed_featured_article(): uid = _unique("featnews") get_table("news").insert( { "uid": uid, "title": _unique("Featured Article"), "slug": _unique("featured-article"), "external_id": uid, "status": "published", "source_name": "test", "url": "https://example.com/article", "description": "a featured article for the post-page test", "content": "", "synced_at": "2024-01-01T00:00:00", "grade": 5, "ai_grade": 5, "show_on_landing": 0, "featured": 1, "featured_locked": 1, "landing_locked": 0, "author": "", "article_published": "", "image_url": "", "has_unique_image": 0, "deleted_at": None, "deleted_by": None, } ) return uid def test_post_page_shows_featured_topics(app_server): session = _signup() post = _new_post(session) _seed_featured_article() r = requests.get(f"{BASE_URL}/posts/{post['slug']}") assert r.status_code == 200 assert 'class="feed-right"' in r.text assert "daily-topic-card" in r.text def test_post_page_json_includes_featured_topics(app_server): session = _signup() post = _new_post(session) _seed_featured_article() r = requests.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) assert r.status_code == 200 data = r.json() assert "featured_topics" in data assert len(data["featured_topics"]) <= 3 assert all("title" in item for item in data["featured_topics"]) def test_post_page_featured_topics_pick_varies(app_server): session = _signup() post = _new_post(session) for _ in range(6): _seed_featured_article() seen = set() for _ in range(20): r = requests.get(f"{BASE_URL}/posts/{post['slug']}", headers=JSON) assert r.status_code == 200 titles = tuple(item["title"] for item in r.json()["featured_topics"]) assert len(titles) == 3 assert len(set(titles)) == 3 seen.add(titles) assert len(seen) > 1, "featured topics never varied across 20 requests"