mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-10 00:09:04 +00:00
Add StateManager and relay CLI
This commit is contained in:
53
src/tests/test_cli_relays.py
Normal file
53
src/tests/test_cli_relays.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from types import SimpleNamespace
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from seedpass.cli import app
|
||||
from seedpass import cli
|
||||
|
||||
|
||||
class DummyService:
|
||||
def __init__(self, relays):
|
||||
self.relays = relays
|
||||
|
||||
def get_pubkey(self):
|
||||
return "npub"
|
||||
|
||||
def list_relays(self):
|
||||
return self.relays
|
||||
|
||||
def add_relay(self, url):
|
||||
if url in self.relays:
|
||||
raise ValueError("exists")
|
||||
self.relays.append(url)
|
||||
|
||||
def remove_relay(self, idx):
|
||||
if not 1 <= idx <= len(self.relays):
|
||||
raise ValueError("bad")
|
||||
if len(self.relays) == 1:
|
||||
raise ValueError("min")
|
||||
self.relays.pop(idx - 1)
|
||||
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_cli_relay_crud(monkeypatch):
|
||||
relays = ["wss://a"]
|
||||
|
||||
def pm_factory(*a, **k):
|
||||
return SimpleNamespace()
|
||||
|
||||
monkeypatch.setattr(cli, "PasswordManager", pm_factory)
|
||||
monkeypatch.setattr(cli, "NostrService", lambda pm: DummyService(relays))
|
||||
|
||||
result = runner.invoke(app, ["nostr", "list-relays"])
|
||||
assert "1: wss://a" in result.stdout
|
||||
|
||||
result = runner.invoke(app, ["nostr", "add-relay", "wss://b"])
|
||||
assert result.exit_code == 0
|
||||
assert "Added" in result.stdout
|
||||
assert relays == ["wss://a", "wss://b"]
|
||||
|
||||
result = runner.invoke(app, ["nostr", "remove-relay", "1"])
|
||||
assert result.exit_code == 0
|
||||
assert relays == ["wss://b"]
|
26
src/tests/test_state_manager.py
Normal file
26
src/tests/test_state_manager.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from tempfile import TemporaryDirectory
|
||||
from pathlib import Path
|
||||
|
||||
from seedpass.core.state_manager import StateManager
|
||||
from nostr.client import DEFAULT_RELAYS
|
||||
|
||||
|
||||
def test_state_manager_round_trip():
|
||||
with TemporaryDirectory() as tmpdir:
|
||||
sm = StateManager(Path(tmpdir))
|
||||
state = sm.state
|
||||
assert state["relays"] == list(DEFAULT_RELAYS)
|
||||
assert state["last_bip85_idx"] == 0
|
||||
assert state["last_sync_ts"] == 0
|
||||
|
||||
sm.add_relay("wss://example.com")
|
||||
sm.update_state(last_bip85_idx=5, last_sync_ts=123)
|
||||
|
||||
sm2 = StateManager(Path(tmpdir))
|
||||
state2 = sm2.state
|
||||
assert "wss://example.com" in state2["relays"]
|
||||
assert state2["last_bip85_idx"] == 5
|
||||
assert state2["last_sync_ts"] == 123
|
||||
|
||||
sm2.remove_relay(1) # remove first default relay
|
||||
assert len(sm2.list_relays()) == len(DEFAULT_RELAYS)
|
Reference in New Issue
Block a user