Files
devplacepy/tests/unit/services/nodes/ledger.py
T
retoor 6f80a820da
DevPlace CI / test (push) Failing after 3m13s
Zo doen wijdat in oost
2026-10-16 07:20:44 +02:00

56 lines
2.0 KiB
Python

# retoor <retoor@molodetz.nl>
from devplacepy.database import get_table
from devplacepy.database import nodes as store
from devplacepy.services.nodes import ledger as ledger_module
from devplacepy.services.nodes.ledger import FIRST_BADGE, GIGABYTE, UsageLedger
from devplacepy.utils import generate_uid, register_account
def member(local_db):
name = "ledger" + generate_uid()[-10:]
uid, _, _ = register_account(name, f"{name}@t.dev", "secret123", age_band="adult", accepted_terms=True)
return uid
def badges(uid):
return {row["badge_name"] for row in get_table("badges").find(user_uid=uid)}
def test_first_success_awards_xp_and_the_first_badge(local_db):
uid = member(local_db)
before = get_table("users").find_one(uid=uid).get("xp") or 0
store.record_job(generate_uid(), uid, ok=True, bytes_up=10, bytes_down=100)
UsageLedger().reward(uid)
assert FIRST_BADGE in badges(uid)
assert (get_table("users").find_one(uid=uid).get("xp") or 0) > before
def test_xp_stops_at_the_daily_cap_but_not_the_counters(local_db):
uid = member(local_db)
ledger = UsageLedger()
store.record_job(generate_uid(), uid, ok=True, bytes_up=1, bytes_down=1)
granted = 0
for _ in range(store.LIMITS.xp_daily_cap + 10):
granted += int(ledger.claim_xp(uid, ledger_module.XP_PER_JOB))
assert granted == store.LIMITS.xp_daily_cap
def test_byte_badges_follow_lifetime_totals(local_db):
uid = member(local_db)
store.record_job(
generate_uid(), uid, ok=True, bytes_up=0, bytes_down=GIGABYTE, cap_bytes=2 * GIGABYTE
)
UsageLedger().reward(uid)
assert {"Gigabyte Donor"} <= badges(uid)
assert "10 GB Donor" not in badges(uid)
def test_a_second_reward_call_does_not_duplicate_badges(local_db):
uid = member(local_db)
store.record_job(generate_uid(), uid, ok=True, bytes_up=1, bytes_down=1)
ledger = UsageLedger()
ledger.reward(uid)
ledger.reward(uid)
assert len(list(get_table("badges").find(user_uid=uid, badge_name=FIRST_BADGE))) == 1