test / tests /test_main.py
ismailelghazi
Upload Docker app
21f81f9
import os
# Set env vars before importing app modules to ensure they use the test DB
os.environ["DATABASE_URL"] = "sqlite:///./test.db"
os.environ["POSTGRES_USER"] = "user"
os.environ["POSTGRES_PASSWORD"] = "password"
os.environ["POSTGRES_DB"] = "dbname"
os.environ["JWT_SECRET"] = "testsecret"
os.environ["HF_TOKEN"] = "testtoken"
from fastapi.testclient import TestClient
from sqlalchemy import create_engine, StaticPool
from sqlalchemy.orm import sessionmaker
from app.main import app
from app.database import Base, get_db
from app.utils import hf_client
from unittest.mock import MagicMock
# Use SQLite for testing
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
connect_args={"check_same_thread": False},
poolclass=StaticPool,
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Patch the app's engine to use our test engine
from app import database
database.engine = engine
Base.metadata.create_all(bind=engine)
def override_get_db():
try:
db = TestingSessionLocal()
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)
def test_register():
response = client.post(
"/register",
json={"username": "testuser", "password": "testpassword"},
)
assert response.status_code == 200
assert response.json()["username"] == "testuser"
def test_login():
client.post(
"/register",
json={"username": "testuser2", "password": "testpassword"},
)
response = client.post(
"/login",
json={"username": "testuser2", "password": "testpassword"},
)
assert response.status_code == 200
assert "access_token" in response.cookies
def test_login_wrong_password():
client.post(
"/register",
json={"username": "testuser3", "password": "testpassword"},
)
response = client.post(
"/login",
json={"username": "testuser3", "password": "wrongpassword"},
)
assert response.status_code == 404
def test_translate_no_cookie():
response = client.post(
"/translate",
json={"text": "Hello", "direction": "en-fr"},
)
assert response.status_code == 401
def test_translate_success(monkeypatch):
# Mock HF API
def mock_translate(*args, **kwargs):
return "Bonjour"
monkeypatch.setattr(hf_client, "translate_text", mock_translate)
# Login first
client.post(
"/register",
json={"username": "testuser4", "password": "testpassword"},
)
login_response = client.post(
"/login",
json={"username": "testuser4", "password": "testpassword"},
)
response = client.post(
"/translate",
json={"text": "Hello", "direction": "en-fr"},
cookies=login_response.cookies
)
assert response.status_code == 200
assert response.json()["translation"] == "Bonjour"