Advertisement
SportyScripter

DLD_Test_without_Mock

Mar 27th, 2024
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.75 KB | Source Code | 0 0
  1. import pytest
  2. from auth.utils import verify_password, get_hashed_password, create_access_token, get_user, get_current_user, password_context
  3. from auth.models import User
  4. from fastapi import HTTPException
  5. from jose import jwt, JWTError
  6. import asyncio
  7.  
  8. # Klasa pomocnicza do symulacji sesji DB
  9. class FakeDBSession:
  10.     def __init__(self, user=None):
  11.         self.user = user
  12.  
  13.     def query(self, model):
  14.         return self
  15.  
  16.     def filter(self, *args, **kwargs):
  17.         return self
  18.  
  19.     def first(self):
  20.         return self.user
  21.    
  22. class FakeCredentials:
  23.     def __init__(self, credentials):
  24.         self.credentials = credentials
  25.  
  26. # Funkcja do symulowania jwt.decode bez użycia MagicMock
  27. def fake_jwt_decode(token, key, algorithms):
  28.     if token == "valid_token":
  29.         return {"sub": "123"}
  30.     else:
  31.         raise JWTError("Token is invalid")
  32.  
  33. @pytest.fixture
  34. def test_user():
  35.     user_data = {
  36.         "id": "123",
  37.         "username": "testuser",
  38.         "email": "[email protected]",
  39.         "hashed_password": get_hashed_password("test123"),
  40.         "is_active": True,
  41.         "role": "user"
  42.     }
  43.     return User(**user_data)
  44.  
  45. def test_get_hashed_password():
  46.     test_password = "superSecret123"
  47.     hashed_password = get_hashed_password(test_password)
  48.     assert password_context.verify(test_password, hashed_password), "The hashed password does not match the original password."
  49.  
  50. def test_get_user_found(test_user):
  51.     user_id = "123"
  52.     fake_db = FakeDBSession(user=test_user)
  53.     user = get_user(user_id, fake_db)
  54.     assert user.id == user_id
  55.  
  56. def test_get_user_not_found():
  57.     fake_db = FakeDBSession()
  58.     with pytest.raises(HTTPException) as exc_info:
  59.         get_user("not_existing_id", fake_db)
  60.     assert exc_info.value.status_code == 404
  61.  
  62. @pytest.mark.asyncio
  63. async def test_get_current_user_success(test_user, monkeypatch):
  64.     def fake_jwt_decode(token, key, algorithms):
  65.         return {"sub": test_user.id}
  66.  
  67.     monkeypatch.setattr("jose.jwt.decode", fake_jwt_decode)
  68.     fake_db = FakeDBSession(user=test_user)
  69.     mock_credentials = FakeCredentials(credentials="valid_token")
  70.  
  71.     result_user = await get_current_user(credentials=mock_credentials, db=fake_db)
  72.     assert result_user == test_user
  73.  
  74. @pytest.mark.asyncio
  75. async def test_get_current_user_invalid_token(monkeypatch):
  76.     def fake_jwt_decode(token, key, algorithms):
  77.         raise JWTError("Token is invalid")
  78.  
  79.     monkeypatch.setattr("jose.jwt.decode", fake_jwt_decode)
  80.     fake_db = FakeDBSession()
  81.     mock_credentials = FakeCredentials(credentials="invalid_token")
  82.  
  83.     with pytest.raises(HTTPException) as exc_info:
  84.         await get_current_user(credentials=mock_credentials, db=fake_db)
  85.  
  86.     assert exc_info.value.status_code == 401
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement