|
1 | 1 | import pytest |
2 | | -from fastapi import routing, status |
| 2 | +from fastapi import status |
3 | 3 | from freezegun import freeze_time |
4 | 4 | from httpx import AsyncClient |
5 | 5 | from sqlalchemy import delete |
|
8 | 8 | from app.auth import api_messages |
9 | 9 | from app.auth.jwt import create_jwt_token |
10 | 10 | from app.auth.models import User |
11 | | -from app.auth.views import router |
| 11 | +from app.main import app |
12 | 12 |
|
13 | 13 |
|
14 | 14 | @pytest.mark.asyncio(loop_scope="session") |
15 | | -@pytest.mark.parametrize("api_route", router.routes) |
16 | | -async def test_api_routes_raise_401_on_jwt_decode_errors( |
| 15 | +async def test_api_raise_401_on_jwt_decode_errors( |
17 | 16 | client: AsyncClient, |
18 | | - api_route: routing.APIRoute, |
19 | 17 | ) -> None: |
20 | | - for method in api_route.methods: |
21 | | - response = await client.request( |
22 | | - method=method, |
23 | | - url=api_route.path, |
24 | | - headers={"Authorization": "Bearer garbage-invalid-jwt"}, |
25 | | - ) |
26 | | - assert response.status_code == status.HTTP_401_UNAUTHORIZED |
27 | | - assert response.json() == {"detail": "Token invalid: Not enough segments"} |
| 18 | + response = await client.get( |
| 19 | + app.url_path_for("read_current_user"), |
| 20 | + headers={"Authorization": "Bearer garbage-invalid-jwt"}, |
| 21 | + ) |
| 22 | + |
| 23 | + assert response.status_code == status.HTTP_401_UNAUTHORIZED, response.text |
| 24 | + assert response.json() == {"detail": "Token invalid: Not enough segments"} |
28 | 25 |
|
29 | 26 |
|
30 | 27 | @pytest.mark.asyncio(loop_scope="session") |
31 | | -@pytest.mark.parametrize("api_route", router.routes) |
32 | | -async def test_api_routes_raise_401_on_jwt_expired_token( |
| 28 | +async def test_api_raise_401_on_jwt_expired_token( |
33 | 29 | client: AsyncClient, |
34 | 30 | default_user: User, |
35 | | - api_route: routing.APIRoute, |
36 | 31 | ) -> None: |
37 | 32 | with freeze_time("2023-01-01"): |
38 | 33 | jwt = create_jwt_token(default_user.user_id) |
39 | 34 | with freeze_time("2023-02-01"): |
40 | | - for method in api_route.methods: |
41 | | - response = await client.request( |
42 | | - method=method, |
43 | | - url=api_route.path, |
44 | | - headers={"Authorization": f"Bearer {jwt.access_token}"}, |
45 | | - ) |
46 | | - assert response.status_code == status.HTTP_401_UNAUTHORIZED |
47 | | - assert response.json() == {"detail": "Token invalid: Signature has expired"} |
| 35 | + response = await client.get( |
| 36 | + app.url_path_for("read_current_user"), |
| 37 | + headers={"Authorization": f"Bearer {jwt.access_token}"}, |
| 38 | + ) |
| 39 | + |
| 40 | + assert response.status_code == status.HTTP_401_UNAUTHORIZED, response.text |
| 41 | + assert response.json() == {"detail": "Token invalid: Signature has expired"} |
48 | 42 |
|
49 | 43 |
|
50 | 44 | @pytest.mark.asyncio(loop_scope="session") |
51 | | -@pytest.mark.parametrize("api_route", router.routes) |
52 | | -async def test_api_routes_raise_401_on_jwt_user_deleted( |
| 45 | +async def test_api_raise_401_on_jwt_user_deleted( |
53 | 46 | client: AsyncClient, |
54 | 47 | default_user_headers: dict[str, str], |
55 | 48 | default_user: User, |
56 | | - api_route: routing.APIRoute, |
57 | 49 | session: AsyncSession, |
58 | 50 | ) -> None: |
59 | 51 | await session.execute(delete(User).where(User.user_id == default_user.user_id)) |
60 | 52 | await session.commit() |
61 | 53 |
|
62 | | - for method in api_route.methods: |
63 | | - response = await client.request( |
64 | | - method=method, |
65 | | - url=api_route.path, |
66 | | - headers=default_user_headers, |
67 | | - ) |
68 | | - assert response.status_code == status.HTTP_401_UNAUTHORIZED |
69 | | - assert response.json() == {"detail": api_messages.JWT_ERROR_USER_REMOVED} |
| 54 | + response = await client.get( |
| 55 | + app.url_path_for("read_current_user"), |
| 56 | + headers=default_user_headers, |
| 57 | + ) |
| 58 | + assert response.status_code == status.HTTP_401_UNAUTHORIZED, response.text |
| 59 | + assert response.json() == {"detail": api_messages.JWT_ERROR_USER_REMOVED} |
0 commit comments