Linux native client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.7 KiB

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