59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
import uuid
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.testclient import TestClient
|
|
|
|
from app.api import router
|
|
|
|
|
|
def make_client() -> TestClient:
|
|
app = FastAPI()
|
|
app.include_router(router)
|
|
return TestClient(app)
|
|
|
|
|
|
def test_get_payment_requires_api_key() -> None:
|
|
with make_client() as client:
|
|
response = client.get(f"/api/v1/payments/{uuid.uuid4()}")
|
|
|
|
assert response.status_code == 401
|
|
assert response.json() == {"detail": "Invalid or missing API key"}
|
|
|
|
|
|
def test_create_payment_requires_idempotency_key() -> None:
|
|
with make_client() as client:
|
|
response = client.post(
|
|
"/api/v1/payments",
|
|
headers={"X-API-Key": "change-me"},
|
|
json={
|
|
"amount": "100.00",
|
|
"currency": "RUB",
|
|
"description": "Test payment",
|
|
"metadata": {},
|
|
"webhook_url": "https://example.com/webhook",
|
|
},
|
|
)
|
|
|
|
assert response.status_code == 422
|
|
assert response.json()["detail"][0]["loc"] == ["header", "Idempotency-Key"]
|
|
|
|
|
|
def test_create_payment_rejects_unsupported_currency() -> None:
|
|
with make_client() as client:
|
|
response = client.post(
|
|
"/api/v1/payments",
|
|
headers={
|
|
"X-API-Key": "change-me",
|
|
"Idempotency-Key": "test-key",
|
|
},
|
|
json={
|
|
"amount": "100.00",
|
|
"currency": "GBP",
|
|
"description": "Test payment",
|
|
"metadata": {},
|
|
"webhook_url": "https://example.com/webhook",
|
|
},
|
|
)
|
|
|
|
assert response.status_code == 422
|