# retoor <retoor@molodetz.nl>
import os
import time
from client import DevRant
BASE = os.environ.get("DEVRANT_BASE", "http://localhost:10500")
passed = 0
failed = 0
def check(label: str, condition: bool, detail: str = "") -> None:
global passed, failed
if condition:
passed += 1
print(f" PASS {label}")
else:
failed += 1
print(f" FAIL {label} {detail}")
def main() -> None:
suffix = str(int(time.time()))
username = f"dr_smoke_{suffix}"
api = DevRant(BASE, username, "secret6")
reg = api.register(f"{username}@example.test")
check("register", reg.get("success"), str(reg))
login = DevRant(BASE, username, "secret6").login()
check("login returns token", bool(login.get("token_key")))
api.login()
posted = api.post_rant("Smoke test rant about Python", "python,smoke,devrant")
check("post rant", posted.get("success"))
rant_id = posted.get("rant_id")
feed = api.rants(limit=5)
check("feed returns rants", any(r["id"] == rant_id for r in feed))
detail = api.rant(rant_id)
check("get rant tags round-trip", detail.get("rant", {}).get("tags") == ["python", "smoke", "devrant"])
check("get rant editable", detail.get("rant", {}).get("editable") is True)
commented = api.comment(rant_id, "Nice rant!")
check("comment", commented.get("success"))
voted = api.vote_rant(rant_id, 1)
check("vote score", voted.get("rant", {}).get("score") == 1)
check("vote state", voted.get("rant", {}).get("vote_state") == 1)
check("favorite", api.favorite(rant_id).get("success"))
check("unfavorite", api.unfavorite(rant_id).get("success"))
uid = api.user_id(username)
check("get-user-id", bool(uid))
profile = api.profile(uid)
check("profile score", profile.get("score") == 1)
check("profile counts", profile.get("content", {}).get("counts", {}).get("rants") == 1)
api.edit_profile(profile_about="I build with Python", profile_github="smoke")
profile = api.profile(uid)
check("edit-profile bio", profile.get("about") == "I build with Python")
check("skills derived from bio", profile.get("skills") == "I build with Python")
notifs = api.notifs()
check("notif-feed shape", "unread" in notifs and "items" in notifs)
deleted = api.delete_rant(rant_id)
check("delete rant", deleted.get("success"))
bad = DevRant(BASE, username, "wrongpw")
try:
bad.login()
check("bad login rejected", False)
except RuntimeError:
check("bad login rejected", True)
print(f"\n{passed} passed, {failed} failed")
raise SystemExit(1 if failed else 0)
if __name__ == "__main__":
main()