Merge pull request 'feat: Fix badge names returning null in profile endpoint' (#143) from typosaurus/113-fix-badge-names-returning-null-in-profile-endpoint into master
Some checks failed
DevPlace CI / test (push) Failing after 7m41s

Reviewed-on: #143
This commit is contained in:
typosaurus 2026-07-27 01:40:55 +02:00
commit b185574760
2 changed files with 44 additions and 1 deletions

View File

@ -4,6 +4,8 @@ from __future__ import annotations
from typing import Any, Optional from typing import Any, Optional
from pydantic import ConfigDict, Field
from devplacepy.schemas.base import _Out from devplacepy.schemas.base import _Out
@ -64,8 +66,9 @@ class PollOut(_Out):
class BadgeOut(_Out): class BadgeOut(_Out):
name: Optional[str] = None name: Optional[str] = Field(None, alias="badge_name")
created_at: Optional[str] = None created_at: Optional[str] = None
model_config = ConfigDict(populate_by_name=True)
class PostOut(_Out): class PostOut(_Out):

View File

@ -271,3 +271,43 @@ def test_profile_renders_heatmap_and_streak(app_server):
html = s.get(f"{BASE_URL}/profile/{name}").text html = s.get(f"{BASE_URL}/profile/{name}").text
assert "heatmap-grid" in html assert "heatmap-grid" in html
assert "1 day streak" in html assert "1 day streak" in html
def test_profile_badges_json_has_non_null_names(app_server):
import time
from devplacepy.database import get_table, refresh_snapshot
from devplacepy.utils import award_badge
name = f"bdg{int(time.time() * 1000)}"
session = requests.Session()
session.post(
f"{BASE_URL}/auth/signup",
data={
"username": name,
"email": f"{name}@t.dev",
"password": "secret123",
"confirm_password": "secret123",
},
allow_redirects=True,
)
refresh_snapshot()
user = get_table("users").find_one(username=name)
assert user, f"user {name} not found after signup"
award_badge(user["uid"], "First Post")
award_badge(user["uid"], "Member")
refresh_snapshot()
r = session.get(
f"{BASE_URL}/profile/{name}", headers={"Accept": "application/json"}
)
assert r.status_code == 200
body = r.json()
assert "badges" in body, "badges key missing from profile JSON"
assert isinstance(body["badges"], list), "badges is not a list"
assert len(body["badges"]) >= 2, f"expected at least 2 badges, got {len(body['badges'])}"
for badge in body["badges"]:
assert "name" in badge, f"badge missing name key: {badge}"
assert badge["name"] is not None, f"badge name is null: {badge}"
assert isinstance(badge["name"], str), f"badge name is not a string: {badge}"
assert len(badge["name"]) > 0, f"badge name is empty: {badge}"