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.
57 lines
2.2 KiB
57 lines
2.2 KiB
import tempfile |
|
from pathlib import Path |
|
|
|
from imwald.core.database import Database |
|
from imwald.core.nostr_crypto import build_signed_event |
|
from imwald.core.relay_list import parse_kind10002_tags, resolve_for_account |
|
from imwald.core.relay_policy import DEFAULT_READ_RELAYS, DEFAULT_WRITE_RELAYS |
|
|
|
|
|
def _sk() -> bytes: |
|
return bytes.fromhex("3501454135014541350145413501453fefb02227e449e57cf4d3a3ce05378683") |
|
|
|
|
|
def test_parse_nip65_triple_tags() -> None: |
|
tags = [ |
|
["r", "wss://read.only", "read"], |
|
["r", "wss://write.only", "write"], |
|
["r", "wss://both.relay"], |
|
] |
|
reads, writes = parse_kind10002_tags(tags) |
|
assert "wss://read.only" in reads and "wss://read.only" not in writes |
|
assert "wss://write.only" in writes and "wss://write.only" not in reads |
|
assert "wss://both.relay" in reads and "wss://both.relay" in writes |
|
|
|
|
|
def test_parse_legacy_read_write_pairs() -> None: |
|
tags = [["r", "wss://a"], ["read", "true"], ["r", "wss://b"], ["write", "true"]] |
|
reads, writes = parse_kind10002_tags(tags) |
|
assert reads == ["wss://a"] |
|
assert writes == ["wss://b"] |
|
|
|
|
|
def test_resolve_defaults_without_kind10002() -> None: |
|
with tempfile.TemporaryDirectory() as td: |
|
db = Database(Path(td) / "x.sqlite") |
|
db.connect() |
|
sk = _sk() |
|
me = build_signed_event(sk, created_at=1, kind=0, tags=[], content="{}")["pubkey"] |
|
r = resolve_for_account(db, me) |
|
assert r.read_urls == list(DEFAULT_READ_RELAYS) |
|
assert r.write_urls == list(DEFAULT_WRITE_RELAYS) |
|
assert r.had_kind10002 is False |
|
|
|
|
|
def test_resolve_uses_stored_kind10002() -> None: |
|
with tempfile.TemporaryDirectory() as td: |
|
db = Database(Path(td) / "y.sqlite") |
|
db.connect() |
|
sk = _sk() |
|
me = build_signed_event(sk, created_at=1, kind=0, tags=[], content="{}")["pubkey"] |
|
tags = [["r", "wss://custom.read", "read"], ["r", "wss://custom.write", "write"]] |
|
ev = build_signed_event(sk, created_at=2, kind=10002, tags=tags, content="") |
|
db.upsert_event(ev) |
|
r = resolve_for_account(db, me) |
|
assert r.read_urls == ["wss://custom.read"] |
|
assert r.write_urls == ["wss://custom.write"] |
|
assert r.had_kind10002 is True
|
|
|