mirror of
https://github.com/pretix/pretix.git
synced 2026-10-02 19:24:42 +00:00
Add tests
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
import logging
|
||||
from collections import OrderedDict, namedtuple
|
||||
from itertools import groupby
|
||||
from typing import Union
|
||||
from typing import Optional, Union
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.utils.formats import date_format
|
||||
@@ -69,8 +69,10 @@ class Notification:
|
||||
each consisting of a button label and an absolute URL to point to.
|
||||
"""
|
||||
|
||||
def __init__(self, event: Event, title: str, detail: str=None, url: str=None, organizer: Organizer=None):
|
||||
assert event or organizer
|
||||
def __init__(self, event: Optional[Event], title: str, detail: Optional[str]=None, url: Optional[str]=None, organizer: Optional[Organizer]=None):
|
||||
assert event or organizer, "You need to pass either event or organizer"
|
||||
if event and organizer:
|
||||
assert event.organizer_id == organizer.id, "Organizer and event mismatch"
|
||||
self.title = title
|
||||
self.organizer = organizer or event.organizer
|
||||
self.event = event
|
||||
|
||||
@@ -64,7 +64,7 @@ def order(event):
|
||||
|
||||
@pytest.fixture
|
||||
def team(event):
|
||||
return event.organizer.teams.create(all_events=True, all_event_permissions=True)
|
||||
return event.organizer.teams.create(all_events=True, all_event_permissions=True, all_organizer_permissions=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -108,6 +108,17 @@ def test_notification_trigger_global_wildcard(event, order, user, django_capture
|
||||
assert len(djmail.outbox) == 1
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_notification_trigger_organizer(event, user, django_capture_on_commit_callbacks):
|
||||
djmail.outbox = []
|
||||
user.notification_settings.create(
|
||||
method='mail', event=None, action_type='pretix.organizer.changed', enabled=True
|
||||
)
|
||||
with django_capture_on_commit_callbacks(execute=True):
|
||||
event.organizer.log_action('pretix.organizer.changed', {})
|
||||
assert len(djmail.outbox) == 1
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_notification_enabled_global_ignored_specific(event, order, user, django_capture_on_commit_callbacks):
|
||||
djmail.outbox = []
|
||||
@@ -134,7 +145,7 @@ def test_notification_ignore_same_user(event, order, user, django_capture_on_com
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_notification_ignore_insufficient_permissions(event, order, user, team, django_capture_on_commit_callbacks):
|
||||
def test_notification_ignore_insufficient_event_permissions(event, order, user, team, django_capture_on_commit_callbacks):
|
||||
djmail.outbox = []
|
||||
team.all_event_permissions = False
|
||||
team.limit_event_permissions = {"event.vouchers:read": True}
|
||||
@@ -146,4 +157,18 @@ def test_notification_ignore_insufficient_permissions(event, order, user, team,
|
||||
order.log_action('pretix.event.order.paid', {})
|
||||
assert len(djmail.outbox) == 0
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_notification_ignore_insufficient_organizer_permissions(event, team, user, django_capture_on_commit_callbacks):
|
||||
djmail.outbox = []
|
||||
team.all_organizer_permissions = False
|
||||
team.limit_organizer_permissions = {"organizer.giftcards:read": True}
|
||||
team.save()
|
||||
user.notification_settings.create(
|
||||
method='mail', event=None, action_type='pretix.organizer.changed', enabled=True
|
||||
)
|
||||
with django_capture_on_commit_callbacks(execute=True):
|
||||
event.organizer.log_action('pretix.organizer.changed', {})
|
||||
assert len(djmail.outbox) == 0
|
||||
|
||||
# TODO: Test email content
|
||||
|
||||
@@ -26,11 +26,12 @@ from pretix.base.exporter import BaseExporter
|
||||
from pretix.base.invoicing.transmission import (
|
||||
TransmissionProvider, transmission_providers,
|
||||
)
|
||||
from pretix.base.models import Invoice
|
||||
from pretix.base.models import Invoice, LogEntry
|
||||
from pretix.base.notifications import Notification, NotificationType
|
||||
from pretix.base.signals import (
|
||||
register_data_exporters, register_multievent_data_exporters,
|
||||
register_payment_providers, register_sales_channel_types,
|
||||
register_ticket_outputs,
|
||||
register_notification_types, register_payment_providers,
|
||||
register_sales_channel_types, register_ticket_outputs,
|
||||
)
|
||||
from pretix.presale.signals import html_head
|
||||
|
||||
@@ -144,3 +145,30 @@ class TestPeppolTransmissionProvider(TransmissionProvider):
|
||||
def transmit(self, invoice):
|
||||
invoice.transmission_status = Invoice.TRANSMISSION_STATUS_COMPLETED
|
||||
invoice.save()
|
||||
|
||||
|
||||
class OrgLevelTestNotificationType(NotificationType):
|
||||
required_permission = "organizer.settings.general:write" # does not make much sense, just for tests
|
||||
is_event_level = False
|
||||
action_type = "pretix.organizer.changed"
|
||||
verbose_name = "Organizer changed"
|
||||
|
||||
def __init__(self, organizer):
|
||||
super().__init__(organizer)
|
||||
|
||||
def build_notification(self, logentry: LogEntry):
|
||||
n = Notification(
|
||||
event=None,
|
||||
organizer=logentry.organizer,
|
||||
title="Organizer Changed",
|
||||
url="https://example.com"
|
||||
)
|
||||
n.add_attribute('Organizer', logentry.organizer.name)
|
||||
return n
|
||||
|
||||
|
||||
@receiver(register_notification_types, dispatch_uid="testdummy_register_notification_types")
|
||||
def testdummy_register_notification_types(sender, **kwargs):
|
||||
return (
|
||||
OrgLevelTestNotificationType(sender)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user