Refactored Database management to allow isolated integration tests
This commit is contained in:
0
tests/fixtures/__init__.py
vendored
Normal file
0
tests/fixtures/__init__.py
vendored
Normal file
0
tests/fixtures/app_factory.py
vendored
Normal file
0
tests/fixtures/app_factory.py
vendored
Normal file
56
tests/fixtures/test_database.py
vendored
Normal file
56
tests/fixtures/test_database.py
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
import tempfile
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class TestDatabaseManager:
|
||||
"""Manager for temporary test databases"""
|
||||
|
||||
@staticmethod
|
||||
def create_temp_db_path():
|
||||
"""Create a unique temporary path for test database"""
|
||||
temp_dir = tempfile.mkdtemp(prefix="test_mmt_")
|
||||
return os.path.join(temp_dir, "test_tools.db")
|
||||
|
||||
@staticmethod
|
||||
def setup_test_environment(db_path):
|
||||
"""Configure environment to use test database"""
|
||||
os.environ["DB_PATH"] = db_path
|
||||
os.environ["ADMIN_EMAIL"] = "test.admin@test.com"
|
||||
os.environ["ADMIN_PASSWORD"] = "TestAdmin123"
|
||||
os.environ["SECRET_KEY"] = "test-secret-key-for-e2e-tests"
|
||||
|
||||
@staticmethod
|
||||
def inject_test_database(db_path):
|
||||
"""Inject test database instance into the application"""
|
||||
# Import here to avoid circular imports
|
||||
from src.core.user_database import Database, set_user_db
|
||||
|
||||
# Create test database instance
|
||||
test_db = Database(db_path)
|
||||
|
||||
# Set it as the active instance
|
||||
set_user_db(test_db)
|
||||
|
||||
return test_db
|
||||
|
||||
@staticmethod
|
||||
def cleanup_test_db(db_path):
|
||||
"""Clean up temporary database"""
|
||||
if os.path.exists(db_path):
|
||||
# Clean up the complete temporary directory
|
||||
temp_dir = os.path.dirname(db_path)
|
||||
if os.path.exists(temp_dir):
|
||||
shutil.rmtree(temp_dir, ignore_errors=True)
|
||||
|
||||
@staticmethod
|
||||
def restore_original_environment(original_env):
|
||||
"""Restore original environment"""
|
||||
for key, value in original_env.items():
|
||||
if value is None:
|
||||
# Variable didn't exist before
|
||||
if key in os.environ:
|
||||
del os.environ[key]
|
||||
else:
|
||||
os.environ[key] = value
|
||||
61
tests/fixtures/test_users.py
vendored
Normal file
61
tests/fixtures/test_users.py
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
"""Test user definitions for E2E authentication testing"""
|
||||
|
||||
|
||||
class TestUsers:
|
||||
"""Class containing test user data"""
|
||||
|
||||
# Admin user (automatically created on startup)
|
||||
ADMIN = {
|
||||
"email": "test.admin@test.com",
|
||||
"password": "TestAdmin123"
|
||||
}
|
||||
|
||||
# Regular user to create for certain tests
|
||||
REGULAR_USER = {
|
||||
"username": "testuser",
|
||||
"email": "user@test.com",
|
||||
"password": "TestUser123"
|
||||
}
|
||||
|
||||
# Failed authentication test cases
|
||||
INVALID_CREDENTIALS = [
|
||||
{
|
||||
"name": "wrong_password",
|
||||
"email": "test.admin@test.com",
|
||||
"password": "wrongpass",
|
||||
"expected_error": "Invalid email or password"
|
||||
},
|
||||
{
|
||||
"name": "nonexistent_user",
|
||||
"email": "nonexistent@test.com",
|
||||
"password": "TestAdmin123",
|
||||
"expected_error": "Invalid email or password"
|
||||
},
|
||||
{
|
||||
"name": "invalid_email_format",
|
||||
"email": "invalid.email",
|
||||
"password": "TestAdmin123",
|
||||
"expected_error": "Invalid email or password"
|
||||
},
|
||||
{
|
||||
"name": "empty_email",
|
||||
"email": "",
|
||||
"password": "TestAdmin123",
|
||||
"expected_error": "Email and password are required"
|
||||
},
|
||||
{
|
||||
"name": "empty_password",
|
||||
"email": "test.admin@test.com",
|
||||
"password": "",
|
||||
"expected_error": "Email and password are required"
|
||||
}
|
||||
]
|
||||
|
||||
# Protected URLs to test for unauthorized access
|
||||
PROTECTED_URLS = [
|
||||
"/",
|
||||
"/admin",
|
||||
"/repositories",
|
||||
"/workflows",
|
||||
"/applications"
|
||||
]
|
||||
Reference in New Issue
Block a user