From 0fe57dc47fe072cad1e43b70552349a0e41d2a60 Mon Sep 17 00:00:00 2001 From: bisco Date: Wed, 29 Apr 2026 18:56:19 +0200 Subject: [PATCH] fix(admin): handle unsaved performance seats display --- backend/shows/admin.py | 7 +++++++ backend/shows/test_admin.py | 21 ++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/shows/admin.py b/backend/shows/admin.py index 6b08a75..1293d64 100644 --- a/backend/shows/admin.py +++ b/backend/shows/admin.py @@ -41,4 +41,11 @@ class PerformanceAdmin(admin.ModelAdmin): @admin.display(description="Available seats") def available_seats_display(self, obj): + if ( + not getattr(obj, "pk", None) + or obj.room_capacity is None + or obj.additional_seats is None + or obj.manually_occupied_seats is None + ): + return "-" return obj.available_seats() diff --git a/backend/shows/test_admin.py b/backend/shows/test_admin.py index 38c2492..754a736 100644 --- a/backend/shows/test_admin.py +++ b/backend/shows/test_admin.py @@ -1,5 +1,7 @@ from django.contrib import admin -from django.test import SimpleTestCase +from django.contrib.auth import get_user_model +from django.test import SimpleTestCase, TestCase +from django.urls import reverse from bookings.models import Reservation, ReservationToken from checkins.models import CheckIn @@ -11,3 +13,20 @@ class AdminRegistrationTests(SimpleTestCase): for model in (Show, Venue, Performance, Reservation, ReservationToken, CheckIn): with self.subTest(model=model.__name__): self.assertTrue(admin.site.is_registered(model)) + + +class PerformanceAdminTests(TestCase): + def setUp(self): + user_model = get_user_model() + self.admin_user = user_model.objects.create_superuser( + username="admin", + email="admin@example.com", + password="password123", + ) + self.client.force_login(self.admin_user) + + def test_performance_add_page_renders_for_unsaved_object(self): + response = self.client.get(reverse("admin:shows_performance_add")) + + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Available seats")