API: Fix carts with addons/bundles not being created correctly

This commit is contained in:
Raphael Michel
2022-11-08 18:02:59 +01:00
parent ceeb69856b
commit 9cef65f359
3 changed files with 99 additions and 0 deletions

View File

@@ -1120,6 +1120,7 @@ def test_cartpos_create_bulk_with_addon(token_client, organizer, event, item, qu
assert cp1a.item == addon_item
assert not cp1a.is_bundled
assert cp1a.attendee_name == "Peter's friend"
assert cp1a.cart_id == cp1.cart_id
@pytest.mark.django_db
@@ -1210,6 +1211,7 @@ def test_cartpos_create_bulk_with_bundled(token_client, organizer, event, item,
cp1a = cp1.addons.get()
assert cp1a.pk == resp.data['results'][0]['data']['bundled'][0]['id']
assert cp1a.item == bundled_item
assert cp1a.cart_id == cp1.cart_id
assert cp1a.is_bundled
assert cp1a.attendee_name == "Peter's friend"

View File

@@ -2612,3 +2612,98 @@ def test_order_create_pdf_data(token_client, organizer, event, item, quota, ques
)
assert resp.status_code == 201
assert 'secret' in resp.data['positions'][0]['pdf_data']
@pytest.mark.django_db
def test_create_cart_and_consume_cart_with_addons(token_client, organizer, event, item, quota, question):
with scopes_disabled():
addon_cat = event.categories.create(name='Addons')
addon_item = event.items.create(name='Workshop', default_price=2, category=addon_cat)
item.addons.create(addon_category=addon_cat)
q = event.quotas.create(name="Addon Quota", size=1)
q.items.add(addon_item)
res = {
'cart_id': 'aaa@api',
'item': item.pk,
'variation': None,
'price': '23.00',
'attendee_name_parts': {'full_name': 'Peter'},
'attendee_email': None,
'addon_to': None,
'subevent': None,
'expires': (now() + datetime.timedelta(days=1)).isoformat(),
'includes_tax': True,
'sales_channel': 'web',
'answers': [],
'addons': [
{
'item': addon_item.pk,
'variation': None,
'price': '1.00',
'attendee_name_parts': {'full_name': 'Peter\'s friend'},
'attendee_email': None,
'subevent': None,
'includes_tax': True,
'answers': []
}
],
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/cartpositions/bulk_create/'.format(
organizer.slug, event.slug
), format='json', data=[
res
]
)
assert resp.status_code == 200
assert len(resp.data['results']) == 1
assert resp.data['results'][0]['success']
assert resp.data['results'][0]['data']['addons']
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
res['positions'] = [
{
"positionid": 1,
"item": item.pk,
"variation": None,
"price": "23.00",
"attendee_name_parts": {"full_name": "Peter"},
"attendee_email": None,
"addon_to": None,
"answers": [],
"subevent": None
},
{
"positionid": 2,
"item": addon_item.pk,
"variation": None,
"price": "23.00",
"attendee_name_parts": {"full_name": "Peter"},
"attendee_email": None,
"addon_to": 1,
"answers": [],
"subevent": None
}
]
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 "Addon Quota" to perform the operation.']},
]
}
res['consume_carts'] = ['aaa@api']
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug
), format='json', data=res
)
assert resp.status_code == 201