from types import SimpleNamespace import pytest from django.contrib import admin from apps.events.admin import EventAdmin from apps.events.models import Event pytestmark = pytest.mark.unit def test_event_admin_formats_empty_price_and_capacity(): model_admin = EventAdmin(Event, admin.site) event = SimpleNamespace(price=None, capacity=None, current_attendees_count=3, is_registration_open=True) assert model_admin.price_display(event) == "رایگان" assert model_admin.capacity_display(event) == "نامحدود" assert model_admin.attendees_display(event) == 3 assert model_admin.is_registration_open_display(event) def test_event_admin_publication_and_cancellation_actions_update_selection(mocker): model_admin = EventAdmin(Event, admin.site) mocker.patch.object(model_admin, "message_user") cancel_checkouts = mocker.patch("apps.events.admin.cancel_event_checkouts") queryset = mocker.Mock() queryset.count.return_value = 2 for action, field_value in ( (model_admin.make_published, {"is_published": True}), (model_admin.make_draft, {"is_published": False}), ): action(SimpleNamespace(), queryset) queryset.update.assert_called_with(**field_value) published = SimpleNamespace(is_cancelled=False, pk=10, save=mocker.Mock()) already_cancelled = SimpleNamespace(is_cancelled=True, pk=11, save=mocker.Mock()) model_admin.make_cancelled(SimpleNamespace(), [published, already_cancelled]) published.save.assert_called_once_with(update_fields=["is_cancelled", "updated_at"]) already_cancelled.save.assert_not_called() cancel_checkouts.assert_called_once_with(published.pk)