100 lines
2.2 KiB
Python
100 lines
2.2 KiB
Python
"""Pytest configuration and fixtures."""
|
|
import pytest
|
|
from app import create_app
|
|
from app.extensions import db as _db
|
|
from app.models import User, Organization, OrganizationMember
|
|
from app.services.auth_service import AuthService
|
|
from app.utils.constants import OrganizationRole
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def app():
|
|
"""Create application for testing."""
|
|
app = create_app("testing")
|
|
return app
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def db(app):
|
|
"""Create database for testing."""
|
|
with app.app_context():
|
|
_db.create_all()
|
|
yield _db
|
|
_db.session.remove()
|
|
_db.drop_all()
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def client(app, db):
|
|
"""Create test client."""
|
|
return app.test_client()
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_user(db):
|
|
"""Create a test user."""
|
|
email = "test@example.com"
|
|
password = "TestPassword123!"
|
|
full_name = "Test User"
|
|
|
|
user = AuthService.register_user(
|
|
email=email,
|
|
password=password,
|
|
full_name=full_name,
|
|
)
|
|
|
|
# Store password for testing
|
|
user._test_password = password
|
|
|
|
return user
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_organization(db, test_user):
|
|
"""Create a test organization."""
|
|
from app.services.organization_service import OrganizationService
|
|
|
|
org = OrganizationService.create_organization(
|
|
name="Test Organization",
|
|
slug="test-org",
|
|
owner_user_id=test_user.id,
|
|
description="A test organization",
|
|
)
|
|
|
|
return org
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def authenticated_client(client, test_user):
|
|
"""Create authenticated test client."""
|
|
# Login
|
|
response = client.post(
|
|
"/api/v1/auth/login",
|
|
json={
|
|
"email": test_user.email,
|
|
"password": test_user._test_password,
|
|
},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
return client
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def second_test_user(db):
|
|
"""Create a second test user."""
|
|
email = "second@example.com"
|
|
password = "TestPassword123!"
|
|
full_name = "Second User"
|
|
|
|
user = AuthService.register_user(
|
|
email=email,
|
|
password=password,
|
|
full_name=full_name,
|
|
)
|
|
|
|
user._test_password = password
|
|
|
|
return user
|