Files
Gan, Jimmy 6c0d5a4e63 Initial commit: Clean Mold Cost Calculator application
- Flask-based mold cost calculation application
- PostgreSQL database with SQLAlchemy ORM
- Docker/Podman containerization
- Comprehensive documentation in docs/
- Clean, organized codebase without obsolete files
- Production-ready deployment configuration
- Enhanced pytest configuration with coverage reporting
- Master/Development branch structure
2025-06-24 02:30:09 +08:00

82 lines
2.0 KiB
Python

import pytest
from app import create_app, db
from app.models import User
from app.config import TestingConfig
@pytest.fixture(scope='session')
def app():
"""Create and configure a Flask app for testing."""
app = create_app(TestingConfig)
# Create the database and load test data
with app.app_context():
db.create_all()
yield app
db.session.remove()
db.drop_all()
@pytest.fixture(scope='session')
def client(app):
"""A test client for the app."""
return app.test_client()
@pytest.fixture(scope='session')
def runner(app):
"""A test CLI runner for the app."""
return app.test_cli_runner()
@pytest.fixture(scope='function')
def test_db(app):
"""Create a fresh database for each test."""
with app.app_context():
db.create_all()
yield db
db.session.remove()
db.drop_all()
@pytest.fixture
def test_user(app):
"""Create a test user."""
with app.app_context():
user = User.create(
username='testuser',
email='test@example.com',
company='Test Company',
password='Test123!'
)
db.session.commit()
return user
@pytest.fixture
def test_admin(app):
"""Create a test admin user."""
with app.app_context():
admin = User.create(
username='admin',
email='admin@example.com',
company='Admin Company',
password='Admin123!'
)
admin.is_admin = True
db.session.commit()
return admin
@pytest.fixture
def auth_client(client, test_user):
"""A test client that is authenticated."""
client.post('/login', data={
'email': 'test@example.com',
'password': 'Test123!',
'remember_me': False
})
return client
@pytest.fixture
def admin_client(client, test_admin):
"""A test client that is authenticated as admin."""
client.post('/login', data={
'email': 'admin@example.com',
'password': 'Admin123!',
'remember_me': False
})
return client