forked from CGM_Public/pretix_original
Add payment search page (#2335)
Co-authored-by: Raphael Michel <michel@rami.io> Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
@@ -27,7 +27,8 @@ from django_scopes import scopes_disabled
|
||||
from tests.base import SoupTest
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, InvoiceAddress, Item, Order, OrderPosition, Organizer, Team, User,
|
||||
Event, InvoiceAddress, Item, Order, OrderPayment, OrderPosition, Organizer,
|
||||
Team, User,
|
||||
)
|
||||
|
||||
|
||||
@@ -168,3 +169,243 @@ class OrderSearchTest(SoupTest):
|
||||
assert '30C3-FO1' not in resp
|
||||
resp = self.client.get('/control/search/orders/?query=FO2').content.decode()
|
||||
assert '30C3-FO1' not in resp
|
||||
|
||||
|
||||
class PaymentSearchTest(SoupTest):
|
||||
@scopes_disabled()
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
self.orga1 = Organizer.objects.create(name='CCC', slug='ccc')
|
||||
self.orga2 = Organizer.objects.create(name='NoOrga', slug='no')
|
||||
self.event1 = Event.objects.create(
|
||||
organizer=self.orga1, name='30C3', slug='30c3',
|
||||
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer,tests.testdummy'
|
||||
)
|
||||
self.event2 = Event.objects.create(
|
||||
organizer=self.orga1, name='31C3', slug='31c3',
|
||||
date_from=datetime.datetime(2014, 12, 26, tzinfo=datetime.timezone.utc),
|
||||
)
|
||||
|
||||
o1 = Order.objects.create(
|
||||
code='FO1A', event=self.event1, email='dummy1@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + datetime.timedelta(days=10),
|
||||
total=14, locale='en'
|
||||
)
|
||||
InvoiceAddress.objects.create(order=o1, company="Test Ltd.", name_parts={'full_name': "Peter Miller", "_scheme": "full"})
|
||||
ticket1 = Item.objects.create(event=self.event1, name='Early-bird ticket',
|
||||
category=None, default_price=23,
|
||||
admission=True)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
item=ticket1,
|
||||
variation=None,
|
||||
price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Peter", "_scheme": "full"},
|
||||
attendee_email="att@att.com"
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||
amount=Decimal("14"),
|
||||
order=o1,
|
||||
provider="giftcard",
|
||||
info="{test payment order 1}"
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_REFUNDED,
|
||||
amount=Decimal("14"),
|
||||
order=o1,
|
||||
provider="manual",
|
||||
info="{refunded payment}"
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_CANCELED,
|
||||
amount=Decimal("14"),
|
||||
order=o1,
|
||||
provider="manual",
|
||||
info="{canceled payment}"
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_FAILED,
|
||||
amount=Decimal("14"),
|
||||
order=o1,
|
||||
provider="manual",
|
||||
info="{failed payment}"
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
amount=Decimal("14"),
|
||||
order=o1,
|
||||
provider="manual",
|
||||
info="{pending payment}"
|
||||
)
|
||||
|
||||
o2 = Order.objects.create(
|
||||
code='FO2', event=self.event2, email='dummy2@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + datetime.timedelta(days=10),
|
||||
total=15, locale='en'
|
||||
)
|
||||
ticket2 = Item.objects.create(event=self.event1, name='Early-bird ticket',
|
||||
category=None, default_price=23,
|
||||
admission=True)
|
||||
OrderPosition.objects.create(
|
||||
order=o2,
|
||||
item=ticket2,
|
||||
variation=None,
|
||||
price=Decimal("15"),
|
||||
attendee_name_parts={'full_name': "Mark", "_scheme": "full"}
|
||||
)
|
||||
OrderPayment.objects.create(
|
||||
local_id=1,
|
||||
state=OrderPayment.PAYMENT_STATE_CREATED,
|
||||
amount=Decimal("15"),
|
||||
order=o2,
|
||||
provider="manual",
|
||||
info="{test payment order 2}"
|
||||
)
|
||||
|
||||
self.team = Team.objects.create(organizer=self.orga1, can_view_orders=True)
|
||||
self.team2 = Team.objects.create(organizer=self.orga2, can_view_orders=True)
|
||||
self.team.members.add(self.user)
|
||||
self.team.limit_events.add(self.event1)
|
||||
|
||||
self.client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
def test_team_limit_event(self):
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' in resp
|
||||
assert 'FO2' not in resp
|
||||
|
||||
def test_team_limit_event_wrong_permission(self):
|
||||
self.team.can_view_orders = False
|
||||
self.team.save()
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
assert 'FO2' not in resp
|
||||
|
||||
def test_team_all_events(self):
|
||||
self.team.all_events = True
|
||||
self.team.save()
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' in resp
|
||||
assert 'FO2' in resp
|
||||
|
||||
def test_team_all_events_wrong_permission(self):
|
||||
self.team.all_events = True
|
||||
self.team.can_view_orders = False
|
||||
self.team.save()
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
assert 'FO2' not in resp
|
||||
|
||||
def test_team_none(self):
|
||||
self.team.members.clear()
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
assert 'FO2' not in resp
|
||||
|
||||
def test_superuser(self):
|
||||
self.user.is_staff = True
|
||||
self.user.staffsession_set.create(date_start=now(), session_key=self.client.session.session_key)
|
||||
self.user.save()
|
||||
self.team.members.clear()
|
||||
resp = self.client.get('/control/search/payments/').content.decode()
|
||||
assert 'FO1' in resp
|
||||
assert 'FO2' in resp
|
||||
|
||||
def test_filter_email(self):
|
||||
resp = self.client.get('/control/search/payments/?query=dummy1@dummy').content.decode()
|
||||
assert 'FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=dummynope').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
|
||||
def test_filter_invoice_name(self):
|
||||
resp = self.client.get('/control/search/payments/?query=Pete').content.decode()
|
||||
assert 'FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=Mark').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
|
||||
def test_filter_invoice_address(self):
|
||||
resp = self.client.get('/control/search/payments/?query=Ltd').content.decode()
|
||||
assert 'FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=Miller').content.decode()
|
||||
assert 'FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=Mark').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
|
||||
def test_filter_code(self):
|
||||
resp = self.client.get('/control/search/payments/?query=FO1').content.decode()
|
||||
assert '30C3-FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=30c3-FO1').content.decode()
|
||||
assert '30C3-FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=30C3-fO1A').content.decode()
|
||||
assert '30C3-FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=30C3-fo14').content.decode()
|
||||
assert '30C3-FO1' in resp
|
||||
resp = self.client.get('/control/search/payments/?query=31c3-FO1').content.decode()
|
||||
assert '30C3-FO1' not in resp
|
||||
resp = self.client.get('/control/search/payments/?query=FO2').content.decode()
|
||||
assert '30C3-FO1' not in resp
|
||||
|
||||
def test_filter_amount(self):
|
||||
self.team.all_events = True
|
||||
self.team.save()
|
||||
resp = self.client.get('/control/search/payments/?amount=14').content.decode()
|
||||
assert 'FO1' in resp
|
||||
assert 'FO2' not in resp
|
||||
resp = self.client.get('/control/search/payments/?amount=15.00').content.decode()
|
||||
assert 'FO1' not in resp
|
||||
assert 'FO2' in resp
|
||||
|
||||
def test_filter_event(self):
|
||||
self.team.all_events = True
|
||||
self.team.save()
|
||||
event_id = str(self.event1.pk)
|
||||
resp = self.client.get('/control/search/payments/?event=' + event_id).content.decode()
|
||||
assert "FO1" in resp
|
||||
assert "FO2" not in resp
|
||||
|
||||
def test_filter_organizer(self):
|
||||
self.team2.members.add(self.user)
|
||||
self.user.save()
|
||||
|
||||
b = str(self.orga1.pk)
|
||||
resp = self.client.get('/control/search/payments/?organizer=' + b).content.decode()
|
||||
print(resp)
|
||||
assert "FO1" in resp
|
||||
|
||||
b = str(self.orga2.pk)
|
||||
resp = self.client.get('/control/search/payments/?organizer=' + b).content.decode()
|
||||
print(resp)
|
||||
assert "FO1" not in resp
|
||||
|
||||
def test_filter_state(self):
|
||||
self.user.is_staff = True
|
||||
self.user.staffsession_set.create(date_start=now(), session_key=self.client.session.session_key)
|
||||
self.user.save()
|
||||
|
||||
confirmed = OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
resp = self.client.get('/control/search/payments/?state=' + confirmed).content.decode()
|
||||
assert "P-1" in resp
|
||||
assert "P-2" not in resp
|
||||
assert "P-3" not in resp
|
||||
assert "P-4" not in resp
|
||||
assert "P-5" not in resp
|
||||
assert "P-6" not in resp
|
||||
|
||||
def test_filter_provider(self):
|
||||
resp = self.client.get('/control/search/payments/?state=giftcard').content.decode()
|
||||
assert "P-1" in resp
|
||||
assert "P-2" not in resp
|
||||
assert "P-3" not in resp
|
||||
assert "P-4" not in resp
|
||||
assert "P-5" not in resp
|
||||
assert "P-6" not in resp
|
||||
|
||||
Reference in New Issue
Block a user