forked from retoor/devplacepy
chore: reorganize test files into domain-specific subdirectories under tests/
Split the monolithic test directory into three tiers (unit, api, e2e) with a path-mirroring directory structure. Added corresponding Makefile targets (test-unit, test-api, test-e2e) and updated all documentation references (CLAUDE.md, README.md, testing-cicd.html, testing-framework.html, testing-make.html) to reflect the new layout and naming conventions.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
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_no_pagination(alice):
|
||||
page, _ = alice
|
||||
page.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
|
||||
assert page.locator(".pagination").count() == 0
|
||||
|
||||
|
||||
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})
|
||||
try:
|
||||
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')")
|
||||
finally:
|
||||
ctx_a.close()
|
||||
ctx_b.close()
|
||||
Reference in New Issue
Block a user