Add comprehensive tests for Parks API and models

- Implemented extensive test cases for the Parks API, covering endpoints for listing, retrieving, creating, updating, and deleting parks.
- Added tests for filtering, searching, and ordering parks in the API.
- Created tests for error handling in the API, including malformed JSON and unsupported methods.
- Developed model tests for Park, ParkArea, Company, and ParkReview models, ensuring validation and constraints are enforced.
- Introduced utility mixins for API and model testing to streamline assertions and enhance test readability.
- Included integration tests to validate complete workflows involving park creation, retrieval, updating, and deletion.
This commit is contained in:
pacnpal
2025-08-17 19:36:20 -04:00
parent 17228e9935
commit c26414ff74
210 changed files with 24155 additions and 833 deletions

View File

@@ -10,12 +10,43 @@ from . import views
from autocomplete import urls as autocomplete_urls
import os
# Import API documentation views
try:
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView
HAS_SPECTACULAR = True
except ImportError:
HAS_SPECTACULAR = False
# Import enhanced health check views
try:
from core.views.health_views import HealthCheckAPIView, PerformanceMetricsView, SimpleHealthView
HAS_HEALTH_VIEWS = True
except ImportError:
HAS_HEALTH_VIEWS = False
urlpatterns = [
path("admin/", admin.site.urls),
# Main app URLs
path("", HomeView.as_view(), name="home"),
# Autocomplete URLs (must be before other URLs)
path("ac/", autocomplete_urls),
# API Documentation URLs
path("api/schema/", SpectacularAPIView.as_view(), name="schema") if HAS_SPECTACULAR else path("", lambda r: None),
path("api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui") if HAS_SPECTACULAR else path("", lambda r: None),
path("api/redoc/", SpectacularRedocView.as_view(url_name="schema"), name="redoc") if HAS_SPECTACULAR else path("", lambda r: None),
# Health Check URLs
path("health/", include("health_check.urls")),
path("health/api/", HealthCheckAPIView.as_view(), name="health-api") if HAS_HEALTH_VIEWS else path("", lambda r: None),
path("health/simple/", SimpleHealthView.as_view(), name="health-simple") if HAS_HEALTH_VIEWS else path("", lambda r: None),
path("health/metrics/", PerformanceMetricsView.as_view(), name="health-metrics") if HAS_HEALTH_VIEWS else path("", lambda r: None),
# API URLs (before app URLs to avoid conflicts)
path("api/v1/", include("parks.api.urls", namespace="parks_api")),
path("api/v1/", include("rides.api.urls", namespace="rides_api")),
path("api/v1/map/", include("core.urls.map_urls", namespace="map_api")), # Map API URLs
# Parks and Rides URLs
path("parks/", include("parks.urls", namespace="parks")),
# Global rides URLs
@@ -24,7 +55,6 @@ urlpatterns = [
path("photos/", include("media.urls", namespace="photos")), # Add photos URLs
path("search/", include("core.urls.search", namespace="search")),
path("maps/", include("core.urls.maps", namespace="maps")), # Map HTML views
path("api/map/", include("core.urls.map_urls", namespace="map_api")), # Map API URLs
path(
"terms/", TemplateView.as_view(template_name="pages/terms.html"), name="terms"
),
@@ -66,6 +96,21 @@ if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# Development monitoring URLs
try:
import debug_toolbar
urlpatterns = [
path('__debug__/', include(debug_toolbar.urls)),
] + urlpatterns
except ImportError:
pass
try:
import silk
urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]
except ImportError:
pass
# Serve test coverage reports in development
coverage_dir = os.path.join(settings.BASE_DIR, 'tests', 'coverage_html')
if os.path.exists(coverage_dir):