mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Enabled asynchronous cart/order actions
This commit is contained in:
@@ -5,7 +5,7 @@ from django.utils.timezone import now
|
||||
|
||||
from pretix.base.models import Event, Organizer
|
||||
from pretix.base.payment import FreeOrderProvider
|
||||
from pretix.base.services.orders import place_order
|
||||
from pretix.base.services.orders import _create_order
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -22,9 +22,9 @@ def event():
|
||||
def test_expiry_days(event):
|
||||
today = now()
|
||||
event.settings.set('payment_term_days', 5)
|
||||
order = place_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
assert (order.expires - today).days == 5
|
||||
|
||||
|
||||
@@ -33,12 +33,12 @@ def test_expiry_last(event):
|
||||
today = now()
|
||||
event.settings.set('payment_term_days', 5)
|
||||
event.settings.set('payment_term_last', now() + timedelta(days=3))
|
||||
order = place_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
assert (order.expires - today).days == 3
|
||||
event.settings.set('payment_term_last', now() + timedelta(days=7))
|
||||
order = place_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
dt=today, payment_provider=FreeOrderProvider(event),
|
||||
locale='de')
|
||||
assert (order.expires - today).days == 5
|
||||
|
||||
@@ -217,23 +217,20 @@ class CartTest(CartTestMixin, TestCase):
|
||||
self.assertGreater(cp.expires, now())
|
||||
|
||||
def test_renew_expired_successfully(self):
|
||||
CartPosition.objects.create(
|
||||
cp1 = CartPosition.objects.create(
|
||||
event=self.event, session=self.session_key, item=self.ticket,
|
||||
price=23, expires=now() - timedelta(minutes=10)
|
||||
)
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'variation_%s_%s' % (self.shirt.identity, self.shirt_red.identity): '1'
|
||||
}, follow=True)
|
||||
objs = list(CartPosition.objects.current.filter(session=self.session_key, event=self.event))
|
||||
self.assertEqual(len(objs), 1)
|
||||
self.assertEqual(objs[0].item, self.ticket)
|
||||
self.assertIsNone(objs[0].variation)
|
||||
self.assertEqual(objs[0].price, 23)
|
||||
self.assertGreater(objs[0].expires, now())
|
||||
obj = CartPosition.objects.current.get(identity=cp1.identity)
|
||||
self.assertEqual(obj.item, self.ticket)
|
||||
self.assertIsNone(obj.variation)
|
||||
self.assertEqual(obj.price, 23)
|
||||
self.assertGreater(obj.expires, now())
|
||||
|
||||
def test_renew_questions(self):
|
||||
"""
|
||||
Currently fails. See: https://github.com/pretix/pretix/issues/20
|
||||
"""
|
||||
cr1 = CartPosition.objects.create(
|
||||
event=self.event, session=self.session_key, item=self.ticket,
|
||||
price=23, expires=now() - timedelta(minutes=10)
|
||||
@@ -247,23 +244,24 @@ class CartTest(CartTestMixin, TestCase):
|
||||
cartposition=cr1, question=q1, answer='23'
|
||||
))
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'item_' + self.ticket.identity: '1',
|
||||
}, follow=True)
|
||||
objs = list(CartPosition.objects.current.filter(session=self.session_key, event=self.event))
|
||||
self.assertEqual(len(objs), 1)
|
||||
self.assertEqual(objs[0].answers.get(question=q1).answer, '23')
|
||||
obj = CartPosition.objects.current.get(identity=cr1.identity)
|
||||
self.assertEqual(obj.answers.get(question=q1).answer, '23')
|
||||
|
||||
def test_renew_expired_failed(self):
|
||||
self.quota_tickets.size = 0
|
||||
self.quota_tickets.save()
|
||||
CartPosition.objects.create(
|
||||
cp1 = CartPosition.objects.create(
|
||||
event=self.event, session=self.session_key, item=self.ticket,
|
||||
price=23, expires=now() - timedelta(minutes=10)
|
||||
)
|
||||
response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'item_' + self.ticket.identity: '1',
|
||||
}, follow=True)
|
||||
doc = BeautifulSoup(response.rendered_content)
|
||||
self.assertIn('no longer available', doc.select('.alert-danger')[0].text)
|
||||
self.assertFalse(CartPosition.objects.current.filter(session=self.session_key, event=self.event).exists())
|
||||
self.assertFalse(CartPosition.objects.current.filter(identity=cp1.identity).exists())
|
||||
|
||||
def test_restriction_ok(self):
|
||||
self.event.plugins = 'tests.testdummy'
|
||||
|
||||
@@ -12,7 +12,6 @@ from pretix.base.models import (
|
||||
|
||||
|
||||
class EventTestMixin:
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.orga = Organizer.objects.create(name='CCC', slug='ccc')
|
||||
@@ -23,7 +22,6 @@ class EventTestMixin:
|
||||
|
||||
|
||||
class EventMiddlewareTest(EventTestMixin, BrowserTest):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.driver.implicitly_wait(10)
|
||||
@@ -38,7 +36,6 @@ class EventMiddlewareTest(EventTestMixin, BrowserTest):
|
||||
|
||||
|
||||
class ItemDisplayTest(EventTestMixin, BrowserTest):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.driver.implicitly_wait(10)
|
||||
@@ -141,6 +138,11 @@ class ItemDisplayTest(EventTestMixin, BrowserTest):
|
||||
|
||||
|
||||
class DeadlineTest(EventTestMixin, TestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
||||
self.item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=False)
|
||||
q.items.add(self.item)
|
||||
|
||||
def test_not_yet_started(self):
|
||||
self.event.presale_start = now() + datetime.timedelta(days=1)
|
||||
@@ -153,6 +155,9 @@ class DeadlineTest(EventTestMixin, TestCase):
|
||||
self.assertNotIn('checkout-button-row', response.rendered_content)
|
||||
response = self.client.post(
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
||||
{
|
||||
'item_' + self.item.identity: '1',
|
||||
},
|
||||
follow=True
|
||||
)
|
||||
self.assertIn('alert-danger', response.rendered_content)
|
||||
@@ -169,6 +174,9 @@ class DeadlineTest(EventTestMixin, TestCase):
|
||||
self.assertNotIn('checkout-button-row', response.rendered_content)
|
||||
response = self.client.post(
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
||||
{
|
||||
'item_' + self.item.identity: '1'
|
||||
},
|
||||
follow=True
|
||||
)
|
||||
self.assertIn('alert-danger', response.rendered_content)
|
||||
@@ -185,7 +193,10 @@ class DeadlineTest(EventTestMixin, TestCase):
|
||||
self.assertNotIn('alert-info', response.rendered_content)
|
||||
self.assertIn('checkout-button-row', response.rendered_content)
|
||||
response = self.client.post(
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug)
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
||||
{
|
||||
'item_' + self.item.identity: '1'
|
||||
}
|
||||
)
|
||||
self.assertNotEqual(response.status_code, 403)
|
||||
|
||||
@@ -200,6 +211,9 @@ class DeadlineTest(EventTestMixin, TestCase):
|
||||
self.assertNotIn('alert-info', response.rendered_content)
|
||||
self.assertIn('checkout-button-row', response.rendered_content)
|
||||
response = self.client.post(
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug)
|
||||
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
||||
{
|
||||
'item_' + self.item.identity: '1'
|
||||
}
|
||||
)
|
||||
self.assertNotEqual(response.status_code, 403)
|
||||
|
||||
@@ -7,7 +7,7 @@ from django.utils.timezone import now
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, ItemCategory, ItemVariation, Order, OrderPosition, Organizer,
|
||||
Property, PropertyValue, Question, Quota, User,
|
||||
Property, PropertyValue, Question, Quota,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user