mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 09:11:08 -05:00
@@ -1,126 +0,0 @@
|
||||
#!/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))
|
||||
Reference in New Issue
Block a user