forked from CGM_Public/pretix_original
Integrate django-scopes (#1319)
* Install django-scopes * Fix tests.api * Update tasks and cronjobs * Fix remaining tests * Remove unused import * Fix tests after rebase * Disable scopes for get_Events_with_any_permission * Disable scopes for a management command
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import datetime
|
||||
|
||||
from django_scopes import scopes_disabled
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import Event, Item, Organizer, Team, User
|
||||
@@ -36,8 +37,9 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
)
|
||||
|
||||
def test_set_default(self):
|
||||
bl1 = self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
bl1 = self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
self.post_doc('/control/event/%s/%s/badges/%s/default' % (self.orga1.slug, self.event1.slug, bl2.id), {})
|
||||
bl1.refresh_from_db()
|
||||
assert not bl1.default
|
||||
@@ -45,21 +47,24 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
assert bl2.default
|
||||
|
||||
def test_delete(self):
|
||||
bl1 = self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
bl1 = self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
doc = self.get_doc('/control/event/%s/%s/badges/%s/delete' % (self.orga1.slug, self.event1.slug, bl1.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
doc = self.post_doc('/control/event/%s/%s/badges/%s/delete' % (self.orga1.slug, self.event1.slug, bl1.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Layout 1", doc.select("#page-wrapper")[0].text)
|
||||
assert self.event1.badge_layouts.count() == 1
|
||||
with scopes_disabled():
|
||||
assert self.event1.badge_layouts.count() == 1
|
||||
bl2.refresh_from_db()
|
||||
assert bl2.default
|
||||
|
||||
def test_set_on_item(self):
|
||||
self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
self.event1.badge_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
'name_0': 'Standard',
|
||||
'default_price': '23.00',
|
||||
@@ -69,7 +74,8 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
'badgeitem-layout': bl2.pk,
|
||||
'sales_channels': 'web',
|
||||
})
|
||||
assert BadgeItem.objects.get(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
assert BadgeItem.objects.get(item=self.item1, layout=bl2)
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
'name_0': 'Standard',
|
||||
'default_price': '23.00',
|
||||
@@ -78,11 +84,13 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
'allow_cancel': 'yes',
|
||||
'sales_channels': 'web',
|
||||
})
|
||||
assert not BadgeItem.objects.filter(item=self.item1, layout=bl2).exists()
|
||||
with scopes_disabled():
|
||||
assert not BadgeItem.objects.filter(item=self.item1, layout=bl2).exists()
|
||||
|
||||
def test_item_copy(self):
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
BadgeItem.objects.create(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
BadgeItem.objects.create(item=self.item1, layout=bl2)
|
||||
self.client.post('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), {
|
||||
'name_0': 'Intermediate',
|
||||
'default_price': '23.00',
|
||||
@@ -90,13 +98,15 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
'copy_from': str(self.item1.pk),
|
||||
'has_variations': '1'
|
||||
})
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert BadgeItem.objects.get(item=i_new, layout=bl2)
|
||||
assert BadgeItem.objects.get(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert BadgeItem.objects.get(item=i_new, layout=bl2)
|
||||
assert BadgeItem.objects.get(item=self.item1, layout=bl2)
|
||||
|
||||
def test_copy_event(self):
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
BadgeItem.objects.create(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
bl2 = self.event1.badge_layouts.create(name="Layout 2")
|
||||
BadgeItem.objects.create(item=self.item1, layout=bl2)
|
||||
self.post_doc('/control/events/add', {
|
||||
'event_wizard-current_step': 'foundation',
|
||||
'event_wizard-prefix': 'event_wizard',
|
||||
@@ -124,7 +134,8 @@ class BadgeLayoutFormTest(SoupTest):
|
||||
'copy-copy_from_event': self.event1.pk
|
||||
})
|
||||
|
||||
ev = Event.objects.get(slug='33c3')
|
||||
i_new = ev.items.first()
|
||||
bl_new = ev.badge_layouts.first()
|
||||
assert BadgeItem.objects.get(item=i_new, layout=bl_new)
|
||||
with scopes_disabled():
|
||||
ev = Event.objects.get(slug='33c3')
|
||||
i_new = ev.items.first()
|
||||
bl_new = ev.badge_layouts.first()
|
||||
assert BadgeItem.objects.get(item=i_new, layout=bl_new)
|
||||
|
||||
@@ -4,6 +4,7 @@ from io import BytesIO
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from PyPDF2 import PdfFileReader
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -16,27 +17,28 @@ from pretix.plugins.badges.exporters import BadgeExporter
|
||||
@pytest.fixture
|
||||
def env():
|
||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(), live=True
|
||||
)
|
||||
o1 = Order.objects.create(
|
||||
code='FOOBAR', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('13.37'),
|
||||
)
|
||||
shirt = Item.objects.create(event=event, name='T-Shirt', default_price=12)
|
||||
shirt_red = ItemVariation.objects.create(item=shirt, default_price=14, value="Red")
|
||||
OrderPosition.objects.create(
|
||||
order=o1, item=shirt, variation=shirt_red,
|
||||
price=12, attendee_name_parts={}, secret='1234'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1, item=shirt, variation=shirt_red,
|
||||
price=12, attendee_name_parts={}, secret='5678'
|
||||
)
|
||||
return event, o1, shirt
|
||||
with scope(organizer=o):
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(), live=True
|
||||
)
|
||||
o1 = Order.objects.create(
|
||||
code='FOOBAR', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('13.37'),
|
||||
)
|
||||
shirt = Item.objects.create(event=event, name='T-Shirt', default_price=12)
|
||||
shirt_red = ItemVariation.objects.create(item=shirt, default_price=14, value="Red")
|
||||
OrderPosition.objects.create(
|
||||
order=o1, item=shirt, variation=shirt_red,
|
||||
price=12, attendee_name_parts={}, secret='1234'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1, item=shirt, variation=shirt_red,
|
||||
price=12, attendee_name_parts={}, secret='5678'
|
||||
)
|
||||
yield event, o1, shirt
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -6,6 +6,7 @@ from bs4 import BeautifulSoup
|
||||
from django.core import mail as djmail
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, Order, OrderFee, OrderPayment, OrderPosition, Organizer,
|
||||
@@ -125,10 +126,11 @@ def test_underpaid(env, job):
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PENDING
|
||||
p = env[2].payments.last()
|
||||
assert p.amount == Decimal('22.50')
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert env[2].pending_sum == Decimal('0.50')
|
||||
with scopes_disabled():
|
||||
p = env[2].payments.last()
|
||||
assert p.amount == Decimal('22.50')
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert env[2].pending_sum == Decimal('0.50')
|
||||
|
||||
assert len(djmail.outbox) == 1
|
||||
assert djmail.outbox[0].subject == 'Your order received an incomplete payment: 1Z3AS'
|
||||
@@ -150,7 +152,8 @@ def test_in_parts(env, job):
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PAID
|
||||
assert env[2].payments.count() == 2
|
||||
with scopes_disabled():
|
||||
assert env[2].payments.count() == 2
|
||||
assert env[2].pending_sum == Decimal('0.00')
|
||||
|
||||
|
||||
@@ -164,10 +167,11 @@ def test_overpaid(env, job):
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PAID
|
||||
p = env[2].payments.last()
|
||||
assert p.amount == Decimal('23.50')
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert env[2].pending_sum == Decimal('-0.50')
|
||||
with scopes_disabled():
|
||||
p = env[2].payments.last()
|
||||
assert p.amount == Decimal('23.50')
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert env[2].pending_sum == Decimal('-0.50')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -308,9 +312,10 @@ def test_keep_unmatched(env, orga_job):
|
||||
'date': '2016-01-26',
|
||||
'amount': '23.00'
|
||||
}])
|
||||
job = BankImportJob.objects.last()
|
||||
t = job.transactions.last()
|
||||
assert t.state == BankTransaction.STATE_NOMATCH
|
||||
with scopes_disabled():
|
||||
job = BankImportJob.objects.last()
|
||||
t = job.transactions.last()
|
||||
assert t.state == BankTransaction.STATE_NOMATCH
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -355,17 +360,18 @@ Buchungstag;Valuta;Buchungstext;Auftraggeber / Empfänger;Verwendungszweck;Betra
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_pending_paypal_drop_fee(env, job):
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
p = env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
with scopes_disabled():
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
p = env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
process_banktransfers(job, [{
|
||||
'payer': 'Karla Kundin',
|
||||
'reference': 'Bestellung DUMMY1234S',
|
||||
@@ -374,7 +380,8 @@ def test_pending_paypal_drop_fee(env, job):
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PAID
|
||||
assert env[2].fees.count() == 0
|
||||
with scopes_disabled():
|
||||
assert env[2].fees.count() == 0
|
||||
assert env[2].total == Decimal('23.00')
|
||||
p.refresh_from_db()
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CANCELED
|
||||
@@ -382,45 +389,48 @@ def test_pending_paypal_drop_fee(env, job):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_pending_paypal_replace_fee_included(env, job):
|
||||
env[0].settings.set('payment_banktransfer__fee_abs', '1.00')
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
with scopes_disabled():
|
||||
env[0].settings.set('payment_banktransfer__fee_abs', '1.00')
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
process_banktransfers(job, [{
|
||||
'payer': 'Karla Kundin',
|
||||
'reference': 'Bestellung DUMMY1234S',
|
||||
'date': '2016-01-26',
|
||||
'amount': '24.00'
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PAID
|
||||
assert env[2].fees.count() == 1
|
||||
assert env[2].fees.last().value == Decimal('1.00')
|
||||
assert env[2].total == Decimal('24.00')
|
||||
with scopes_disabled():
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PAID
|
||||
assert env[2].fees.count() == 1
|
||||
assert env[2].fees.last().value == Decimal('1.00')
|
||||
assert env[2].total == Decimal('24.00')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_pending_paypal_replace_fee_missing(env, job):
|
||||
env[0].settings.set('payment_banktransfer__fee_abs', '1.00')
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
with scopes_disabled():
|
||||
fee = env[2].fees.create(
|
||||
fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('2.00')
|
||||
)
|
||||
env[2].total += Decimal('2.00')
|
||||
env[2].save()
|
||||
env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
process_banktransfers(job, [{
|
||||
'payer': 'Karla Kundin',
|
||||
'reference': 'Bestellung DUMMY1234S',
|
||||
@@ -428,7 +438,8 @@ def test_pending_paypal_replace_fee_missing(env, job):
|
||||
'amount': '23.00'
|
||||
}])
|
||||
env[2].refresh_from_db()
|
||||
assert env[2].status == Order.STATUS_PENDING
|
||||
assert env[2].fees.count() == 1
|
||||
assert env[2].fees.last().value == Decimal('1.00')
|
||||
assert env[2].total == Decimal('24.00')
|
||||
with scopes_disabled():
|
||||
assert env[2].status == Order.STATUS_PENDING
|
||||
assert env[2].fees.count() == 1
|
||||
assert env[2].fees.last().value == Decimal('1.00')
|
||||
assert env[2].total == Decimal('24.00')
|
||||
|
||||
@@ -4,6 +4,7 @@ from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Order, OrderPayment, OrderRefund, Organizer, Team, User,
|
||||
@@ -223,7 +224,8 @@ def test_webhook_global(env, client, monkeypatch):
|
||||
order = env[1]
|
||||
order.status = Order.STATUS_PENDING
|
||||
order.save()
|
||||
order.payments.update(state=OrderPayment.PAYMENT_STATE_PENDING)
|
||||
with scopes_disabled():
|
||||
order.payments.update(state=OrderPayment.PAYMENT_STATE_PENDING)
|
||||
|
||||
charge = get_test_charge(env[1])
|
||||
monkeypatch.setattr("paypalrestsdk.Sale.find", lambda *args: charge)
|
||||
@@ -264,7 +266,8 @@ def test_webhook_mark_paid(env, client, monkeypatch):
|
||||
order = env[1]
|
||||
order.status = Order.STATUS_PENDING
|
||||
order.save()
|
||||
order.payments.update(state=OrderPayment.PAYMENT_STATE_PENDING)
|
||||
with scopes_disabled():
|
||||
order.payments.update(state=OrderPayment.PAYMENT_STATE_PENDING)
|
||||
|
||||
charge = get_test_charge(env[1])
|
||||
monkeypatch.setattr("paypalrestsdk.Sale.find", lambda *args: charge)
|
||||
@@ -345,12 +348,13 @@ def test_webhook_refund1(env, client, monkeypatch):
|
||||
order.refresh_from_db()
|
||||
assert order.status == Order.STATUS_PAID
|
||||
|
||||
r = order.refunds.first()
|
||||
assert r.provider == 'paypal'
|
||||
assert r.amount == order.total
|
||||
assert r.payment == order.payments.first()
|
||||
assert r.state == OrderRefund.REFUND_STATE_EXTERNAL
|
||||
assert r.source == OrderRefund.REFUND_SOURCE_EXTERNAL
|
||||
with scopes_disabled():
|
||||
r = order.refunds.first()
|
||||
assert r.provider == 'paypal'
|
||||
assert r.amount == order.total
|
||||
assert r.payment == order.payments.first()
|
||||
assert r.state == OrderRefund.REFUND_STATE_EXTERNAL
|
||||
assert r.source == OrderRefund.REFUND_SOURCE_EXTERNAL
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -393,9 +397,10 @@ def test_webhook_refund2(env, client, monkeypatch):
|
||||
order.refresh_from_db()
|
||||
assert order.status == Order.STATUS_PAID
|
||||
|
||||
r = order.refunds.first()
|
||||
assert r.provider == 'paypal'
|
||||
assert r.amount == order.total
|
||||
assert r.payment == order.payments.first()
|
||||
assert r.state == OrderRefund.REFUND_STATE_EXTERNAL
|
||||
assert r.source == OrderRefund.REFUND_SOURCE_EXTERNAL
|
||||
with scopes_disabled():
|
||||
r = order.refunds.first()
|
||||
assert r.provider == 'paypal'
|
||||
assert r.amount == order.total
|
||||
assert r.payment == order.payments.first()
|
||||
assert r.state == OrderRefund.REFUND_STATE_EXTERNAL
|
||||
assert r.source == OrderRefund.REFUND_SOURCE_EXTERNAL
|
||||
|
||||
@@ -3,6 +3,7 @@ from datetime import timedelta
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Checkin, Event, InvoiceAddress, Item, ItemVariation, Order, OrderPosition,
|
||||
@@ -57,7 +58,8 @@ def test_custom_datetime(client, env):
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['version'] == API_VERSION
|
||||
assert jdata['status'] == 'ok'
|
||||
assert Checkin.objects.last().datetime == dt
|
||||
with scopes_disabled():
|
||||
assert Checkin.objects.last().datetime == dt
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -125,7 +127,8 @@ def test_reupload_same_nonce(client, env):
|
||||
data={'secret': '1234', 'nonce': 'fooobar'})
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['status'] == 'ok'
|
||||
assert Checkin.objects.count() == 1
|
||||
with scopes_disabled():
|
||||
assert Checkin.objects.count() == 1
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -273,7 +276,8 @@ def test_search_restricted(client, env):
|
||||
@pytest.mark.django_db
|
||||
def test_search_invoice_name(client, env):
|
||||
AppConfiguration.objects.create(event=env[0], key='abcdefg', list=env[5])
|
||||
InvoiceAddress.objects.create(order=env[2], name_parts={"full_name": "John", "_scheme": "full"})
|
||||
with scopes_disabled():
|
||||
InvoiceAddress.objects.create(order=env[2], name_parts={"full_name": "John", "_scheme": "full"})
|
||||
resp = client.get('/pretixdroid/api/%s/%s/search/?key=%s&query=%s' % (
|
||||
env[0].organizer.slug, env[0].slug, 'abcdefg', 'John'))
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
@@ -283,11 +287,12 @@ def test_search_invoice_name(client, env):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_download_all_data(client, env):
|
||||
op = OrderPosition.objects.last()
|
||||
OrderPosition.objects.create(
|
||||
order=Order.objects.first(), item=op.item, addon_to=op,
|
||||
price=12, secret='foooo'
|
||||
)
|
||||
with scopes_disabled():
|
||||
op = OrderPosition.objects.last()
|
||||
OrderPosition.objects.create(
|
||||
order=Order.objects.first(), item=op.item, addon_to=op,
|
||||
price=12, secret='foooo'
|
||||
)
|
||||
AppConfiguration.objects.create(event=env[0], key='abcdefg', list=env[5])
|
||||
resp = client.get('/pretixdroid/api/%s/%s/download/?key=%s' % (env[0].organizer.slug, env[0].slug, 'abcdefg'))
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
@@ -323,39 +328,41 @@ def test_download_item_restricted_list(client, env):
|
||||
@pytest.mark.django_db
|
||||
def test_status(client, env):
|
||||
AppConfiguration.objects.create(event=env[0], key='abcdefg', list=env[5])
|
||||
Checkin.objects.create(position=env[3], list=env[5])
|
||||
with scopes_disabled():
|
||||
Checkin.objects.create(position=env[3], list=env[5])
|
||||
resp = client.get('/pretixdroid/api/%s/%s/status/?key=%s' % (
|
||||
env[0].organizer.slug, env[0].slug, 'abcdefg'))
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['checkins'] == 1
|
||||
assert jdata['total'] == 2
|
||||
assert jdata['items'] == [
|
||||
{'name': 'T-Shirt',
|
||||
'id': env[3].item.pk,
|
||||
'checkins': 1,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': [
|
||||
{'name': 'Red',
|
||||
'id': env[3].variation.pk,
|
||||
'checkins': 1,
|
||||
'total': 1
|
||||
},
|
||||
{'name': 'Blue',
|
||||
'id': env[3].item.variations.get(value='Blue').pk,
|
||||
'checkins': 0,
|
||||
'total': 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{'name': 'Ticket',
|
||||
'id': env[4].item.pk,
|
||||
'checkins': 0,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': []
|
||||
}
|
||||
]
|
||||
with scopes_disabled():
|
||||
assert jdata['items'] == [
|
||||
{'name': 'T-Shirt',
|
||||
'id': env[3].item.pk,
|
||||
'checkins': 1,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': [
|
||||
{'name': 'Red',
|
||||
'id': env[3].variation.pk,
|
||||
'checkins': 1,
|
||||
'total': 1
|
||||
},
|
||||
{'name': 'Blue',
|
||||
'id': env[3].item.variations.get(value='Blue').pk,
|
||||
'checkins': 0,
|
||||
'total': 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{'name': 'Ticket',
|
||||
'id': env[4].item.pk,
|
||||
'checkins': 0,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': []
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -370,7 +377,8 @@ def question(env):
|
||||
@pytest.mark.django_db
|
||||
def test_question_number(client, env, question):
|
||||
AppConfiguration.objects.create(event=env[0], key='abcdefg', list=env[5])
|
||||
question[0].options.all().delete()
|
||||
with scopes_disabled():
|
||||
question[0].options.all().delete()
|
||||
question[0].type = 'N'
|
||||
question[0].save()
|
||||
|
||||
@@ -399,7 +407,8 @@ def test_question_number(client, env, question):
|
||||
)
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['status'] == 'ok'
|
||||
assert env[3].answers.get(question=question[0]).answer == '3.24'
|
||||
with scopes_disabled():
|
||||
assert env[3].answers.get(question=question[0]).answer == '3.24'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -440,8 +449,9 @@ def test_question_choice(client, env, question):
|
||||
)
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['status'] == 'ok'
|
||||
assert env[3].answers.get(question=question[0]).answer == 'M'
|
||||
assert list(env[3].answers.get(question=question[0]).options.all()) == [question[1]]
|
||||
with scopes_disabled():
|
||||
assert env[3].answers.get(question=question[0]).answer == 'M'
|
||||
assert list(env[3].answers.get(question=question[0]).options.all()) == [question[1]]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -556,8 +566,9 @@ def test_question_multiple_choice(client, env, question):
|
||||
)
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['status'] == 'ok'
|
||||
assert env[3].answers.get(question=question[0]).answer == 'M, L'
|
||||
assert set(env[3].answers.get(question=question[0]).options.all()) == {question[1], question[2]}
|
||||
with scopes_disabled():
|
||||
assert env[3].answers.get(question=question[0]).answer == 'M, L'
|
||||
assert set(env[3].answers.get(question=question[0]).options.all()) == {question[1], question[2]}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -3,6 +3,7 @@ from datetime import timedelta
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Checkin, Event, Item, ItemVariation, Order, OrderPosition, Organizer, Team,
|
||||
@@ -61,7 +62,8 @@ def test_custom_datetime(client, env):
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['version'] == API_VERSION
|
||||
assert jdata['status'] == 'ok'
|
||||
assert Checkin.objects.last().datetime == dt
|
||||
with scopes_disabled():
|
||||
assert Checkin.objects.last().datetime == dt
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -143,36 +145,38 @@ def test_download_all_data(client, env):
|
||||
@pytest.mark.django_db
|
||||
def test_status(client, env):
|
||||
AppConfiguration.objects.create(event=env[0], key='abcdefg', list=env[7])
|
||||
Checkin.objects.create(position=env[3], list=env[7])
|
||||
with scopes_disabled():
|
||||
Checkin.objects.create(position=env[3], list=env[7])
|
||||
resp = client.get('/pretixdroid/api/%s/%s/%d/status/?key=%s' % (
|
||||
env[0].organizer.slug, env[0].slug, env[5].pk, 'abcdefg'))
|
||||
jdata = json.loads(resp.content.decode("utf-8"))
|
||||
assert jdata['checkins'] == 1
|
||||
assert jdata['total'] == 1
|
||||
assert jdata['items'] == [
|
||||
{'name': 'T-Shirt',
|
||||
'id': env[3].item.pk,
|
||||
'checkins': 1,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': [
|
||||
{'name': 'Red',
|
||||
'id': env[3].variation.pk,
|
||||
'checkins': 1,
|
||||
'total': 1
|
||||
},
|
||||
{'name': 'Blue',
|
||||
'id': env[3].item.variations.get(value='Blue').pk,
|
||||
'checkins': 0,
|
||||
'total': 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{'name': 'Ticket',
|
||||
'id': env[4].item.pk,
|
||||
'checkins': 0,
|
||||
'admission': False,
|
||||
'total': 0,
|
||||
'variations': []
|
||||
}
|
||||
]
|
||||
with scopes_disabled():
|
||||
assert jdata['checkins'] == 1
|
||||
assert jdata['total'] == 1
|
||||
assert jdata['items'] == [
|
||||
{'name': 'T-Shirt',
|
||||
'id': env[3].item.pk,
|
||||
'checkins': 1,
|
||||
'admission': False,
|
||||
'total': 1,
|
||||
'variations': [
|
||||
{'name': 'Red',
|
||||
'id': env[3].variation.pk,
|
||||
'checkins': 1,
|
||||
'total': 1
|
||||
},
|
||||
{'name': 'Blue',
|
||||
'id': env[3].item.variations.get(value='Blue').pk,
|
||||
'checkins': 0,
|
||||
'total': 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{'name': 'Ticket',
|
||||
'id': env[4].item.pk,
|
||||
'checkins': 0,
|
||||
'admission': False,
|
||||
'total': 0,
|
||||
'variations': []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -5,6 +5,7 @@ from decimal import Decimal
|
||||
import pytest
|
||||
from django.test import RequestFactory
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from stripe.error import APIConnectionError, CardError, StripeError
|
||||
|
||||
from pretix.base.models import Event, Order, OrderRefund, Organizer
|
||||
@@ -15,17 +16,18 @@ from pretix.plugins.stripe.payment import StripeCC
|
||||
@pytest.fixture
|
||||
def env():
|
||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(), live=True
|
||||
)
|
||||
o1 = Order.objects.create(
|
||||
code='FOOBAR', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('13.37')
|
||||
)
|
||||
return event, o1
|
||||
with scope(organizer=o):
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(), live=True
|
||||
)
|
||||
o1 = Order.objects.create(
|
||||
code='FOOBAR', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('13.37')
|
||||
)
|
||||
yield event, o1
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
|
||||
@@ -4,6 +4,7 @@ from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Order, OrderPayment, OrderRefund, Organizer, Team, User,
|
||||
@@ -165,9 +166,10 @@ def test_webhook_mark_paid_without_reference_and_payment(env, client, monkeypatc
|
||||
def test_webhook_partial_refund(env, client, monkeypatch):
|
||||
charge = get_test_charge(env[1])
|
||||
|
||||
payment = env[1].payments.create(
|
||||
provider='stripe', amount=env[1].total, info=json.dumps(charge)
|
||||
)
|
||||
with scopes_disabled():
|
||||
payment = env[1].payments.create(
|
||||
provider='stripe', amount=env[1].total, info=json.dumps(charge)
|
||||
)
|
||||
ReferencedStripeObject.objects.create(order=env[1], reference="ch_18TY6GGGWE2Ias8TZHanef25",
|
||||
payment=payment)
|
||||
|
||||
@@ -216,7 +218,8 @@ def test_webhook_partial_refund(env, client, monkeypatch):
|
||||
order.refresh_from_db()
|
||||
assert order.status == Order.STATUS_PAID
|
||||
|
||||
ra = order.refunds.first()
|
||||
with scopes_disabled():
|
||||
ra = order.refunds.first()
|
||||
assert ra.state == OrderRefund.REFUND_STATE_EXTERNAL
|
||||
assert ra.source == 'external'
|
||||
assert ra.amount == Decimal('123.00')
|
||||
@@ -231,9 +234,10 @@ def test_webhook_global(env, client, monkeypatch):
|
||||
charge = get_test_charge(env[1])
|
||||
monkeypatch.setattr("stripe.Charge.retrieve", lambda *args, **kwargs: charge)
|
||||
|
||||
payment = order.payments.create(
|
||||
provider='stripe', amount=order.total, info=json.dumps(charge), state=OrderPayment.PAYMENT_STATE_CREATED
|
||||
)
|
||||
with scopes_disabled():
|
||||
payment = order.payments.create(
|
||||
provider='stripe', amount=order.total, info=json.dumps(charge), state=OrderPayment.PAYMENT_STATE_CREATED
|
||||
)
|
||||
ReferencedStripeObject.objects.create(order=order, reference="ch_18TY6GGGWE2Ias8TZHanef25",
|
||||
payment=payment)
|
||||
|
||||
@@ -270,9 +274,10 @@ def test_webhook_global_legacy_reference(env, client, monkeypatch):
|
||||
charge = get_test_charge(env[1])
|
||||
monkeypatch.setattr("stripe.Charge.retrieve", lambda *args, **kwargs: charge)
|
||||
|
||||
payment = order.payments.create(
|
||||
provider='stripe', amount=order.total, info=json.dumps(charge), state=OrderPayment.PAYMENT_STATE_CREATED
|
||||
)
|
||||
with scopes_disabled():
|
||||
payment = order.payments.create(
|
||||
provider='stripe', amount=order.total, info=json.dumps(charge), state=OrderPayment.PAYMENT_STATE_CREATED
|
||||
)
|
||||
ReferencedStripeObject.objects.create(order=order, reference="ch_18TY6GGGWE2Ias8TZHanef25")
|
||||
|
||||
client.post('/_stripe/webhook/', json.dumps(
|
||||
@@ -297,4 +302,5 @@ def test_webhook_global_legacy_reference(env, client, monkeypatch):
|
||||
|
||||
order.refresh_from_db()
|
||||
assert order.status == Order.STATUS_PAID
|
||||
assert list(order.payments.all()) == [payment]
|
||||
with scopes_disabled():
|
||||
assert list(order.payments.all()) == [payment]
|
||||
|
||||
@@ -4,6 +4,7 @@ from decimal import Decimal
|
||||
import pytest
|
||||
import pytz
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
|
||||
from pretix.base.models import Event, Item, Order, OrderPosition, Organizer
|
||||
from pretix.plugins.checkinlists.exporters import CSVCheckinList
|
||||
@@ -13,40 +14,41 @@ from pretix.plugins.checkinlists.exporters import CSVCheckinList
|
||||
def event():
|
||||
"""Returns an event instance"""
|
||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(),
|
||||
plugins='pretix.plugins.checkinlists,tests.testdummy',
|
||||
)
|
||||
event.settings.set('attendee_names_asked', True)
|
||||
event.settings.set('name_scheme', 'title_given_middle_family')
|
||||
event.settings.set('locales', ['en', 'de'])
|
||||
event.checkin_lists.create(name="Default", all_products=True)
|
||||
with scope(organizer=o):
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=now(),
|
||||
plugins='pretix.plugins.checkinlists,tests.testdummy',
|
||||
)
|
||||
event.settings.set('attendee_names_asked', True)
|
||||
event.settings.set('name_scheme', 'title_given_middle_family')
|
||||
event.settings.set('locales', ['en', 'de'])
|
||||
event.checkin_lists.create(name="Default", all_products=True)
|
||||
|
||||
order_paid = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||
total=33, locale='en'
|
||||
)
|
||||
item_ticket = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
||||
OrderPosition.objects.create(
|
||||
order=order_paid,
|
||||
item=item_ticket,
|
||||
variation=None,
|
||||
price=Decimal("23"),
|
||||
attendee_name_parts={"title": "Mr", "given_name": "Peter", "middle_name": "A", "family_name": "Jones"},
|
||||
secret='hutjztuxhkbtwnesv2suqv26k6ttytxx'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=order_paid,
|
||||
item=item_ticket,
|
||||
variation=None,
|
||||
price=Decimal("13"),
|
||||
attendee_name_parts={"title": "Mrs", "given_name": "Andrea", "middle_name": "J", "family_name": "Zulu"},
|
||||
secret='ggsngqtnmhx74jswjngw3fk8pfwz2a7k'
|
||||
)
|
||||
return event
|
||||
order_paid = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||
total=33, locale='en'
|
||||
)
|
||||
item_ticket = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
||||
OrderPosition.objects.create(
|
||||
order=order_paid,
|
||||
item=item_ticket,
|
||||
variation=None,
|
||||
price=Decimal("23"),
|
||||
attendee_name_parts={"title": "Mr", "given_name": "Peter", "middle_name": "A", "family_name": "Jones"},
|
||||
secret='hutjztuxhkbtwnesv2suqv26k6ttytxx'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=order_paid,
|
||||
item=item_ticket,
|
||||
variation=None,
|
||||
price=Decimal("13"),
|
||||
attendee_name_parts={"title": "Mrs", "given_name": "Andrea", "middle_name": "J", "family_name": "Zulu"},
|
||||
secret='ggsngqtnmhx74jswjngw3fk8pfwz2a7k'
|
||||
)
|
||||
yield event
|
||||
|
||||
|
||||
def clean(d):
|
||||
|
||||
@@ -3,6 +3,7 @@ import datetime
|
||||
import pytest
|
||||
from django.core import mail as djmail
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, Order, OrderPosition, Organizer, Team, User,
|
||||
@@ -34,10 +35,14 @@ def order(item):
|
||||
expires=now() + datetime.timedelta(hours=1),
|
||||
total=13, code='DUMMY', email='dummy@dummy.test',
|
||||
datetime=now(), locale='en')
|
||||
OrderPosition.objects.create(order=o, item=item, price=13)
|
||||
return o
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def pos(order, item):
|
||||
return OrderPosition.objects.create(order=order, item=item, price=13)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def logged_in_client(client, event):
|
||||
"""Returns a logged client"""
|
||||
@@ -66,12 +71,12 @@ def test_sendmail_view(logged_in_client, sendmail_url, expected=200):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_simple_case(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_simple_case(logged_in_client, sendmail_url, event, order, pos):
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -92,12 +97,12 @@ def test_sendmail_simple_case(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_email_not_sent_if_order_not_match(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_email_not_sent_if_order_not_match(logged_in_client, sendmail_url, event, order, pos):
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'p',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -108,12 +113,12 @@ def test_sendmail_email_not_sent_if_order_not_match(logged_in_client, sendmail_u
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_preview(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_preview(logged_in_client, sendmail_url, event, order, pos):
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.',
|
||||
'action': 'preview'
|
||||
@@ -126,12 +131,12 @@ def test_sendmail_preview(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_invalid_data(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_invalid_data(logged_in_client, sendmail_url, event, order, pos):
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
},
|
||||
follow=True)
|
||||
@@ -147,12 +152,13 @@ def test_sendmail_multi_locales(logged_in_client, sendmail_url, event, item):
|
||||
|
||||
event.settings.set('locales', ['en', 'de'])
|
||||
|
||||
o = Order.objects.create(event=item.event, status=Order.STATUS_PAID,
|
||||
expires=now() + datetime.timedelta(hours=1),
|
||||
total=13, code='DUMMY', email='dummy@dummy.test',
|
||||
datetime=now(),
|
||||
locale='de')
|
||||
OrderPosition.objects.create(order=o, item=item, price=13)
|
||||
with scopes_disabled():
|
||||
o = Order.objects.create(event=item.event, status=Order.STATUS_PAID,
|
||||
expires=now() + datetime.timedelta(hours=1),
|
||||
total=13, code='DUMMY', email='dummy@dummy.test',
|
||||
datetime=now(),
|
||||
locale='de')
|
||||
OrderPosition.objects.create(order=o, item=item, price=13)
|
||||
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'p',
|
||||
@@ -181,12 +187,13 @@ def test_sendmail_multi_locales(logged_in_client, sendmail_url, event, item):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_subevents(logged_in_client, sendmail_url, event, order, pos):
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
se1 = event.subevents.create(name='Subevent FOO', date_from=now())
|
||||
se2 = event.subevents.create(name='Bar', date_from=now())
|
||||
op = order.positions.last()
|
||||
with scopes_disabled():
|
||||
se1 = event.subevents.create(name='Subevent FOO', date_from=now())
|
||||
se2 = event.subevents.create(name='Bar', date_from=now())
|
||||
op = order.positions.last()
|
||||
op.subevent = se1
|
||||
op.save()
|
||||
|
||||
@@ -194,7 +201,7 @@ def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.',
|
||||
'subevent': se1.pk
|
||||
@@ -208,7 +215,7 @@ def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.',
|
||||
'subevent': se2.pk
|
||||
@@ -224,12 +231,12 @@ def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_placeholder(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_placeholder(logged_in_client, sendmail_url, event, order, pos):
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'orders',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': '{code} Test subject',
|
||||
'message_0': 'This is a test file for sending mails.',
|
||||
'action': 'preview'
|
||||
@@ -243,8 +250,8 @@ def test_sendmail_placeholder(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_attendee_mails(logged_in_client, sendmail_url, event, order):
|
||||
p = order.positions.first()
|
||||
def test_sendmail_attendee_mails(logged_in_client, sendmail_url, event, order, pos):
|
||||
p = pos
|
||||
event.settings.attendee_emails_asked = True
|
||||
p.attendee_email = 'attendee@dummy.test'
|
||||
p.save()
|
||||
@@ -253,7 +260,7 @@ def test_sendmail_attendee_mails(logged_in_client, sendmail_url, event, order):
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'attendees',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -267,8 +274,8 @@ def test_sendmail_attendee_mails(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_both_mails(logged_in_client, sendmail_url, event, order):
|
||||
p = order.positions.first()
|
||||
def test_sendmail_both_mails(logged_in_client, sendmail_url, event, order, pos):
|
||||
p = pos
|
||||
event.settings.attendee_emails_asked = True
|
||||
p.attendee_email = 'attendee@dummy.test'
|
||||
p.save()
|
||||
@@ -277,7 +284,7 @@ def test_sendmail_both_mails(logged_in_client, sendmail_url, event, order):
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'both',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -294,8 +301,8 @@ def test_sendmail_both_mails(logged_in_client, sendmail_url, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_both_but_same_address(logged_in_client, sendmail_url, event, order):
|
||||
p = order.positions.first()
|
||||
def test_sendmail_both_but_same_address(logged_in_client, sendmail_url, event, order, pos):
|
||||
p = pos
|
||||
event.settings.attendee_emails_asked = True
|
||||
p.attendee_email = 'dummy@dummy.test'
|
||||
p.save()
|
||||
@@ -304,7 +311,7 @@ def test_sendmail_both_but_same_address(logged_in_client, sendmail_url, event, o
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'both',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -318,8 +325,8 @@ def test_sendmail_both_but_same_address(logged_in_client, sendmail_url, event, o
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_attendee_fallback(logged_in_client, sendmail_url, event, order):
|
||||
p = order.positions.first()
|
||||
def test_sendmail_attendee_fallback(logged_in_client, sendmail_url, event, order, pos):
|
||||
p = pos
|
||||
event.settings.attendee_emails_asked = True
|
||||
p.attendee_email = None
|
||||
p.save()
|
||||
@@ -328,7 +335,7 @@ def test_sendmail_attendee_fallback(logged_in_client, sendmail_url, event, order
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
{'sendto': 'n',
|
||||
'recipients': 'attendees',
|
||||
'items': order.positions.first().item_id,
|
||||
'items': pos.item_id,
|
||||
'subject_0': 'Test subject',
|
||||
'message_0': 'This is a test file for sending mails.'
|
||||
},
|
||||
@@ -342,15 +349,16 @@ def test_sendmail_attendee_fallback(logged_in_client, sendmail_url, event, order
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_sendmail_attendee_product_filter(logged_in_client, sendmail_url, event, order):
|
||||
def test_sendmail_attendee_product_filter(logged_in_client, sendmail_url, event, order, pos):
|
||||
event.settings.attendee_emails_asked = True
|
||||
i2 = Item.objects.create(name='Test item', event=event, default_price=13)
|
||||
p = order.positions.first()
|
||||
p.attendee_email = 'attendee1@dummy.test'
|
||||
p.save()
|
||||
order.positions.create(
|
||||
item=i2, price=0, attendee_email='attendee2@dummy.test'
|
||||
)
|
||||
with scopes_disabled():
|
||||
i2 = Item.objects.create(name='Test item', event=event, default_price=13)
|
||||
p = pos
|
||||
p.attendee_email = 'attendee1@dummy.test'
|
||||
p.save()
|
||||
order.positions.create(
|
||||
item=i2, price=0, attendee_email='attendee2@dummy.test'
|
||||
)
|
||||
|
||||
djmail.outbox = []
|
||||
response = logged_in_client.post(sendmail_url,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import datetime
|
||||
|
||||
from django_scopes import scopes_disabled
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import Event, Item, Organizer, Team, User
|
||||
@@ -7,6 +8,7 @@ from pretix.plugins.ticketoutputpdf.models import TicketLayoutItem
|
||||
|
||||
|
||||
class TicketLayoutFormTest(SoupTest):
|
||||
@scopes_disabled()
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
@@ -31,13 +33,15 @@ class TicketLayoutFormTest(SoupTest):
|
||||
doc = self.post_doc('/control/event/%s/%s/pdfoutput/add' % (self.orga1.slug, self.event1.slug), form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertIn("Layout 1", doc.select("#page-wrapper")[0].text)
|
||||
assert self.event1.ticket_layouts.get(
|
||||
default=True, name='Layout 1'
|
||||
)
|
||||
with scopes_disabled():
|
||||
assert self.event1.ticket_layouts.get(
|
||||
default=True, name='Layout 1'
|
||||
)
|
||||
|
||||
def test_set_default(self):
|
||||
bl1 = self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
bl1 = self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
self.post_doc('/control/event/%s/%s/pdfoutput/%s/default' % (self.orga1.slug, self.event1.slug, bl2.id), {})
|
||||
bl1.refresh_from_db()
|
||||
assert not bl1.default
|
||||
@@ -45,21 +49,24 @@ class TicketLayoutFormTest(SoupTest):
|
||||
assert bl2.default
|
||||
|
||||
def test_delete(self):
|
||||
bl1 = self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
bl1 = self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
doc = self.get_doc('/control/event/%s/%s/pdfoutput/%s/delete' % (self.orga1.slug, self.event1.slug, bl1.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
doc = self.post_doc('/control/event/%s/%s/pdfoutput/%s/delete' % (self.orga1.slug, self.event1.slug, bl1.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Layout 1", doc.select("#page-wrapper")[0].text)
|
||||
assert self.event1.ticket_layouts.count() == 1
|
||||
with scopes_disabled():
|
||||
assert self.event1.ticket_layouts.count() == 1
|
||||
bl2.refresh_from_db()
|
||||
assert bl2.default
|
||||
|
||||
def test_set_on_item(self):
|
||||
self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
with scopes_disabled():
|
||||
self.event1.ticket_layouts.create(name="Layout 1", default=True)
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
'name_0': 'Standard',
|
||||
'default_price': '23.00',
|
||||
@@ -69,7 +76,8 @@ class TicketLayoutFormTest(SoupTest):
|
||||
'ticketlayoutitem_web-layout': bl2.pk,
|
||||
'sales_channels': 'web',
|
||||
})
|
||||
assert TicketLayoutItem.objects.get(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
assert TicketLayoutItem.objects.get(item=self.item1, layout=bl2)
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
'name_0': 'Standard',
|
||||
'default_price': '23.00',
|
||||
@@ -78,11 +86,13 @@ class TicketLayoutFormTest(SoupTest):
|
||||
'allow_cancel': 'yes',
|
||||
'sales_channels': 'web',
|
||||
})
|
||||
assert not TicketLayoutItem.objects.filter(item=self.item1, layout=bl2).exists()
|
||||
with scopes_disabled():
|
||||
assert not TicketLayoutItem.objects.filter(item=self.item1, layout=bl2).exists()
|
||||
|
||||
def test_item_copy(self):
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
TicketLayoutItem.objects.create(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
TicketLayoutItem.objects.create(item=self.item1, layout=bl2)
|
||||
self.client.post('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), {
|
||||
'name_0': 'Intermediate',
|
||||
'default_price': '23.00',
|
||||
@@ -90,13 +100,15 @@ class TicketLayoutFormTest(SoupTest):
|
||||
'copy_from': str(self.item1.pk),
|
||||
'has_variations': '1'
|
||||
})
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert TicketLayoutItem.objects.get(item=i_new, layout=bl2)
|
||||
assert TicketLayoutItem.objects.get(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert TicketLayoutItem.objects.get(item=i_new, layout=bl2)
|
||||
assert TicketLayoutItem.objects.get(item=self.item1, layout=bl2)
|
||||
|
||||
def test_copy_event(self):
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
TicketLayoutItem.objects.create(item=self.item1, layout=bl2)
|
||||
with scopes_disabled():
|
||||
bl2 = self.event1.ticket_layouts.create(name="Layout 2")
|
||||
TicketLayoutItem.objects.create(item=self.item1, layout=bl2)
|
||||
self.post_doc('/control/events/add', {
|
||||
'event_wizard-current_step': 'foundation',
|
||||
'event_wizard-prefix': 'event_wizard',
|
||||
@@ -124,7 +136,8 @@ class TicketLayoutFormTest(SoupTest):
|
||||
'copy-copy_from_event': self.event1.pk
|
||||
})
|
||||
|
||||
ev = Event.objects.get(slug='33c3')
|
||||
i_new = ev.items.first()
|
||||
bl_new = ev.ticket_layouts.first()
|
||||
assert TicketLayoutItem.objects.get(item=i_new, layout=bl_new)
|
||||
with scopes_disabled():
|
||||
ev = Event.objects.get(slug='33c3')
|
||||
i_new = ev.items.first()
|
||||
bl_new = ev.ticket_layouts.first()
|
||||
assert TicketLayoutItem.objects.get(item=i_new, layout=bl_new)
|
||||
|
||||
@@ -4,6 +4,7 @@ from io import BytesIO
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from PyPDF2 import PdfFileReader
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -41,11 +42,12 @@ def env0():
|
||||
@pytest.mark.django_db
|
||||
def test_generate_pdf(env0):
|
||||
event, order = env0
|
||||
event.settings.set('ticketoutput_pdf_code_x', 30)
|
||||
event.settings.set('ticketoutput_pdf_code_y', 50)
|
||||
event.settings.set('ticketoutput_pdf_code_s', 2)
|
||||
o = PdfTicketOutput(event)
|
||||
fname, ftype, buf = o.generate(order.positions.first())
|
||||
assert ftype == 'application/pdf'
|
||||
pdf = PdfFileReader(BytesIO(buf))
|
||||
assert pdf.numPages == 1
|
||||
with scope(organizer=event.organizer):
|
||||
event.settings.set('ticketoutput_pdf_code_x', 30)
|
||||
event.settings.set('ticketoutput_pdf_code_y', 50)
|
||||
event.settings.set('ticketoutput_pdf_code_s', 2)
|
||||
o = PdfTicketOutput(event)
|
||||
fname, ftype, buf = o.generate(order.positions.first())
|
||||
assert ftype == 'application/pdf'
|
||||
pdf = PdfFileReader(BytesIO(buf))
|
||||
assert pdf.numPages == 1
|
||||
|
||||
Reference in New Issue
Block a user