Files
PolyWeather/tests/test_reconcile_payment_tx_io.py
T
2026-05-29 17:22:33 +08:00

120 lines
3.4 KiB
Python

import importlib.util
from pathlib import Path
def _load_script():
root = Path(__file__).resolve().parents[1]
path = root / "scripts" / "reconcile_payment_tx.py"
spec = importlib.util.spec_from_file_location("reconcile_payment_tx", path)
module = importlib.util.module_from_spec(spec)
assert spec and spec.loader
spec.loader.exec_module(module)
return module
def test_find_intent_by_tx_queries_tx_hash_directly(monkeypatch):
module = _load_script()
tx_hash = "0x" + "a" * 64
calls = []
class FakeCheckout:
def _rest(self, method, table, *, params, allowed_status):
calls.append(
{
"method": method,
"table": table,
"params": params,
"allowed_status": allowed_status,
}
)
return [{"id": "intent-1", "user_id": "user-1", "tx_hash": tx_hash}]
monkeypatch.setattr(module, "PAYMENT_CHECKOUT", FakeCheckout())
result = module._find_intent_by_tx("user-1", tx_hash.upper())
assert result["id"] == "intent-1"
assert calls == [
{
"method": "GET",
"table": "payment_intents",
"params": {
"select": "id,user_id",
"tx_hash": f"eq.{tx_hash}",
"limit": "1",
},
"allowed_status": [200],
}
]
def test_find_intent_by_tx_rejects_other_user(monkeypatch):
module = _load_script()
class FakeCheckout:
def _rest(self, method, table, *, params, allowed_status):
return [{"id": "intent-other", "user_id": "user-2"}]
monkeypatch.setattr(module, "PAYMENT_CHECKOUT", FakeCheckout())
assert module._find_intent_by_tx("user-1", "0x" + "a" * 64) is None
def test_find_intent_by_order_id_uses_unique_order_lookup(monkeypatch):
module = _load_script()
calls = []
class FakeCheckout:
def _rest(self, method, table, *, params, allowed_status):
calls.append(
{
"method": method,
"table": table,
"params": params,
"allowed_status": allowed_status,
}
)
return [
{
"id": "intent-1",
"user_id": "user-1",
"order_id_hex": "0x" + "b" * 64,
}
]
monkeypatch.setattr(module, "PAYMENT_CHECKOUT", FakeCheckout())
result = module._find_intent_by_order_id("user-1", "0X" + "B" * 64)
assert result["id"] == "intent-1"
assert calls == [
{
"method": "GET",
"table": "payment_intents",
"params": {
"select": "id,user_id",
"order_id_hex": "eq.0x" + "b" * 64,
"limit": "1",
},
"allowed_status": [200],
}
]
def test_find_intent_by_order_id_rejects_other_user(monkeypatch):
module = _load_script()
class FakeCheckout:
def _rest(self, method, table, *, params, allowed_status):
return [
{
"id": "intent-other",
"user_id": "user-2",
"order_id_hex": "0x" + "b" * 64,
}
]
monkeypatch.setattr(module, "PAYMENT_CHECKOUT", FakeCheckout())
assert module._find_intent_by_order_id("user-1", "0x" + "b" * 64) is None