Fix leaderboard submission display issue: update frontend to correctly handle score vs points
This commit is contained in:
133
reproduce_issue.py
Normal file
133
reproduce_issue.py
Normal file
@@ -0,0 +1,133 @@
|
||||
|
||||
import requests
|
||||
import json
|
||||
import base64
|
||||
|
||||
BASE_URL = "http://localhost:34801"
|
||||
|
||||
def register_user(username, password):
|
||||
url = f"{BASE_URL}/api/register"
|
||||
data = {"username": username, "password": password}
|
||||
try:
|
||||
response = requests.post(url, json=data)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
print(f"Register failed: {response.text}")
|
||||
except Exception as e:
|
||||
print(f"Register error: {e}")
|
||||
return None
|
||||
|
||||
def login_user(username, password):
|
||||
url = f"{BASE_URL}/api/login"
|
||||
data = {"username": username, "password": password}
|
||||
session = requests.Session()
|
||||
try:
|
||||
response = session.post(url, json=data)
|
||||
if response.status_code == 200:
|
||||
return session
|
||||
print(f"Login failed: {response.text}")
|
||||
except Exception as e:
|
||||
print(f"Login error: {e}")
|
||||
return None
|
||||
|
||||
def get_csrf_token(session):
|
||||
url = f"{BASE_URL}/api/csrftoken"
|
||||
response = session.get(url)
|
||||
if response.status_code == 200:
|
||||
return response.json()['token']
|
||||
return None
|
||||
|
||||
def submit_score(session, song_id, difficulty, score_obj, csrf_token):
|
||||
url = f"{BASE_URL}/api/leaderboard/submit"
|
||||
headers = {"X-CSRFToken": csrf_token}
|
||||
data = {
|
||||
"song_id": song_id,
|
||||
"difficulty": difficulty,
|
||||
"score": score_obj
|
||||
}
|
||||
response = session.post(url, json=data, headers=headers)
|
||||
return response.json()
|
||||
|
||||
def get_leaderboard(session, song_id, difficulty):
|
||||
url = f"{BASE_URL}/api/leaderboard/get"
|
||||
params = {"song_id": song_id, "difficulty": difficulty}
|
||||
response = session.get(url, params=params)
|
||||
return response.json()
|
||||
|
||||
def main():
|
||||
username = "debug_user_1"
|
||||
password = "password123"
|
||||
|
||||
print("1. Registering/Logging in...")
|
||||
# Try login first
|
||||
session = login_user(username, password)
|
||||
if not session:
|
||||
# Register
|
||||
reg = register_user(username, password)
|
||||
if reg:
|
||||
session = login_user(username, password)
|
||||
else:
|
||||
print("Could not register or login")
|
||||
return
|
||||
|
||||
print("2. Getting CSRF token...")
|
||||
csrf_token = get_csrf_token(session)
|
||||
if not csrf_token:
|
||||
print("Could not get CSRF token")
|
||||
return
|
||||
|
||||
song_id = 1 # Assuming song 1 exists
|
||||
difficulty = "oni"
|
||||
|
||||
# Simulate scoresheet.js submission (points only)
|
||||
score_obj = {
|
||||
"points": 123456,
|
||||
"good": 100,
|
||||
"ok": 10,
|
||||
"bad": 0,
|
||||
"maxCombo": 110,
|
||||
"drumroll": 5,
|
||||
"crown": "gold"
|
||||
}
|
||||
|
||||
print(f"3. Submitting score: {score_obj['points']}")
|
||||
submit_res = submit_score(session, song_id, difficulty, score_obj, csrf_token)
|
||||
print(f"Submit response: {submit_res}")
|
||||
|
||||
print("4. Fetching leaderboard...")
|
||||
leaderboard_res = get_leaderboard(session, song_id, difficulty)
|
||||
|
||||
if leaderboard_res['status'] == 'ok':
|
||||
leaderboard = leaderboard_res['leaderboard']
|
||||
found = False
|
||||
for entry in leaderboard:
|
||||
if entry['username'] == username:
|
||||
found = True
|
||||
print(f"Found entry: {entry}")
|
||||
print(f"entry.score_value: {entry.get('score_value')}")
|
||||
print(f"entry.score: {entry.get('score')}")
|
||||
|
||||
score_value = entry.get('score_value')
|
||||
score_data = entry.get('score')
|
||||
|
||||
# Check what leaderboard.js would see
|
||||
if score_data and 'score' in score_data:
|
||||
print(f"JS would assume score: {score_data['score']}")
|
||||
else:
|
||||
print("JS would assume score: 0 (undefined)")
|
||||
|
||||
if score_value == 123456:
|
||||
print("SUCCESS: score_value is correct.")
|
||||
else:
|
||||
print(f"FAILURE: score_value is incorrect (expected 123456, got {score_value})")
|
||||
|
||||
if score_data and score_data.get('points') == 123456:
|
||||
print("SUCCESS: points preserved in score object.")
|
||||
|
||||
if not found:
|
||||
print("Entry not found in leaderboard (maybe not top 50?)")
|
||||
else:
|
||||
print(f"Failed to get leaderboard: {leaderboard_res}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user