Files
prop-data-guard/backend/tests/test_auth.py
T
2026-04-22 17:24:05 +08:00

72 lines
2.0 KiB
Python

import pytest
from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import sys
sys.path.insert(0, '/Users/nathan/Work/DataPointer/prop-data-guard/backend')
from app.main import app
from app.core.database import Base, get_db
from app.services.user_service import create_initial_data
from app.services.classification_service import init_builtin_data
# Use SQLite for testing
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def override_get_db():
db = TestingSessionLocal()
try:
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)
@pytest.fixture(scope="module", autouse=True)
def setup_db():
Base.metadata.create_all(bind=engine)
db = TestingSessionLocal()
create_initial_data(db)
init_builtin_data(db)
db.close()
yield
Base.metadata.drop_all(bind=engine)
def test_health_check():
response = client.get("/health")
assert response.status_code == 200
assert response.json()["status"] == "ok"
def test_login():
response = client.post("/api/v1/auth/login", json={"username": "admin", "password": "admin123"})
assert response.status_code == 200
data = response.json()
assert data["code"] == 200
assert "access_token" in data["data"]
return data["data"]["access_token"]
def test_get_me():
token = test_login()
response = client.get("/api/v1/users/me", headers={"Authorization": f"Bearer {token}"})
assert response.status_code == 200
data = response.json()
assert data["data"]["username"] == "admin"
def test_list_levels():
token = test_login()
response = client.get("/api/v1/classifications/levels", headers={"Authorization": f"Bearer {token}"})
assert response.status_code == 200
data = response.json()
assert len(data["data"]) == 5