add test cases

This commit is contained in:
Mira Weller
2024-01-26 17:55:50 +01:00
parent 0da5305b08
commit 55588abd44
8 changed files with 70 additions and 24 deletions
+2 -3
View File
@@ -44,7 +44,7 @@ from datetime import datetime, time, timedelta
from decimal import Decimal
from functools import reduce
from time import sleep
from typing import Any, Dict, List, Union, Iterable
from typing import Any, Dict, Iterable, List, Union
from zoneinfo import ZoneInfo
import dateutil
@@ -79,7 +79,7 @@ from pretix.base.i18n import language
from pretix.base.models import Customer, User
from pretix.base.reldate import RelativeDateWrapper
from pretix.base.settings import PERSON_NAME_SCHEMES
from pretix.base.signals import order_gracefully_delete, allow_ticket_download
from pretix.base.signals import allow_ticket_download, order_gracefully_delete
from ...helpers import OF_SELF
from ...helpers.countries import CachedCountries, FastCountryField
@@ -1209,7 +1209,6 @@ class Order(LockModel, LoggedModel):
return create
def answerfile_name(instance, filename: str) -> str:
secret = get_random_string(length=32, allowed_chars=string.ascii_letters + string.digits)
event = (instance.cartposition if instance.cartposition else instance.orderposition.order).event
+5 -9
View File
@@ -98,10 +98,9 @@ from pretix.base.services.pricing import (
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.services.tasks import ProfiledEventTask, ProfiledTask
from pretix.base.signals import (
allow_ticket_download, order_approved, order_canceled, order_changed,
order_denied, order_expired, order_fee_calculation, order_paid,
order_placed, order_split, order_valid_if_pending, periodic_task,
validate_order,
order_approved, order_canceled, order_changed, order_denied, order_expired,
order_fee_calculation, order_paid, order_placed, order_split,
order_valid_if_pending, periodic_task, validate_order,
)
from pretix.celery_app import app
from pretix.helpers import OF_SELF
@@ -1409,7 +1408,7 @@ def send_download_reminders(sender, **kwargs):
# Race condition
continue
positions = o.positions_with_tickets
if not positions:
if not list(positions):
continue
if not o.ticket_download_available:
@@ -1435,10 +1434,7 @@ def send_download_reminders(sender, **kwargs):
logger.exception('Reminder email could not be sent')
if event.settings.mail_send_download_reminder_attendee:
for p in o.positions.all():
if not p.generate_ticket:
continue
for p in o.positions_with_tickets:
if p.subevent_id:
reminder_date = (p.subevent.date_from - timedelta(days=days)).replace(
hour=0, minute=0, second=0, microsecond=0
+3 -7
View File
@@ -21,7 +21,6 @@
#
import logging
import os
from typing import Iterable
from django.core.files.base import ContentFile
from django.utils.timezone import now
@@ -35,7 +34,7 @@ from pretix.base.models import (
)
from pretix.base.services.tasks import EventTask, ProfiledTask
from pretix.base.settings import PERSON_NAME_SCHEMES
from pretix.base.signals import allow_ticket_download, register_ticket_outputs
from pretix.base.signals import register_ticket_outputs
from pretix.celery_app import app
from pretix.helpers.database import rolledback_transaction
@@ -125,8 +124,8 @@ def preview(event: int, provider: str):
def get_tickets_for_order(order, base_position=None):
positions_with_ticket = order.positions_with_tickets
if not positions_with_ticket:
positions = list(order.positions_with_tickets)
if not positions:
return []
if not order.ticket_download_available:
return []
@@ -136,10 +135,8 @@ def get_tickets_for_order(order, base_position=None):
for receiver, response
in register_ticket_outputs.send(order.event)
]
tickets = []
positions = list(positions_with_ticket)
if base_position:
# Only the given position and its children
positions = [
@@ -203,7 +200,6 @@ def get_tickets_for_order(order, base_position=None):
))
except:
logger.exception('Failed to generate ticket.')
return tickets
+1
View File
@@ -3733,6 +3733,7 @@ class SettingsSandbox:
del self._event.settings[self._convert_key(key)]
def get(self, key: str, default: Any = None, as_type: type = str, binary_file: bool = False):
print(self._convert_key(key))
return self._event.settings.get(
self._convert_key(key), default=default, as_type=as_type, binary_file=binary_file
)
@@ -116,7 +116,6 @@ class PdfTicketOutput(BaseTicketOutput):
merger = PdfWriter()
with language(order.locale, self.event.settings.region):
for op in self.get_tickets_to_print(order):
print("generating ticket ",op)
layout = override_layout.send_chained(
order.event, 'layout', orderposition=op, layout=self.layout_map.get(
(op.item_id, self.override_channel or order.sales_channel),
+1 -3
View File
@@ -80,9 +80,7 @@ from pretix.base.services.orders import (
)
from pretix.base.services.pricing import get_price
from pretix.base.services.tickets import generate, invalidate_cache
from pretix.base.signals import (
allow_ticket_download, order_modified, register_ticket_outputs,
)
from pretix.base.signals import order_modified, register_ticket_outputs
from pretix.base.templatetags.money import money_filter
from pretix.base.views.mixins import OrderQuestionsViewMixin
from pretix.base.views.tasks import AsyncAction
+54 -1
View File
@@ -55,6 +55,7 @@ from pretix.base.services.orders import (
send_expiry_warnings,
)
from pretix.plugins.banktransfer.payment import BankTransfer
from pretix.testutils.mock import mocker_context
from pretix.testutils.scope import classscope
@@ -820,7 +821,7 @@ class DownloadReminderTests(TestCase):
self.event = Event.objects.create(
organizer=self.o, name='Dummy', slug='dummy',
date_from=now() + timedelta(days=2),
plugins='pretix.plugins.banktransfer'
plugins='pretix.plugins.banktransfer,tests.testdummy'
)
self.order = Order.objects.create(
code='FOO', event=self.event, email='dummy@dummy.test',
@@ -853,6 +854,58 @@ class DownloadReminderTests(TestCase):
send_download_reminders(sender=self.event)
assert len(djmail.outbox) == 0
@classscope(attr='o')
def test_downloads_disabled_by_plugin(self):
with mocker_context() as mocker:
self.event.settings.mail_days_download_reminder = 2
from pretix.base.signals import allow_ticket_download
mocker.patch('pretix.base.signals.allow_ticket_download.send')
allow_ticket_download.send.return_value = [(None, [])]
send_download_reminders(sender=self.event)
assert len(djmail.outbox) == 0
@classscope(attr='o')
def test_downloads_all_allowed_by_plugin(self):
with mocker_context() as mocker:
self.event.settings.mail_days_download_reminder = 2
self.event.settings.mail_attach_tickets = True
self.event.settings.ticketoutput_testdummy__enabled = True
self.op2 = OrderPosition.objects.create(
order=self.order, item=self.ticket, variation=None,
price=Decimal("42.00"), attendee_name_parts={"full_name": "Mary"}, positionid=2
)
from pretix.base.signals import allow_ticket_download
mocker.patch('pretix.base.signals.allow_ticket_download.send')
allow_ticket_download.send.return_value = [(None, True)]
send_download_reminders(sender=self.event)
assert len(djmail.outbox) == 1
assert len(djmail.outbox[0].attachments) == 2
@classscope(attr='o')
def test_downloads_partially_disabled_by_plugin(self):
with mocker_context() as mocker:
self.event.settings.mail_days_download_reminder = 2
self.event.settings.mail_attach_tickets = True
self.event.settings.ticketoutput_testdummy__enabled = True
self.op2 = OrderPosition.objects.create(
order=self.order, item=self.ticket, variation=None,
price=Decimal("42.00"), attendee_name_parts={"full_name": "Mary"}, positionid=2
)
from pretix.base.signals import allow_ticket_download
mocker.patch('pretix.base.signals.allow_ticket_download.send')
allow_ticket_download.send.return_value = [(None, [self.op2])]
send_download_reminders(sender=self.event)
assert len(djmail.outbox) == 1
assert len(djmail.outbox[0].attachments) == 1
@classscope(attr='o')
def test_disabled(self):
send_download_reminders(sender=self.event)
+4
View File
@@ -33,3 +33,7 @@ class DummyTicketOutput(BaseTicketOutput):
def generate(self, op):
return 'test.txt', 'text/plain', str(op.order.id)
@property
def multi_download_enabled(self) -> bool:
return False