Coverage for backend/tests/routers/test_login.py: 100%
18 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-22 15:38 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-22 15:38 +0000
1import pytest
2from jose import jwt
4from app import schemas
5from app.config import settings
8class TestLogin:
10 def test_login_user(self, test_users, client) -> None:
11 """Test successful login for an existing user."""
13 user_data = {
14 "username": test_users[0].email,
15 "password": test_users[0].password,
16 }
17 response = client.post("/login", data=user_data)
18 login_response = schemas.Token(**response.json())
19 payload = jwt.decode(
20 login_response.access_token,
21 settings.secret_key,
22 algorithms=[settings.algorithm],
23 )
24 user_id = payload.get("user_id")
25 assert user_id == test_users[0].id
26 assert login_response.token_type == "bearer"
27 assert response.status_code == 200
29 @pytest.mark.parametrize(
30 "email, password, status_code",
31 [
32 ("wrongemail@gmail.com", "pass123", 403),
33 ("user1@email.com", "wrongpassword", 403),
34 ("wrongemail@gmail.com", "wrongpassword", 403),
35 (None, "pass123", 403),
36 ("user1@email.com", None, 403),
37 ],
38 )
39 def test_incorrect_login(self, email, password, status_code, client) -> None:
40 """Test login failure scenarios with incorrect or incomplete credentials."""
42 response = client.post("/login/", data={"username": email, "password": password})
43 assert response.status_code == status_code