Merge branch 'master' into self-service-storno

This commit is contained in:
Lukas Bockstaller
2026-08-21 15:31:11 +02:00
50 changed files with 1468 additions and 830 deletions
+59
View File
@@ -837,3 +837,62 @@ def test_webhook_pending_payment(env, client, monkeypatch):
order.refresh_from_db()
with scopes_disabled():
assert order.payments.first().state == OrderPayment.PAYMENT_STATE_PENDING
@pytest.mark.django_db
def test_webhook_capture_declined(env, client, monkeypatch):
order = env[1]
order.status = Order.STATUS_PENDING
order.save()
with scopes_disabled():
order.payments.update(state=OrderPayment.PAYMENT_STATE_CREATED)
pp_order = Result(get_test_order_review_pending())
mock_orders_get_request = MagicMock(return_value=pp_order)
monkeypatch.setattr("paypalcheckoutsdk.orders.OrdersGetRequest", mock_orders_get_request)
monkeypatch.setattr("pretix.plugins.paypal2.payment.PaypalMethod.init_api", init_api)
with scopes_disabled():
ReferencedPayPalObject.objects.create(order=order, payment=order.payments.first(),
reference="806440346Y391300T")
assert order.payments.first().state == OrderPayment.PAYMENT_STATE_CREATED
client.post('/_paypal/webhook/', json.dumps(
{
"create_time": "2026-08-17T12:23:30.687Z",
"event_type": "PAYMENT.CAPTURE.DECLINED",
"event_version": "1.0",
"id": "WH-XXXXXXXXXXXX-XXXXXXXXX",
"links": [
{
"href": "https://api.paypal.com/v1/notifications/webhooks-events/WH-XXXXXXXXXXXX-XXXXXXXXX",
"method": "GET",
"rel": "self"
},
{
"href": "https://api.paypal.com/v1/notifications/webhooks-events/WH-XXXXXXXXXXXX-XXXXXXXXX/resend",
"method": "POST",
"rel": "resend"
}
],
"resource": {
"amount": {},
"custom_id": "Order ABC-12345",
"disbursement_mode": "INSTANT",
"final_capture": True,
"id": "806440346Y391300T",
"payee": {},
"seller_protection": {},
"seller_receivable_breakdown": {},
"status": "DECLINED",
"supplementary_data": {}
},
"resource_type": "capture",
"resource_version": "2.0",
"summary": "A payment capture for € 30.0 EUR was declined."
}), content_type='application_json')
order = env[1]
order.refresh_from_db()
with scopes_disabled():
assert order.payments.first().state == OrderPayment.PAYMENT_STATE_FAILED
+8 -1
View File
@@ -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
+6 -2
View File
@@ -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()