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

1import pytest 

2from jose import jwt 

3 

4from app import schemas 

5from app.config import settings 

6 

7 

8class TestLogin: 

9 

10 def test_login_user(self, test_users, client) -> None: 

11 """Test successful login for an existing user.""" 

12 

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 

28 

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.""" 

41 

42 response = client.post("/login/", data={"username": email, "password": password}) 

43 assert response.status_code == status_code