mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-22 20:11:08 -05:00
Add test utilities and state machine diagrams for FSM models
- Introduced reusable test utilities in `backend/tests/utils` for FSM transitions, HTMX interactions, and common scenarios. - Added factory functions for creating test submissions, parks, rides, and photo submissions. - Implemented assertion helpers for verifying state changes, toast notifications, and transition logs. - Created comprehensive state machine diagrams for all FSM-enabled models in `docs/STATE_DIAGRAMS.md`, detailing states, transitions, and guard conditions.
This commit is contained in:
@@ -9,6 +9,8 @@ urlpatterns = [
|
||||
path("create/", views.RideCreateView.as_view(), name="ride_create"),
|
||||
# Park-specific detail views
|
||||
path("<slug:ride_slug>/", views.RideDetailView.as_view(), name="ride_detail"),
|
||||
path("<slug:ride_slug>/status-actions/", views.ride_status_actions, name="ride_status_actions"),
|
||||
path("<slug:ride_slug>/header-badge/", views.ride_header_badge, name="ride_header_badge"),
|
||||
path(
|
||||
"<slug:ride_slug>/update/",
|
||||
views.RideUpdateView.as_view(),
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
from apps.core.views.views import FSMTransitionView
|
||||
|
||||
app_name = "rides"
|
||||
|
||||
@@ -83,4 +84,12 @@ urlpatterns = [
|
||||
views.RideUpdateView.as_view(),
|
||||
name="ride_update",
|
||||
),
|
||||
# FSM transition endpoint for rides
|
||||
# URL: /rides/<ride_slug>/transition/<transition_name>/
|
||||
path(
|
||||
"<slug:slug>/transition/<str:transition_name>/",
|
||||
FSMTransitionView.as_view(),
|
||||
{"app_label": "rides", "model_name": "ride"},
|
||||
name="ride_transition",
|
||||
),
|
||||
]
|
||||
|
||||
@@ -35,6 +35,33 @@ def show_coaster_fields(request: HttpRequest) -> HttpResponse:
|
||||
return render(request, "rides/partials/coaster_fields.html")
|
||||
|
||||
|
||||
def ride_status_actions(request: HttpRequest, park_slug: str, ride_slug: str) -> HttpResponse:
|
||||
"""Return FSM status actions for ride moderators"""
|
||||
park = get_object_or_404(Park, slug=park_slug)
|
||||
ride = get_object_or_404(Ride, park=park, slug=ride_slug)
|
||||
|
||||
# Only show to moderators
|
||||
if not request.user.has_perm('rides.change_ride'):
|
||||
return HttpResponse("")
|
||||
|
||||
return render(request, "rides/partials/ride_status_actions.html", {
|
||||
"ride": ride,
|
||||
"park": park,
|
||||
"user": request.user
|
||||
})
|
||||
|
||||
|
||||
def ride_header_badge(request: HttpRequest, park_slug: str, ride_slug: str) -> HttpResponse:
|
||||
"""Return the header status badge partial for a ride"""
|
||||
park = get_object_or_404(Park, slug=park_slug)
|
||||
ride = get_object_or_404(Ride, park=park, slug=ride_slug)
|
||||
return render(request, "rides/partials/ride_header_badge.html", {
|
||||
"ride": ride,
|
||||
"park": park,
|
||||
"user": request.user
|
||||
})
|
||||
|
||||
|
||||
class RideDetailView(HistoryMixin, DetailView):
|
||||
"""View for displaying ride details"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user