Enabled asynchronous cart/order actions

This commit is contained in:
Raphael Michel
2015-10-04 19:54:17 +02:00
parent 4c6b292968
commit c4638a3402
28 changed files with 572 additions and 196 deletions

View File

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

View File

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

View File

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

View File

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