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