67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
import pytest
|
|
|
|
from src.core.exceptions import (
|
|
PIPException,
|
|
NotFoundException,
|
|
ConflictException,
|
|
ValidationException,
|
|
UnauthorizedException,
|
|
ForbiddenException,
|
|
RateLimitException,
|
|
ServiceUnavailableException,
|
|
ConnectorException,
|
|
SyncException,
|
|
)
|
|
|
|
|
|
class TestPIPException:
|
|
def test_base_exception(self):
|
|
exc = PIPException("Something failed", code="TEST_ERROR", status_code=500)
|
|
assert exc.message == "Something failed"
|
|
assert exc.code == "TEST_ERROR"
|
|
assert exc.status_code == 500
|
|
assert "timestamp" in exc.to_dict()["error"]
|
|
|
|
def test_not_found(self):
|
|
exc = NotFoundException("Pharmacy", "PH-001")
|
|
assert exc.status_code == 404
|
|
assert exc.code == "NOT_FOUND"
|
|
d = exc.to_dict()
|
|
assert "Pharmacy" in d["error"]["message"]
|
|
|
|
def test_conflict(self):
|
|
exc = ConflictException("Duplicate")
|
|
assert exc.status_code == 409
|
|
|
|
def test_validation(self):
|
|
exc = ValidationException("Invalid input")
|
|
assert exc.status_code == 422
|
|
|
|
def test_unauthorized(self):
|
|
exc = UnauthorizedException()
|
|
assert exc.status_code == 401
|
|
|
|
def test_forbidden(self):
|
|
exc = ForbiddenException(required_role="admin")
|
|
assert exc.status_code == 403
|
|
assert exc.details["required_role"] == "admin"
|
|
|
|
def test_rate_limit(self):
|
|
exc = RateLimitException()
|
|
assert exc.status_code == 429
|
|
|
|
def test_service_unavailable(self):
|
|
exc = ServiceUnavailableException("redis")
|
|
assert exc.status_code == 503
|
|
assert "redis" in exc.details["service"]
|
|
|
|
def test_connector_error(self):
|
|
exc = ConnectorException("farmatic", "Connection refused")
|
|
assert exc.status_code == 502
|
|
assert exc.details["connector_type"] == "farmatic"
|
|
|
|
def test_sync_error(self):
|
|
exc = SyncException("pharmacy-1", "Timeout")
|
|
assert exc.status_code == 502
|
|
assert exc.details["pharmacy_id"] == "pharmacy-1"
|