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:
Raphael Michel
2019-06-17 10:46:55 +02:00
committed by GitHub
parent b1db5dbb3e
commit d85ddb5bda
130 changed files with 6253 additions and 4509 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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')

View File

@@ -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

View File

@@ -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

View File

@@ -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': []
}
]

View File

@@ -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)

View File

@@ -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]

View File

@@ -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):

View File

@@ -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,

View File

@@ -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)

View File

@@ -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