Skip to content

Commit 124fce2

Browse files
committed
test: cover auth deps edge cases for 90% coverage threshold
1 parent 1953abc commit 124fce2

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

backend/tests/api/routes/test_authorization.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33

44
import pytest
55
from fastapi.testclient import TestClient
6+
from sqlmodel import Session
67

8+
from app import crud
79
from app.core.config import settings
10+
from app.models import UserCreate, UserUpdate
811
from tests.utils.user import (
912
user_authentication_headers,
1013
)
14+
from tests.utils.utils import random_email, random_lower_string
1115

1216

1317
def test_manager_can_list_users(
@@ -105,6 +109,61 @@ def test_metrics_admin_and_manager_allowed_member_denied(
105109
assert member_response.status_code == 403
106110

107111

112+
def test_invalid_access_token(client: TestClient) -> None:
113+
headers = {"Authorization": "Bearer invalid-token"}
114+
response = client.get(f"{settings.API_V1_STR}/users/me", headers=headers)
115+
assert response.status_code == 403
116+
assert response.json()["detail"] == "Could not validate credentials"
117+
118+
119+
def test_inactive_user_cannot_access(client: TestClient, db: Session) -> None:
120+
email = random_email()
121+
password = random_lower_string()
122+
user_in = UserCreate(email=email, password=password, is_active=True)
123+
user = crud.create_user(session=db, user_create=user_in)
124+
headers = user_authentication_headers(client=client, email=email, password=password)
125+
126+
user_in_update = UserUpdate(is_active=False)
127+
crud.update_user(session=db, db_user=user, user_in=user_in_update)
128+
129+
response = client.get(f"{settings.API_V1_STR}/users/me", headers=headers)
130+
assert response.status_code == 400
131+
assert response.json()["detail"] == "Inactive user"
132+
133+
134+
def test_token_for_deleted_user_returns_not_found(
135+
client: TestClient, db: Session
136+
) -> None:
137+
email = random_email()
138+
password = random_lower_string()
139+
user_in = UserCreate(email=email, password=password)
140+
user = crud.create_user(session=db, user_create=user_in)
141+
headers = user_authentication_headers(client=client, email=email, password=password)
142+
db.delete(user)
143+
db.commit()
144+
145+
response = client.get(f"{settings.API_V1_STR}/users/me", headers=headers)
146+
assert response.status_code == 404
147+
assert response.json()["detail"] == "User not found"
148+
149+
150+
def test_non_admin_cannot_access_superuser_utils_endpoint(
151+
client: TestClient,
152+
member_token_headers: dict[str, str],
153+
caplog: pytest.LogCaptureFixture,
154+
) -> None:
155+
with caplog.at_level(logging.WARNING, logger="app.api.deps"):
156+
response = client.post(
157+
f"{settings.API_V1_STR}/utils/test-email/?email_to=member@example.com",
158+
headers=member_token_headers,
159+
)
160+
161+
assert response.status_code == 403
162+
assert response.json()["detail"] == "The user doesn't have enough privileges"
163+
assert "Access denied" in caplog.text
164+
assert "admin" in caplog.text.lower()
165+
166+
108167
def test_member_cannot_update_other_users(
109168
client: TestClient,
110169
member_token_headers: dict[str, str],

0 commit comments

Comments
 (0)