diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index c47dd7881b..d2d1c3a967 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -1141,6 +1141,9 @@ class OrderRefundView(OrderView): messages.error(self.request, _('You entered an order that could not be found.')) is_valid = False else: + if order.event.currency != self.request.event.currency: + messages.error(self.request, _('You entered an order in an event with a different currency.')) + is_valid = False refunds.append(OrderRefund( order=self.order, payment=None, diff --git a/src/tests/control/test_orders.py b/src/tests/control/test_orders.py index 47c0bdc9bb..6f27e87c6b 100644 --- a/src/tests/control/test_orders.py +++ b/src/tests/control/test_orders.py @@ -2175,22 +2175,28 @@ def test_refund_paid_order_offsetting_to_unknown(client, env): @pytest.mark.django_db -def test_refund_paid_order_offsetting_to_expired(client, env): +def test_refund_paid_order_offsetting_to_wrong_currency(client, env): with scopes_disabled(): p = env[2].payments.last() p.confirm() client.login(email='dummy@dummy.dummy', password='dummy') + event2 = Event.objects.create( + organizer=env[0].organizer, name='Dummy', slug='dummy2', + date_from=now(), plugins='pretix.plugins.banktransfer,pretix.plugins.stripe,tests.testdummy', + currency='USD', + ) + ticket2 = Item.objects.create(event=event2, name='Early-bird ticket', + category=None, default_price=23, + admission=True, personalized=True) o = Order.objects.create( - code='BAZ', event=env[0], email='dummy@dummy.test', - status=Order.STATUS_EXPIRED, + code='BAZ', event=event2, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), total=5, locale='en' ) - o.positions.create(price=5, item=env[3]) - q = Quota.objects.create(event=env[0], size=0) - q.items.add(env[3]) + o.positions.create(price=5, item=ticket2) - client.post('/control/event/dummy/dummy/orders/FOO/refund', { + r = client.post('/control/event/dummy/dummy/orders/FOO/refund', { 'start-partial_amount': '5.00', 'start-mode': 'partial', 'start-action': 'mark_pending', @@ -2199,21 +2205,8 @@ def test_refund_paid_order_offsetting_to_expired(client, env): 'manual_state': 'pending', 'perform': 'on' }, follow=True) - p.refresh_from_db() - assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED - env[2].refresh_from_db() - with scopes_disabled(): - r = env[2].refunds.last() - assert r.provider == "offsetting" - assert r.state == OrderRefund.REFUND_STATE_DONE - assert r.amount == Decimal('5.00') - assert env[2].status == Order.STATUS_PENDING - o.refresh_from_db() - assert o.status == Order.STATUS_EXPIRED - p2 = o.payments.first() - assert p2.provider == "offsetting" - assert p2.amount == Decimal('5.00') - assert p2.state == OrderPayment.PAYMENT_STATE_CONFIRMED + assert b'alert-danger' in r.content + assert b'different currency' in r.content @pytest.mark.django_db