|
|
import sys |
|
|
import os |
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '.'))) |
|
|
|
|
|
from utils.jwt_utils import create_access_token, verify_token, get_password_hash, verify_password, is_authenticated |
|
|
from datetime import timedelta |
|
|
import uuid |
|
|
from models.user import User |
|
|
from database.database import engine, SessionLocal |
|
|
from sqlalchemy.orm import Session |
|
|
|
|
|
def test_jwt_functions(): |
|
|
print("Testing JWT functions...") |
|
|
|
|
|
|
|
|
data = {"sub": "test_user_id", "name": "Test User"} |
|
|
token = create_access_token(data, expires_delta=timedelta(minutes=30)) |
|
|
print(f"Created token: {token[:50]}...") |
|
|
|
|
|
payload = verify_token(token) |
|
|
print(f"Verified payload: {payload}") |
|
|
|
|
|
assert payload is not None |
|
|
assert payload["sub"] == "test_user_id" |
|
|
print("[PASS] JWT token creation and verification works") |
|
|
|
|
|
|
|
|
plain_password = "test_password" |
|
|
hashed = get_password_hash(plain_password) |
|
|
print(f"Hashed password: {hashed[:50]}...") |
|
|
|
|
|
is_valid = verify_password(plain_password, hashed) |
|
|
print(f"Password verification: {is_valid}") |
|
|
|
|
|
assert is_valid |
|
|
print("[PASS] Password hashing and verification works") |
|
|
|
|
|
print("\nAll JWT functions tests passed!") |
|
|
|
|
|
|
|
|
def test_database_and_authentication(): |
|
|
print("\nTesting database and authentication integration...") |
|
|
|
|
|
|
|
|
db = SessionLocal() |
|
|
try: |
|
|
|
|
|
user_id = str(uuid.uuid4()) |
|
|
test_user = User( |
|
|
id=user_id, |
|
|
first_name="Test", |
|
|
last_name="User", |
|
|
email=f"test{user_id}@example.com", |
|
|
role="applicant" |
|
|
) |
|
|
test_user.set_password("test_password") |
|
|
|
|
|
db.add(test_user) |
|
|
db.commit() |
|
|
db.refresh(test_user) |
|
|
|
|
|
print(f"Created test user with ID: {test_user.id}") |
|
|
|
|
|
|
|
|
token = create_access_token(data={"sub": test_user.id}) |
|
|
print(f"Created token for user: {token[:50]}...") |
|
|
|
|
|
|
|
|
authenticated_user = is_authenticated(token) |
|
|
print(f"Authenticated user: {authenticated_user.email if authenticated_user else None}") |
|
|
|
|
|
assert authenticated_user is not None |
|
|
assert authenticated_user.id == test_user.id |
|
|
|
|
|
print("[PASS] Database and authentication integration works") |
|
|
|
|
|
|
|
|
db.delete(test_user) |
|
|
db.commit() |
|
|
|
|
|
finally: |
|
|
db.close() |
|
|
|
|
|
print("\nDatabase integration test passed!") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
test_jwt_functions() |
|
|
test_database_and_authentication() |
|
|
print("\n[SUCCESS] All authentication system tests passed!") |