51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
"""Base response model tests (PaymentResult ergonomic helpers)."""
|
|
|
|
import pytest
|
|
|
|
from nepali_payment.exceptions import PaymentError
|
|
from nepali_payment.models import PaymentResult
|
|
from nepali_payment.models.connectips import PaymentRequest as ConnectIpPaymentRequest
|
|
from nepali_payment.models.esewa import PaymentRequest as EsewaPaymentRequest
|
|
from nepali_payment.models.fonepay import QrRequest, QrStatusRequest
|
|
from nepali_payment.models.khalti import PaymentRequest as KhaltiPaymentRequest
|
|
|
|
|
|
def test_payment_result_bool_true_on_success():
|
|
assert bool(PaymentResult(success=True)) is True
|
|
|
|
|
|
def test_payment_result_bool_false_on_failure():
|
|
assert bool(PaymentResult(success=False)) is False
|
|
|
|
|
|
def test_payment_result_raise_for_status_returns_self_on_success():
|
|
result = PaymentResult(success=True, data={"x": 1})
|
|
assert result.raise_for_status() is result
|
|
|
|
|
|
def test_payment_result_raise_for_status_raises_on_failure():
|
|
result = PaymentResult(success=False, message="provider said no")
|
|
with pytest.raises(PaymentError) as excinfo:
|
|
result.raise_for_status()
|
|
assert str(excinfo.value) == "provider said no"
|
|
|
|
|
|
def test_payment_result_raise_for_status_default_message():
|
|
with pytest.raises(PaymentError):
|
|
PaymentResult(success=False).raise_for_status()
|
|
|
|
|
|
def test_slotted_request_models_serialize_to_dict():
|
|
"""Request models use slots and serialize via asdict — no __dict__ reliance."""
|
|
for model in (KhaltiPaymentRequest, EsewaPaymentRequest, QrRequest, QrStatusRequest, ConnectIpPaymentRequest):
|
|
assert model.__slots__ is not None, f"{model.__name__} must use slots"
|
|
|
|
esewa = EsewaPaymentRequest(amount="10", total_amount="12", signature="sig")
|
|
assert esewa.to_dict() == {"amount": "10", "total_amount": "12", "signature": "sig"}
|
|
|
|
qr = QrRequest(amount="33", merchant_code="NBQM", data_validation="dv")
|
|
assert qr.to_dict()["merchantCode"] == "NBQM"
|
|
|
|
khalti = KhaltiPaymentRequest(amount=100, purchase_order_name="Mug")
|
|
assert khalti.amount == 100 # slots still exposes attributes
|