Files
seedPass/src/tests/test_nostr_sdk_workflow.py
2025-08-04 11:43:34 -04:00

72 lines
1.9 KiB
Python

import asyncio
import json
import threading
import time
from websocket import create_connection
import websockets
from nostr.key_manager import KeyManager
from nostr_sdk import nostr_sdk as sdk
class FakeRelay:
def __init__(self):
self.events = []
async def handler(self, ws):
async for message in ws:
data = json.loads(message)
if data[0] == "EVENT":
event = data[1]
self.events.append(event)
await ws.send(json.dumps(["OK", event["id"], True, ""]))
elif data[0] == "REQ":
sub_id = data[1]
for event in self.events:
await ws.send(json.dumps(["EVENT", sub_id, event]))
await ws.send(json.dumps(["EOSE", sub_id]))
def run_relay(relay, host="localhost", port=8765):
async def main():
async with websockets.serve(relay.handler, host, port):
await asyncio.Future()
asyncio.run(main())
def test_nostr_sdk_send_receive(tmp_path):
relay = FakeRelay()
thread = threading.Thread(target=run_relay, args=(relay,), daemon=True)
thread.start()
time.sleep(0.5)
seed = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
fingerprint = "test"
km = KeyManager(seed, fingerprint)
ws = create_connection("ws://localhost:8765")
keys = sdk.Keys.parse(km.get_private_key_hex())
event = (
sdk.EventBuilder.text_note("hello")
.build(keys.public_key())
.sign_with_keys(keys)
)
ws.send(json.dumps(["EVENT", json.loads(event.as_json())]))
sub_id = "1"
ws.send(json.dumps(["REQ", sub_id, {}]))
received = None
while True:
msg = json.loads(ws.recv())
if msg[0] == "EVENT":
received = msg[2]
elif msg[0] == "EOSE":
break
ws.close()
assert received is not None
assert received["content"] == "hello"