-
-
Notifications
You must be signed in to change notification settings - Fork 104
/
Copy pathtest_wallet_requests.py
57 lines (49 loc) · 1.81 KB
/
test_wallet_requests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import json
import pytest
import pytest_asyncio
import respx
from httpx import Request, Response
from cashu.core.base import BlindedSignature
from cashu.core.crypto.b_dhke import hash_to_curve
from cashu.wallet.wallet import Wallet
from cashu.wallet.wallet import Wallet as Wallet1
from tests.conftest import SERVER_ENDPOINT
from tests.helpers import pay_if_regtest
@pytest_asyncio.fixture(scope="function")
async def wallet1(mint):
wallet1 = await Wallet1.with_db(
url=SERVER_ENDPOINT,
db="test_data/wallet1",
name="wallet1",
)
await wallet1.load_mint()
yield wallet1
@pytest.mark.asyncio
async def test_swap_outputs_are_sorted(wallet1: Wallet):
await wallet1.load_mint()
mint_quote = await wallet1.request_mint(16)
await pay_if_regtest(mint_quote.request)
await wallet1.mint(16, quote_id=mint_quote.quote, split=[16])
assert wallet1.balance == 16
test_url = f"{wallet1.url}/v1/swap"
key = hash_to_curve("test".encode("utf-8"))
mock_blind_signature = BlindedSignature(
id=wallet1.keyset_id,
amount=8,
C_=key.serialize().hex(),
)
mock_response_data = {"signatures": [mock_blind_signature.dict()]}
with respx.mock() as mock:
route = mock.post(test_url).mock(
return_value=Response(200, json=mock_response_data)
)
await wallet1.select_to_send(wallet1.proofs, 5)
assert route.called
assert route.call_count == 1
request: Request = route.calls[0].request
assert request.method == "POST"
assert request.url == test_url
request_data = json.loads(request.content.decode("utf-8"))
output_amounts = [o["amount"] for o in request_data["outputs"]]
# assert that output amounts are sorted
assert output_amounts == sorted(output_amounts)