From f9ea9de0787c083c957c462d98c93d398699c5e1 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 18 Aug 2026 14:54:19 +0200 Subject: [PATCH] Fix sendmail/scheduled-mails preview event-based placeholders * Fix sendmail/scheduled-mails placeholders * Add event_or_subevent to context * Add placeholders to tests * fix and improve test * Revert "fix and improve test" This reverts commit 874a11e9821c0e2d230ab88c535486930b7c639e. * undo placeholder-tests * add test --- src/pretix/plugins/sendmail/forms.py | 4 ++-- src/pretix/plugins/sendmail/views.py | 2 +- src/tests/plugins/sendmail/conftest.py | 9 ++++++++- src/tests/plugins/sendmail/test_rules.py | 8 ++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/pretix/plugins/sendmail/forms.py b/src/pretix/plugins/sendmail/forms.py index 1dc858024..a896c3d79 100644 --- a/src/pretix/plugins/sendmail/forms.py +++ b/src/pretix/plugins/sendmail/forms.py @@ -384,8 +384,8 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm): ] ) - self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent']) - self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent'], rich=True) + self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent', 'position_or_address']) + self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent', 'position_or_address'], rich=True) choices = [ (Order.STATUS_PAID, _('Paid (or canceled with paid fee)')), diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index a78edbb9c..2f5540f23 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -657,7 +657,7 @@ class UpdateRule(EventPermissionRequiredMixin, UpdateView): for lang in self.request.event.settings.locales: with language(lang, self.request.event.settings.region): - placeholders = get_sample_context(self.request.event, ['event', 'order', 'position_or_address']) + placeholders = get_sample_context(self.request.event, ['event', 'order', 'event_or_subevent', 'position_or_address']) subject = bleach.clean(self.object.subject.localize(lang), tags=set()) preview_subject = prefix_subject(self.request.event, format_map(subject, placeholders), highlight=True) template = self.object.template.localize(lang) diff --git a/src/tests/plugins/sendmail/conftest.py b/src/tests/plugins/sendmail/conftest.py index 3081c975b..3712dc7e2 100644 --- a/src/tests/plugins/sendmail/conftest.py +++ b/src/tests/plugins/sendmail/conftest.py @@ -35,6 +35,8 @@ def event(): organizer=o, name='Dummy', slug='dummy', date_from=now(), live=True, plugins='pretix.plugins.sendmail,tests.testdummy', + location='Foo City', + date_admission=now().replace(hour=11, minute=30), ) return event @@ -81,7 +83,12 @@ def event_series(event): @pytest.fixture def subevent1(event_series): - se1 = event_series.subevents.create(name='Meow', date_from=now() + datetime.timedelta(days=1)) + se1 = event_series.subevents.create( + name='Meow', + date_from=now() + datetime.timedelta(days=1), + location='Meow Town', + date_admission=now().replace(hour=10, minute=0), + ) return se1 diff --git a/src/tests/plugins/sendmail/test_rules.py b/src/tests/plugins/sendmail/test_rules.py index 41147c6ae..290d066f9 100644 --- a/src/tests/plugins/sendmail/test_rules.py +++ b/src/tests/plugins/sendmail/test_rules.py @@ -186,7 +186,7 @@ def test_sendmail_rule_send_order_vs_pos(send_to, amount_mails, recipients, orde order.event.sendmail_rules.create(date_is_absolute=True, send_date=dt_now - datetime.timedelta(hours=1), send_to=send_to, - subject='meow', template='meow meow meow') + subject='{event}: {event_location} @ {event_admission_time}', template='meow meow meow') order.all_positions.create(item=item, price=0, attendee_email='meow@dummy.test') sendmail_run_rules(None) @@ -196,6 +196,8 @@ def test_sendmail_rule_send_order_vs_pos(send_to, amount_mails, recipients, orde _recipients = [mail.to[0] for mail in djmail.outbox] assert set(recipients) == set(_recipients) + assert djmail.outbox[0].subject == 'Dummy: Foo City @ 11:30' + @pytest.mark.django_db @scopes_disabled() @@ -243,7 +245,7 @@ def test_sendmail_rule_send_correct_subevent(order, event_series, subevent1, sub event_series.sendmail_rules.create(date_is_absolute=False, offset_is_after=False, send_offset_days=2, send_offset_time=datetime.time(9, 30), send_to=Rule.ATTENDEES, - subject='meow', template='meow meow meow') + subject='{event}: {event_location} @ {event_admission_time}', template='meow meow meow') p1 = order.all_positions.create(item=item, price=13, attendee_email='se1@dummy.test', subevent=subevent1) order.all_positions.create(item=item, price=23, attendee_email='se2@dummy.test', subevent=subevent2) @@ -253,6 +255,8 @@ def test_sendmail_rule_send_correct_subevent(order, event_series, subevent1, sub assert djmail.outbox[0].to[0] == p1.attendee_email + assert djmail.outbox[0].subject == 'Meow: Meow Town @ 10:00' + @pytest.mark.django_db @scopes_disabled()