|
from tests.conftest import BASE_URL
|
|
|
|
|
|
def test_leaderboard_page_loads(alice):
|
|
page, _ = alice
|
|
page.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
|
|
assert page.locator(".leaderboard-header h1").is_visible()
|
|
assert page.is_visible("text=Ranked by total stars")
|
|
|
|
|
|
def test_leaderboard_nav_link(alice):
|
|
page, _ = alice
|
|
page.goto(f"{BASE_URL}/feed", wait_until="domcontentloaded")
|
|
assert page.is_visible("a.topnav-link:has-text('Leaderboard')")
|
|
|
|
|
|
def test_leaderboard_no_pagination(alice):
|
|
page, _ = alice
|
|
page.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
|
|
assert page.locator(".pagination").count() == 0
|
|
|
|
|
|
def test_profile_rank_stat(alice):
|
|
page, user = alice
|
|
page.goto(f"{BASE_URL}/profile/{user['username']}", wait_until="domcontentloaded")
|
|
assert page.is_visible("text=Rank")
|
|
|
|
|
|
def test_leaderboard_ranks_after_upvote(app_server, browser, seeded_db):
|
|
from tests.conftest import login_user
|
|
ctx_a = browser.new_context(viewport={"width": 1400, "height": 900})
|
|
ctx_b = browser.new_context(viewport={"width": 1400, "height": 900})
|
|
pa = ctx_a.new_page()
|
|
pb = ctx_b.new_page()
|
|
pa.set_default_timeout(15000)
|
|
pb.set_default_timeout(15000)
|
|
|
|
login_user(pa, seeded_db["alice"])
|
|
login_user(pb, seeded_db["bob"])
|
|
|
|
pb.goto(f"{BASE_URL}/feed", wait_until="domcontentloaded")
|
|
pb.locator(".feed-fab").first.wait_for(state="visible", timeout=10000)
|
|
pb.locator(".feed-fab").first.click()
|
|
pb.fill("#post-content", "Post for leaderboard ranking test")
|
|
pb.locator("#create-post-modal button.btn-primary:has-text('Post')").click()
|
|
pb.wait_for_url("**/posts/*", timeout=10000, wait_until="domcontentloaded")
|
|
post_url = pb.url
|
|
|
|
pa.goto(post_url, wait_until="domcontentloaded")
|
|
pa.wait_for_timeout(1000)
|
|
vote_btn = pa.locator("button.post-action-btn").filter(has_text="+").first
|
|
vote_btn.wait_for(state="visible", timeout=10000)
|
|
vote_btn.click()
|
|
pa.wait_for_timeout(1500)
|
|
|
|
pa.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
|
|
body = pa.locator("body").text_content()
|
|
assert "Internal Server Error" not in body, f"Got 500 on leaderboard: {body[:300]}"
|
|
assert pa.is_visible("a.leaderboard-name:has-text('bob_test')")
|
|
|
|
ctx_a.close()
|
|
ctx_b.close()
|