Compare commits

...

3 Commits

Author SHA1 Message Date
Raphael Michel
c1416fbdb8 Bump version to 3.0.1 2019-08-16 12:28:06 +02:00
Raphael Michel
1693affba4 Widget builder: explicit encoding for file reading 2019-08-16 12:27:13 +02:00
Raphael Michel
43d3eb3fe2 Order creation API: Do not consume expired carts 2019-08-16 12:26:40 +02:00
4 changed files with 34 additions and 3 deletions

View File

@@ -1 +1 @@
__version__ = "3.0.0"
__version__ = "3.0.1"

View File

@@ -631,7 +631,9 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
delete_cps = []
quota_avail_cache = {}
if consume_carts:
for cp in CartPosition.objects.filter(event=self.context['event'], cart_id__in=consume_carts):
for cp in CartPosition.objects.filter(
event=self.context['event'], cart_id__in=consume_carts, expires__gt=now()
):
quotas = (cp.variation.quotas.filter(subevent=cp.subevent)
if cp.variation else cp.item.quotas.filter(subevent=cp.subevent))
for quota in quotas:

View File

@@ -115,7 +115,7 @@ def generate_widget_js(lang):
]
for fname in files:
f = finders.find(fname)
with open(f, 'r') as fp:
with open(f, 'r', encoding='utf-8') as fp:
code.append(fp.read())
if settings.DEBUG:

View File

@@ -2439,6 +2439,35 @@ def test_order_create_quota_consume_cart(token_client, organizer, event, item, q
assert not CartPosition.objects.filter(pk=cr.pk).exists()
@pytest.mark.django_db
def test_order_create_quota_consume_cart_expired(token_client, organizer, event, item, quota, question):
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
res['positions'][0]['item'] = item.pk
res['positions'][0]['answers'][0]['question'] = question.pk
with scopes_disabled():
cr = CartPosition.objects.create(
event=event, cart_id="uxLJBUMEcnxOLI2EuxLYN1hWJq9GKu4yWL9FEgs2m7M0vdFi@api", item=item,
price=23,
expires=now() - datetime.timedelta(hours=3)
)
quota.size = 0
quota.save()
res['consume_carts'] = [cr.cart_id]
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug
), format='json', data=res
)
assert resp.status_code == 400
assert resp.data == {
'positions': [
{'item': ['There is not enough quota available on quota "Budget Quota" to perform the operation.']},
]
}
@pytest.mark.django_db
def test_order_create_free(token_client, organizer, event, item, quota, question):
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)