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.
 

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