From 1ca90892b3216c142658f9237636ed70d9491dbb Mon Sep 17 00:00:00 2001 From: Lukas Bockstaller Date: Mon, 13 Apr 2026 13:37:38 +0200 Subject: [PATCH] add failing tests --- src/tests/api/test_giftcards.py | 28 +++++++++++ src/tests/api/test_reusable_media.py | 73 ++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/src/tests/api/test_giftcards.py b/src/tests/api/test_giftcards.py index 4fdb89cfe..9755c0652 100644 --- a/src/tests/api/test_giftcards.py +++ b/src/tests/api/test_giftcards.py @@ -170,6 +170,34 @@ def test_giftcard_detail_expand(token_client, organizer, event, giftcard): "blocked": None } +@pytest.mark.django_db +def test_giftcard_detail_expand_without_permissions(team, token_client, organizer, event, giftcard): + with scopes_disabled(): + o = Order.objects.create( + code='FOO', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), + sales_channel=event.organizer.sales_channels.get(identifier="web"), + total=14, locale='en' + ) + ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, + personalized=True) + op = o.positions.create(item=ticket, price=Decimal("14")) + giftcard.owner_ticket = op + giftcard.save() + + team.all_event_permissions = False + team.save() + + res = dict(TEST_GC_RES) + res["id"] = giftcard.pk + res["issuance"] = giftcard.issuance.isoformat().replace('+00:00', 'Z') + resp = token_client.get('/api/v1/organizers/{}/giftcards/{}/?expand=owner_ticket'.format(organizer.slug, giftcard.pk)) + assert resp.status_code == 200 + + assert resp.data["owner_ticket"] == { + "id": op.pk, + } + TEST_GIFTCARD_CREATE_PAYLOAD = { "secret": "DEFABC", diff --git a/src/tests/api/test_reusable_media.py b/src/tests/api/test_reusable_media.py index 30614e67b..5b49d6195 100644 --- a/src/tests/api/test_reusable_media.py +++ b/src/tests/api/test_reusable_media.py @@ -23,6 +23,7 @@ from datetime import datetime, timedelta, timezone from decimal import Decimal import pytest +from django.contrib.messages.storage.fallback import FallbackStorage from django.utils.timezone import now from django_scopes import scopes_disabled @@ -251,6 +252,78 @@ def test_medium_detail(token_client, organizer, event, medium, giftcard, custome "issuer": "dummy", } +@pytest.mark.django_db +def test_medium_detail_event_permission_missing(token_client, organizer, event, medium, giftcard, customer, team): + team.all_organizer_permissions = False + team.limit_organizer_permissions = { + "organizer.reusablemedia:read": True, + "organizer.customers:read": True, + "organizer.giftcards:read": True, + } + team.all_event_permissions = False + team.save() + + with scopes_disabled(): + o = Order.objects.create( + code='FOO', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), + sales_channel=event.organizer.sales_channels.get(identifier="web"), + total=14, locale='en' + ) + ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, + personalized=True) + op = o.positions.create(item=ticket, price=Decimal("14")) + medium.linked_orderposition = op + medium.linked_giftcard = giftcard + medium.customer = customer + medium.save() + giftcard.owner_ticket = op + giftcard.save() + + resp = token_client.get( + '/api/v1/organizers/{}/reusablemedia/{}/?expand=linked_giftcard&expand=' + 'linked_giftcard.owner_ticket&expand=linked_orderposition&expand=customer'.format( + organizer.slug, medium.pk + ) + ) + assert resp.status_code == 200 + + assert resp.data["linked_orderposition"] == { + "id": op.pk, + } + + assert resp.data["linked_giftcard"] == { + "id": giftcard.pk, + "secret": "ABCDEF", + "issuance": giftcard.issuance.isoformat().replace("+00:00", "Z"), + "value": "23.00", + "currency": "EUR", + "testmode": False, + "expires": None, + "conditions": None, + "owner_ticket": {"id": op.pk }, + "issuer": "dummy", + } + + assert resp.data["customer"] == { + "identifier": customer.identifier, + "external_identifier": None, + "email": "foo@example.org", + "phone": None, + "name": "Foo", + "name_parts": {"_legacy": "Foo"}, + "is_active": True, + "is_verified": False, + "last_login": None, + "date_joined": customer.date_joined.isoformat().replace("+00:00", "Z"), + "locale": "en", + "last_modified": customer.last_modified.isoformat().replace("+00:00", "Z"), + "notes": None + } + + + + TEST_MEDIUM_CREATE_PAYLOAD = { "type": "barcode",