Files
thrillwiki_django_no_react/backend/tests/test_runner.py
pacnpal d504d41de2 feat: complete monorepo structure with frontend and shared resources
- Add complete backend/ directory with full Django application
- Add frontend/ directory with Vite + TypeScript setup ready for Next.js
- Add comprehensive shared/ directory with:
  - Complete documentation and memory-bank archives
  - Media files and avatars (letters, park/ride images)
  - Deployment scripts and automation tools
  - Shared types and utilities
- Add architecture/ directory with migration guides
- Configure pnpm workspace for monorepo development
- Update .gitignore to exclude .django_tailwind_cli/ build artifacts
- Preserve all historical documentation in shared/docs/memory-bank/
- Set up proper structure for full-stack development with shared resources
2025-08-23 18:40:07 -04:00

127 lines
3.4 KiB
Python

#!/usr/bin/env python
import os
import sys
import django
from django.conf import settings
from django.test.runner import DiscoverRunner
import coverage # type: ignore
def setup_django():
"""Set up Django test environment"""
# Add the project root directory to Python path
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.test")
django.setup()
# Use PostGIS for GeoDjango support
settings.DATABASES = {
"default": {
"ENGINE": "django.contrib.gis.db.backends.postgis",
"NAME": "test_thrillwiki",
"USER": "postgres",
"PASSWORD": "postgres",
"HOST": "localhost",
"PORT": "5432",
"TEST": {
"NAME": "test_thrillwiki",
},
}
}
settings.DEBUG = False
# Skip problematic migrations during tests
settings.MIGRATION_MODULES = {
"parks": None,
"operators": None,
"property_owners": None,
"location": None,
"rides": None,
"reviews": None,
}
class CustomTestRunner(DiscoverRunner):
def __init__(self, *args, **kwargs):
self.cov = coverage.Coverage(
source=[
"parks",
"operators",
"property_owners",
"location",
"rides",
"reviews",
],
omit=[
"*/migrations/*",
"*/management/*",
"*/admin.py",
"*/apps.py",
"manage.py",
],
)
self.cov.start()
super().__init__(*args, **kwargs)
def setup_databases(self, **kwargs):
"""Set up databases and ensure content types are created"""
old_config = super().setup_databases(**kwargs)
# Create necessary content types
from django.contrib.contenttypes.models import ContentType
ContentType.objects.get_or_create(app_label="parks", model="park")
return old_config
def run_suite(self, suite, **kwargs):
results = super().run_suite(suite, **kwargs)
self.cov.stop()
self.cov.save()
# Print coverage report
print("\nCoverage Report:")
self.cov.report()
# Generate HTML coverage report
html_dir = os.path.join("tests", "coverage_html")
self.cov.html_report(directory=html_dir)
print(f"\nDetailed HTML coverage report generated in: {html_dir}")
return results
def run_tests():
# Set up Django
setup_django()
# Initialize test runner
test_runner = CustomTestRunner(verbosity=2, interactive=True, keepdb=True)
# Define test labels for discovery
test_labels = [
"parks.tests",
"operators.tests",
"property_owners.tests",
"location.tests",
"rides.tests",
"reviews.tests",
]
# Run tests and collect results
failures = test_runner.run_tests(test_labels)
return failures
if __name__ == "__main__":
# Create tests directory if it doesn't exist
os.makedirs("tests", exist_ok=True)
os.makedirs(os.path.join("tests", "coverage_html"), exist_ok=True)
# Run tests and exit with appropriate status code
failures = run_tests()
sys.exit(bool(failures))