@@ -0,0 +1,55 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user