FastAPI-Project / tests /conftest.py
abdullah090809's picture
Updated yml file
92de720
Raw
History Blame Contribute Delete
2.73 kB
from fastapi.testclient import TestClient
import pytest
from app.database import get_db, Base
from app.main import app
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.config import setting
from app.oauth2 import Create_Access_Token
from app.models import Post
SQLALCHEMY_DATABASE_URL = f"postgresql://{setting.database_username}:{setting.database_password}@{setting.database_hostname}:{setting.database_port}/{setting.database_name}_test"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
TestingSessionMaker = sessionmaker(autoflush=False, autocommit=False, bind=engine)
@pytest.fixture()
def session():
Base.metadata.drop_all(bind=engine)
Base.metadata.create_all(bind=engine)
db = TestingSessionMaker()
try:
yield db
finally:
db.close()
@pytest.fixture()
def client(session):
def override_get_db():
try:
yield session
finally:
session.close()
app.dependency_overrides[get_db] = override_get_db
yield TestClient(app)
@pytest.fixture
def create_test_user(client):
user_data={
"email": "abdullah@gmail.com",
"password": "abdullah1234"
}
response = client.post("/users/",json=user_data)
assert response.status_code == 201
new_user=response.json()
new_user["password"]="abdullah1234"
return new_user
@pytest.fixture
def create_test_user2(client):
user_data = {
"email": "ali@gmail.com",
"password": "ali1234"
}
response = client.post("/users/", json=user_data)
assert response.status_code == 201
new_user = response.json()
new_user["password"] = "ali1234"
return new_user
@pytest.fixture
def token(create_test_user):
return Create_Access_Token({"id": create_test_user["id"]})
@pytest.fixture
def authorize_client(client,token):
client.headers = {
**client.headers,
"Authorization": f"Bearer {token}"
}
return client
@pytest.fixture
def test_posts(create_test_user,create_test_user2,session):
posts_data = [
{"title": "first title", "content": "first content", "owner_id": create_test_user['id']},
{"title": "2nd title", "content": "2nd content", "owner_id": create_test_user['id']},
{"title": "3rd title", "content": "3rd content", "owner_id": create_test_user['id']},
{"title": "3rd title", "content": "3rd content", "owner_id": create_test_user2['id']}
]
def create_post(post):
return Post(**post)
post=map(create_post,posts_data)
post=list(post)
session.add_all(post)
session.commit()
posts=session.query(Post).all()
return posts