|
# 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()
|