fastapi

Форк
0
/
test_exception_handlers.py 
67 строк · 1.9 Кб
1
import pytest
2
from fastapi import FastAPI, HTTPException
3
from fastapi.exceptions import RequestValidationError
4
from fastapi.testclient import TestClient
5
from starlette.responses import JSONResponse
6

7

8
def http_exception_handler(request, exception):
9
    return JSONResponse({"exception": "http-exception"})
10

11

12
def request_validation_exception_handler(request, exception):
13
    return JSONResponse({"exception": "request-validation"})
14

15

16
def server_error_exception_handler(request, exception):
17
    return JSONResponse(status_code=500, content={"exception": "server-error"})
18

19

20
app = FastAPI(
21
    exception_handlers={
22
        HTTPException: http_exception_handler,
23
        RequestValidationError: request_validation_exception_handler,
24
        Exception: server_error_exception_handler,
25
    }
26
)
27

28
client = TestClient(app)
29

30

31
@app.get("/http-exception")
32
def route_with_http_exception():
33
    raise HTTPException(status_code=400)
34

35

36
@app.get("/request-validation/{param}/")
37
def route_with_request_validation_exception(param: int):
38
    pass  # pragma: no cover
39

40

41
@app.get("/server-error")
42
def route_with_server_error():
43
    raise RuntimeError("Oops!")
44

45

46
def test_override_http_exception():
47
    response = client.get("/http-exception")
48
    assert response.status_code == 200
49
    assert response.json() == {"exception": "http-exception"}
50

51

52
def test_override_request_validation_exception():
53
    response = client.get("/request-validation/invalid")
54
    assert response.status_code == 200
55
    assert response.json() == {"exception": "request-validation"}
56

57

58
def test_override_server_error_exception_raises():
59
    with pytest.raises(RuntimeError):
60
        client.get("/server-error")
61

62

63
def test_override_server_error_exception_response():
64
    client = TestClient(app, raise_server_exceptions=False)
65
    response = client.get("/server-error")
66
    assert response.status_code == 500
67
    assert response.json() == {"exception": "server-error"}
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.