Orders API: Add check_quotas to orders/change and PATCH/POST orderpositions query params (#5323)

* Orders API: Add check_quotas to orders/change and PATCH/POST orderpositions query params

* Refs #5323: Checkstyle fix

Forgot tu run fkale8 after implementing unit tests oops

* Refs #5323: Fix unit tests and fix of the previous ones

* Refs #5323: PR review
This commit is contained in:
Luca Sorace "Stranck
2025-08-13 16:15:05 +02:00
committed by GitHub
parent 160f1c2e62
commit d14f7fb108
4 changed files with 509 additions and 3 deletions

View File

@@ -1204,6 +1204,106 @@ def test_position_update_change_item_no_quota(token_client, organizer, event, or
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_item_empty_quota(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
op = order.positions.first()
payload = {
'item': item2.pk,
}
assert op.item != item2
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_item_no_quota_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
op = order.positions.first()
payload = {
'item': item2.pk,
}
assert op.item != item2
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=false'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_item_empty_quota_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
op = order.positions.first()
payload = {
'item': item2.pk,
}
assert op.item != item2
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=false'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 200
op.refresh_from_db()
assert op.item == item2
@pytest.mark.django_db
def test_position_update_change_item_no_quota_check_quota_true(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
op = order.positions.first()
payload = {
'item': item2.pk,
}
assert op.item != item2
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=true'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_item_empty_quota_check_quota_true(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
op = order.positions.first()
payload = {
'item': item2.pk,
}
assert op.item != item2
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=true'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_item_variation(token_client, organizer, event, order, quota):
with scopes_disabled():
@@ -1318,6 +1418,49 @@ def test_position_update_change_subevent_quota_empty(token_client, organizer, ev
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_subevent_quota_empty_check_quota_false(token_client, organizer, event, order, quota, item, subevent):
with scopes_disabled():
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
q2 = se2.quotas.create(name="foo", size=0, event=event)
q2.items.add(item)
op = order.positions.first()
op.subevent = subevent
op.save()
payload = {
'subevent': se2.pk,
}
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=false'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 200
op.refresh_from_db()
assert op.subevent == se2
@pytest.mark.django_db
def test_position_update_change_subevent_quota_empty_check_quota_true(token_client, organizer, event, order, quota, item, subevent):
with scopes_disabled():
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
q2 = se2.quotas.create(name="foo", size=0, event=event)
q2.items.add(item)
op = order.positions.first()
op.subevent = subevent
op.save()
payload = {
'subevent': se2.pk,
}
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/?check_quotas=true'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_update_change_seat(token_client, organizer, event, order, quota, item, seat):
with scopes_disabled():
@@ -1600,6 +1743,85 @@ def test_position_add_quota_empty(token_client, organizer, event, order, quota,
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_add_no_quota(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
assert order.positions.count() == 1
payload = {
'order': order.code,
'item': item2.pk,
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/'.format(
organizer.slug, event.slug,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_add_no_quota_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
assert order.positions.count() == 1
payload = {
'order': order.code,
'item': item2.pk,
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/?check_quotas=false'.format(
organizer.slug, event.slug,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_add_quota_empty_check_quota_false(token_client, organizer, event, order, quota, item):
with scopes_disabled():
assert order.positions.count() == 1
quota.size = 1
quota.save()
payload = {
'order': order.code,
'item': item.pk,
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/?check_quotas=false'.format(
organizer.slug, event.slug,
), format='json', data=payload
)
assert resp.status_code == 201
with scopes_disabled():
assert order.positions.count() == 2
op = order.positions.last()
assert op.item == item
assert op.price == item.default_price
assert op.positionid == 3
@pytest.mark.django_db
def test_position_add_quota_empty_check_quota_true(token_client, organizer, event, order, quota, item):
with scopes_disabled():
assert order.positions.count() == 1
quota.size = 1
quota.save()
payload = {
'order': order.code,
'item': item.pk,
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/?check_quotas=true'.format(
organizer.slug, event.slug,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_position_add_seat(token_client, organizer, event, order, quota, item, seat):
with scopes_disabled():
@@ -1803,6 +2025,283 @@ def test_order_change_patch(token_client, organizer, event, order, quota):
assert order.total == Decimal('109.44')
@pytest.mark.django_db
def test_order_change_patch_no_quota(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
p = order.positions.first()
payload = {
'patch_positions': [
{
'position': p.pk,
'body': {
'item': item2.pk,
'price': '99.44',
},
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_patch_no_quota_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
p = order.positions.first()
payload = {
'patch_positions': [
{
'position': p.pk,
'body': {
'item': item2.pk,
'price': '99.44',
},
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=false'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_patch_quota_empty(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
p = order.positions.first()
payload = {
'patch_positions': [
{
'position': p.pk,
'body': {
'item': item2.pk,
'price': '99.44',
},
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_patch_quota_empty_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
p = order.positions.first()
payload = {
'patch_positions': [
{
'position': p.pk,
'body': {
'item': item2.pk,
'price': '99.44',
},
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=false'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 200
with scopes_disabled():
p.refresh_from_db()
assert p.price == Decimal('99.44')
assert p.item == item2
@pytest.mark.django_db
def test_order_change_patch_quota_empty_check_quota_true(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
p = order.positions.first()
payload = {
'patch_positions': [
{
'position': p.pk,
'body': {
'item': item2.pk,
'price': '99.44',
},
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=true'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_create_position(token_client, organizer, event, order, quota, item):
with scopes_disabled():
assert order.positions.count() == 1
payload = {
'create_positions': [
{
'item': item.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 200
with scopes_disabled():
assert order.positions.count() == 2
op = order.positions.last()
assert op.item == item
assert op.price == item.default_price
assert op.positionid == 3
@pytest.mark.django_db
def test_order_change_create_position_no_quota(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
payload = {
'create_positions': [
{
'item': item2.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_create_position_no_quota_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
payload = {
'create_positions': [
{
'item': item2.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=false'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_create_position_quota_empty(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
payload = {
'create_positions': [
{
'item': item2.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_create_position_quota_empty_check_quota_false(token_client, organizer, event, order):
with scopes_disabled():
assert order.positions.count() == 1
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
payload = {
'create_positions': [
{
'item': item2.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=false'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 200
with scopes_disabled():
assert order.positions.count() == 2
op = order.positions.last()
assert op.item == item2
assert op.price == item2.default_price
assert op.positionid == 3
@pytest.mark.django_db
def test_order_change_create_position_quota_empty_check_quota_true(token_client, organizer, event, order):
with scopes_disabled():
item2 = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="No Quota", size=0)
q.items.add(item2)
q.save()
payload = {
'create_positions': [
{
'item': item2.pk,
},
]
}
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/change/?check_quotas=true'.format(
organizer.slug, event.slug, order.code,
), format='json', data=payload
)
assert resp.status_code == 400
assert 'quota' in str(resp.data)
@pytest.mark.django_db
def test_order_change_cancel_and_create(token_client, organizer, event, order, quota, item):
with scopes_disabled():