feat(bigmind): add tiered AI-generated achievement badges with image rendering
This commit is contained in:
@@ -7,6 +7,7 @@ BIGMIND_DB_PATH + BIGMIND_USER to a fresh SQLite file per test.
|
||||
import pytest
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from bigmind import memory_store
|
||||
from bigmind.db import db
|
||||
from bigmind.profile_builder import compute_achievements, build_profile_data
|
||||
|
||||
|
||||
@@ -44,6 +45,11 @@ class TestComputeAchievements:
|
||||
"on_fire", "storyteller", "night_owl", "speed_thinker",
|
||||
"first_handshake", "birthday", "shared_mind",
|
||||
"frugal_mind", "quarter_million", "token_millionaire", "sniper",
|
||||
"networker_bronze", "networker_silver", "networker_gold", "networker_platinum",
|
||||
"tokensniper_bronze", "tokensniper_silver", "tokensniper_gold", "tokensniper_platinum",
|
||||
"hypothesismaster_bronze", "hypothesismaster_silver", "hypothesismaster_gold", "hypothesismaster_platinum",
|
||||
"memoryarchitect_bronze", "memoryarchitect_silver", "memoryarchitect_gold", "memoryarchitect_platinum",
|
||||
"sessionveteran_bronze", "sessionveteran_silver", "sessionveteran_gold", "sessionveteran_platinum",
|
||||
}
|
||||
assert expected == ids
|
||||
|
||||
@@ -325,4 +331,60 @@ class TestComputeAchievements:
|
||||
# At minimum: first_breath + first_handshake = 2
|
||||
assert len(unlocked) >= 2
|
||||
|
||||
class TestTieredAchievements:
|
||||
def test_networker_bronze(self):
|
||||
uid = _uid()
|
||||
with db() as conn:
|
||||
conn.execute("INSERT INTO people (user_id, username) VALUES (?, ?)", (uid, "test"))
|
||||
conn.commit()
|
||||
achs = compute_achievements(uid)
|
||||
bronze = next(a for a in achs if a['id'] == 'networker_bronze')
|
||||
assert bronze['unlocked'] is True
|
||||
assert bronze['image'].endswith('networker_bronze.png')
|
||||
|
||||
def test_tokensniper_silver(self):
|
||||
uid = _uid()
|
||||
sid = memory_store.create_session(uid)
|
||||
memory_store.log_token_save(sid, uid, "big save", 60000, "grep")
|
||||
achs = compute_achievements(uid)
|
||||
silver = next(a for a in achs if a['id'] == 'tokensniper_silver')
|
||||
assert silver['unlocked'] is True
|
||||
|
||||
def test_hypothesismaster_bronze(self):
|
||||
uid = _uid()
|
||||
sid = memory_store.create_session(uid)
|
||||
for _ in range(3):
|
||||
hid = memory_store.add_hypothesis(uid, sid, "test", 0.8)
|
||||
memory_store.resolve_hypothesis(hid, uid, "confirmed", "yes")
|
||||
achs = compute_achievements(uid)
|
||||
bronze = next(a for a in achs if a['id'] == 'hypothesismaster_bronze')
|
||||
assert bronze['unlocked'] is True
|
||||
|
||||
def test_memoryarchitect_silver(self):
|
||||
uid = _uid()
|
||||
for _ in range(100):
|
||||
memory_store.store_fact(uid, "test", f"fact {_}")
|
||||
achs = compute_achievements(uid)
|
||||
silver = next(a for a in achs if a['id'] == 'memoryarchitect_silver')
|
||||
assert silver['unlocked'] is True
|
||||
|
||||
def test_sessionveteran_bronze(self):
|
||||
uid = _uid()
|
||||
for _ in range(50):
|
||||
sid = memory_store.create_session(uid)
|
||||
_close_session(sid)
|
||||
achs = compute_achievements(uid)
|
||||
bronze = next(a for a in achs if a['id'] == 'sessionveteran_bronze')
|
||||
assert bronze['unlocked'] is True
|
||||
|
||||
def test_tiered_achievements_have_image(self):
|
||||
uid = _uid()
|
||||
achs = compute_achievements(uid)
|
||||
tiered_ids = [
|
||||
f"{cat}_{tier}" for cat in ["networker", "tokensniper", "hypothesismaster", "memoryarchitect", "sessionveteran"]
|
||||
for tier in ["bronze", "silver", "gold", "platinum"]
|
||||
]
|
||||
for tid in tiered_ids:
|
||||
a = next(aa for aa in achs if aa['id'] == tid)
|
||||
assert a['image'] is not None
|
||||
assert a['image'].endswith(tid + '.png')
|
||||
|
||||
Reference in New Issue
Block a user