mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Separate personalization from admission (#2990)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
@@ -262,6 +262,7 @@ TEST_ITEM_RES = {
|
||||
"tax_rate": "0.00",
|
||||
"tax_rule": None,
|
||||
"admission": False,
|
||||
"personalized": False,
|
||||
"issue_giftcard": False,
|
||||
"position": 0,
|
||||
"generate_tickets": None,
|
||||
@@ -472,9 +473,12 @@ def test_item_create(token_client, organizer, event, item, category, taxrule, me
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
assert Item.objects.get(pk=resp.data['id']).sales_channels == ["web", "pretixpos"]
|
||||
assert Item.objects.get(pk=resp.data['id']).meta_data == {'day': 'Wednesday'}
|
||||
assert Item.objects.get(pk=resp.data['id']).require_membership_types.count() == 1
|
||||
i = Item.objects.get(pk=resp.data['id'])
|
||||
assert i.sales_channels == ["web", "pretixpos"]
|
||||
assert i.meta_data == {'day': 'Wednesday'}
|
||||
assert i.require_membership_types.count() == 1
|
||||
assert i.personalized is True # auto-set for backwards-compatibility
|
||||
assert i.admission is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -1077,6 +1081,32 @@ def test_item_update(token_client, organizer, event, item, category, item2, cate
|
||||
assert resp.status_code == 400
|
||||
assert resp.content.decode() == '{"meta_data":["Item meta data property \'foo\' does not exist."]}'
|
||||
|
||||
item.personalized = True
|
||||
item.admission = True
|
||||
item.save()
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk),
|
||||
{
|
||||
"admission": False,
|
||||
"personalized": True,
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
assert resp.content.decode() == '{"non_field_errors":["Only admission products can currently be personalized."]}'
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk),
|
||||
{
|
||||
"admission": False
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
item.refresh_from_db()
|
||||
assert not item.admission
|
||||
assert not item.personalized # also set for backwards compatibility
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_item_file_upload(token_client, organizer, event, item):
|
||||
|
||||
@@ -89,7 +89,7 @@ class BaseQuotaTestCase(TestCase):
|
||||
)
|
||||
self.quota = Quota.objects.create(name="Test", size=2, event=self.event)
|
||||
self.item1 = Item.objects.create(event=self.event, name="Ticket", default_price=23,
|
||||
admission=True)
|
||||
admission=True, personalized=True)
|
||||
self.item2 = Item.objects.create(event=self.event, name="T-Shirt", default_price=23)
|
||||
self.item3 = Item.objects.create(event=self.event, name="Goodie", default_price=23)
|
||||
self.var1 = ItemVariation.objects.create(item=self.item2, value='S')
|
||||
|
||||
@@ -80,7 +80,7 @@ def env():
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
category=None, default_price=23,
|
||||
admission=True)
|
||||
admission=True, personalized=True)
|
||||
event.settings.set('attendee_names_asked', True)
|
||||
event.settings.set('locales', ['en', 'de'])
|
||||
OrderPosition.objects.create(
|
||||
@@ -106,7 +106,7 @@ def test_order_list(client, env):
|
||||
with scopes_disabled():
|
||||
otherticket = Item.objects.create(event=env[0], name='Early-bird ticket',
|
||||
category=None, default_price=23,
|
||||
admission=True)
|
||||
admission=True, personalized=True)
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
response = client.get('/control/event/dummy/dummy/orders/')
|
||||
assert 'FOO' in response.content.decode()
|
||||
@@ -1354,7 +1354,7 @@ class OrderChangeTests(SoupTest):
|
||||
mtype = self.event.organizer.membership_types.create(name='Week pass', transferable=True, allow_parallel_usage=True)
|
||||
self.ticket.require_membership = True
|
||||
self.ticket.require_membership_types.add(mtype)
|
||||
self.ticket.admission = True
|
||||
self.ticket.personalized = True
|
||||
self.ticket.save()
|
||||
customer = self.event.organizer.customers.create(email='john@example.org', is_verified=True)
|
||||
self.order.customer = customer
|
||||
|
||||
@@ -71,7 +71,7 @@ class BaseCheckoutTestCase:
|
||||
self.quota_tickets = Quota.objects.create(event=self.event, name='Tickets', size=5)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
category=self.category, default_price=23, admission=True,
|
||||
tax_rule=self.tr19)
|
||||
personalized=True, tax_rule=self.tr19)
|
||||
self.quota_tickets.items.add(self.ticket)
|
||||
self.event.settings.set('timezone', 'UTC')
|
||||
self.event.settings.set('attendee_names_asked', False)
|
||||
@@ -987,6 +987,31 @@ class CheckoutTestCase(BaseCheckoutTestCase, TestCase):
|
||||
cr1 = CartPosition.objects.get(id=cr1.id)
|
||||
self.assertEqual(cr1.attendee_name, 'Peter')
|
||||
|
||||
def test_attendee_name_not_required_if_ticket_unpersonalized(self):
|
||||
self.event.settings.set('attendee_names_asked', True)
|
||||
self.event.settings.set('attendee_names_required', True)
|
||||
self.ticket.personalized = False
|
||||
self.ticket.save()
|
||||
with scopes_disabled():
|
||||
cr1 = CartPosition.objects.create(
|
||||
event=self.event, cart_id=self.session_key, item=self.ticket,
|
||||
price=23, expires=now() + timedelta(minutes=10)
|
||||
)
|
||||
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
|
||||
doc = BeautifulSoup(response.content.decode(), "lxml")
|
||||
self.assertEqual(len(doc.select('input[name="%s-attendee_name_parts_0"]' % cr1.id)), 0)
|
||||
|
||||
# Accepted request
|
||||
response = self.client.post('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), {
|
||||
'email': 'admin@localhost'
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
|
||||
with scopes_disabled():
|
||||
cr1 = CartPosition.objects.get(id=cr1.id)
|
||||
self.assertEqual(cr1.attendee_name, None)
|
||||
|
||||
def test_attendee_name_scheme(self):
|
||||
self.event.settings.set('attendee_names_asked', True)
|
||||
self.event.settings.set('attendee_names_required', True)
|
||||
@@ -4522,6 +4547,7 @@ class CustomerCheckoutTestCase(BaseCheckoutTestCase, TestCase):
|
||||
self.ticket.require_membership = True
|
||||
self.ticket.require_membership_types.add(mtype)
|
||||
self.ticket.admission = True
|
||||
self.ticket.personalized = True
|
||||
self.ticket.save()
|
||||
self.event.settings.attendee_names_asked = True
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ class BaseOrdersTest(TestCase):
|
||||
self.quota_tickets = Quota.objects.create(event=self.event, name='Tickets', size=5)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
category=self.category, default_price=23,
|
||||
admission=True)
|
||||
admission=True, personalized=True)
|
||||
self.quota_tickets.items.add(self.ticket)
|
||||
self.event.settings.set('attendee_names_asked', True)
|
||||
self.question = Question.objects.create(question='Foo', type=Question.TYPE_STRING, event=self.event,
|
||||
|
||||
Reference in New Issue
Block a user