157 lines
4.0 KiB
Python
157 lines
4.0 KiB
Python
import pytest
|
|
from sqlalchemy import create_engine, event
|
|
from sqlalchemy.orm import sessionmaker
|
|
from fastapi.testclient import TestClient
|
|
import typing as t
|
|
|
|
from app.core import config, security
|
|
from app.db.session import Base, get_db
|
|
from app.db import models,schemas
|
|
from app.main import app
|
|
|
|
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://kabAdmin:P%40ssw0rd!@kintonetooldb.postgres.database.azure.com/test"
|
|
|
|
engine = create_engine(SQLALCHEMY_DATABASE_URI,echo=True)
|
|
|
|
test_session_maker = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_db():
|
|
connection = engine.connect()
|
|
transaction = connection.begin()
|
|
test_session = test_session_maker(bind=connection)
|
|
yield test_session
|
|
test_session.close()
|
|
transaction.rollback()
|
|
connection.close()
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_client(test_db):
|
|
def get_test_db():
|
|
try:
|
|
yield test_db
|
|
finally:
|
|
test_db.close()
|
|
|
|
app.dependency_overrides[get_db] = get_test_db
|
|
with TestClient(app) as test_client:
|
|
yield test_client
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_user(test_db):
|
|
password ="test"
|
|
user = models.User(
|
|
email = "test@test.com",
|
|
first_name = "test",
|
|
last_name = "abc",
|
|
hashed_password = security.get_password_hash(password),
|
|
is_active = True,
|
|
is_superuser = False
|
|
)
|
|
test_db.add(user)
|
|
test_db.commit()
|
|
test_db.refresh(user)
|
|
dicUser = user.__dict__
|
|
dicUser["password"] = password
|
|
return dicUser
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_admin(test_db):
|
|
password ="admin"
|
|
user = models.User(
|
|
email = "admin@test.com",
|
|
first_name = "admin",
|
|
last_name = "abc",
|
|
hashed_password = security.get_password_hash(password),
|
|
is_active = True,
|
|
is_superuser = True
|
|
)
|
|
test_db.add(user)
|
|
test_db.commit()
|
|
test_db.refresh(user)
|
|
dicUser = user.__dict__
|
|
dicUser["password"] = password
|
|
return dicUser
|
|
|
|
# @pytest.fixture
|
|
# def test_password() -> str:
|
|
# return "securepassword"
|
|
|
|
|
|
# def get_password_hash() -> str:
|
|
# """
|
|
# Password hashing can be expensive so a mock will be much faster
|
|
# """
|
|
# return "supersecrethash"
|
|
|
|
|
|
# @pytest.fixture
|
|
# def test_user(test_db) -> models.User:
|
|
# """
|
|
# Make a test user in the database
|
|
# """
|
|
|
|
# user = models.User(
|
|
# email="fake@email.com",
|
|
# hashed_password=get_password_hash(),
|
|
# is_active=True,
|
|
# )
|
|
# test_db.add(user)
|
|
# test_db.commit()
|
|
# return user
|
|
|
|
|
|
# @pytest.fixture
|
|
# def test_superuser(test_db) -> models.User:
|
|
# """
|
|
# Superuser for testing
|
|
# """
|
|
|
|
# user = models.User(
|
|
# email="fakeadmin@email.com",
|
|
# hashed_password=get_password_hash(),
|
|
# is_superuser=True,
|
|
# )
|
|
# test_db.add(user)
|
|
# test_db.commit()
|
|
# return user
|
|
|
|
|
|
# def verify_password_mock(first: str, second: str) -> bool:
|
|
# return True
|
|
|
|
|
|
# @pytest.fixture
|
|
# def user_token_headers(
|
|
# client: TestClient, test_user, test_password, monkeypatch
|
|
# ) -> t.Dict[str, str]:
|
|
# monkeypatch.setattr(security, "verify_password", verify_password_mock)
|
|
|
|
# login_data = {
|
|
# "username": test_user.email,
|
|
# "password": test_password,
|
|
# }
|
|
# r = client.post("/api/token", data=login_data)
|
|
# tokens = r.json()
|
|
# a_token = tokens["access_token"]
|
|
# headers = {"Authorization": f"Bearer {a_token}"}
|
|
# return headers
|
|
|
|
|
|
# @pytest.fixture
|
|
# def superuser_token_headers(
|
|
# client: TestClient, test_superuser, test_password, monkeypatch
|
|
# ) -> t.Dict[str, str]:
|
|
# monkeypatch.setattr(security, "verify_password", verify_password_mock)
|
|
|
|
# login_data = {
|
|
# "username": test_superuser.email,
|
|
# "password": test_password,
|
|
# }
|
|
# r = client.post("/api/token", data=login_data)
|
|
# tokens = r.json()
|
|
# a_token = tokens["access_token"]
|
|
# headers = {"Authorization": f"Bearer {a_token}"}
|
|
# return headers
|