Initial commit - Mold Cost Calculator Application (Security Fixed)

This commit is contained in:
Gan, Jimmy
2025-06-24 10:28:55 +08:00
commit 9b84cee5be
108 changed files with 15886 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
import pytest
import os
from app import create_app, db
def test_production_config():
"""Test production configuration settings."""
app = create_app('production')
# Test essential production settings
assert not app.config['DEBUG']
assert app.config['TESTING'] is False
assert 'SECRET_KEY' in app.config
assert app.config['SQLALCHEMY_DATABASE_URI'] is not None
assert app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] is False
def test_database_connection(app):
"""Test database connection in production environment."""
with app.app_context():
try:
# Test database connection
db.engine.connect()
assert True
except Exception as e:
pytest.fail(f"Database connection failed: {str(e)}")
def test_environment_variables():
"""Test required environment variables are set."""
required_vars = [
'FLASK_APP',
'FLASK_ENV',
'SECRET_KEY',
'DATABASE_URL'
]
for var in required_vars:
assert os.getenv(var) is not None, f"Required environment variable {var} is not set"
def test_gunicorn_config():
"""Test Gunicorn configuration settings."""
import gunicorn_config
assert hasattr(gunicorn_config, 'bind')
assert hasattr(gunicorn_config, 'workers')
assert hasattr(gunicorn_config, 'timeout')
assert gunicorn_config.forwarded_allow_ips != '*'
def test_container_health_check(client):
"""Test container health check endpoint."""
response = client.get('/health')
assert response.status_code == 200
assert response.json['status'] == 'healthy'
def test_error_handling(client):
"""Test error handling for common deployment issues."""
# Test database connection error
with pytest.raises(Exception):
client.get('/calculator')
# Test rate limiting
for _ in range(100):
client.get('/')
response = client.get('/')
assert response.status_code == 429 # Too Many Requests