| import pytest |
| from jose import JWTError, jwt |
| from backend.src.auth.security import verify_token, create_access_token |
| from backend.src.core.config import settings |
| from datetime import datetime, timedelta |
|
|
|
|
| def test_jwt_token_validation_with_valid_token(): |
| """Test that a valid JWT token can be successfully validated""" |
| |
| data = {"user_id": "test_user_123", "role": "user"} |
| token = create_access_token(data=data) |
|
|
| |
| payload = verify_token(token) |
|
|
| |
| assert payload is not None |
| assert payload["user_id"] == "test_user_123" |
| assert payload["role"] == "user" |
| assert "exp" in payload |
|
|
|
|
| def test_jwt_token_validation_with_invalid_token(): |
| """Test that an invalid JWT token returns None""" |
| |
| invalid_token = "invalid.token.string" |
|
|
| |
| payload = verify_token(invalid_token) |
|
|
| |
| assert payload is None |
|
|
|
|
| def test_jwt_token_validation_with_expired_token(): |
| """Test that an expired JWT token returns None""" |
| |
| data = {"user_id": "test_user_123", "role": "user"} |
| expired_token = create_access_token(data=data, expires_delta=timedelta(seconds=-1)) |
|
|
| |
| payload = verify_token(expired_token) |
|
|
| |
| assert payload is None |
|
|
|
|
| def test_jwt_token_contains_correct_claims(): |
| """Test that JWT tokens contain the expected claims""" |
| |
| user_data = {"user_id": "test_user_456", "role": "admin", "email": "test@example.com"} |
| token = create_access_token(data=user_data) |
|
|
| |
| decoded_payload = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.JWT_ALGORITHM]) |
|
|
| |
| assert decoded_payload["user_id"] == "test_user_456" |
| assert decoded_payload["role"] == "admin" |
| assert decoded_payload["email"] == "test@example.com" |
| assert "exp" in decoded_payload |
|
|
|
|
| def test_jwt_algorithm_compliance(): |
| """Test that JWT tokens are created and validated with the correct algorithm""" |
| |
| data = {"user_id": "test_user_789"} |
| token = create_access_token(data=data) |
|
|
| |
| payload = verify_token(token) |
|
|
| |
| assert payload is not None |
| assert payload["user_id"] == "test_user_789" |
|
|
|
|
| if __name__ == "__main__": |
| pytest.main([__file__]) |