Spaces:
Runtime error
Runtime error
| 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" | |