"""Database helpers for per-author metadata relay ``since`` cursors.""" import tempfile from hashlib import sha256 from pathlib import Path from imwald.core.database import Database from imwald.core.nostr_crypto import build_signed_event, pubkey_hex_from_secret def _sk() -> bytes: return bytes.fromhex("3501454135014541350145413501453fefb02227e449e57cf4d3a3ce05378683") def test_max_created_at_for_author_kinds() -> None: sk = _sk() pk = pubkey_hex_from_secret(sk) k0 = build_signed_event(sk, created_at=10, kind=0, tags=[], content="{}") k1 = build_signed_event(sk, created_at=50, kind=1, tags=[], content="hi") with tempfile.TemporaryDirectory() as td: db = Database(Path(td) / "m.sqlite") db.connect() db.upsert_event(k0) db.upsert_event(k1) assert db.max_created_at_for_author_kinds(pk, (0, 30000)) == 10 assert db.max_created_at_for_author_kinds(pk, (0, 1)) == 50 def test_distinct_pubkeys_recent_orders_by_max_created() -> None: sk_a = _sk() sk_b = sha256(b"author-b").digest() pk_a = pubkey_hex_from_secret(sk_a) pk_b = pubkey_hex_from_secret(sk_b) ea = build_signed_event(sk_a, created_at=100, kind=1, tags=[], content="a") eb_old = build_signed_event(sk_b, created_at=50, kind=1, tags=[], content="old") eb_new = build_signed_event(sk_b, created_at=300, kind=1, tags=[], content="new") with tempfile.TemporaryDirectory() as td: db = Database(Path(td) / "d.sqlite") db.connect() db.upsert_event(ea) db.upsert_event(eb_old) db.upsert_event(eb_new) got = db.distinct_pubkeys_recent(10) assert got[0] == pk_b.lower() assert got[1] == pk_a.lower()