New check-in features (#3022)

This commit is contained in:
Raphael Michel
2023-02-09 09:46:46 +01:00
committed by GitHub
parent 7b0d07065f
commit 6902725f3c
69 changed files with 1606 additions and 183 deletions

View File

@@ -131,6 +131,9 @@ TEST_ORDERPOSITION1_RES = {
"country": None,
"state": None,
"subevent": None,
"valid_from": None,
"valid_until": None,
"blocked": None,
"pseudonymization_id": "ABCDEFGHKL",
}
@@ -163,6 +166,9 @@ TEST_ORDERPOSITION2_RES = {
"country": None,
"state": None,
"subevent": None,
"valid_from": None,
"valid_until": None,
"blocked": None,
"pseudonymization_id": "BACDEFGHKL",
}
@@ -195,6 +201,9 @@ TEST_ORDERPOSITION3_RES = {
"country": None,
"state": None,
"subevent": None,
"valid_from": None,
"valid_until": None,
"blocked": None,
"pseudonymization_id": "FOOBAR12345",
}

View File

@@ -168,6 +168,9 @@ TEST_ORDERPOSITION1_RES = {
"country": None,
"state": None,
"subevent": None,
"valid_from": None,
"valid_until": None,
"blocked": None,
"pseudonymization_id": "ABCDEFGHKL",
}

View File

@@ -378,6 +378,7 @@ def test_item_detail_variations(token_client, organizer, event, team, item):
"active": True,
"description": None,
"position": 0,
"checkin_attention": False,
"require_approval": False,
"require_membership": False,
"require_membership_hidden": False,
@@ -551,6 +552,7 @@ def test_item_create_with_variation(token_client, organizer, event, item, catego
},
"active": True,
"require_approval": True,
"checkin_attention": False,
"require_membership": False,
"require_membership_hidden": False,
"require_membership_types": [],
@@ -1291,6 +1293,7 @@ TEST_VARIATIONS_RES = {
"position": 0,
"default_price": None,
"price": "23.00",
"checkin_attention": False,
"require_approval": False,
"require_membership": False,
"require_membership_hidden": False,
@@ -1311,6 +1314,7 @@ TEST_VARIATIONS_UPDATE = {
"description": None,
"position": 1,
"default_price": "20.0",
"checkin_attention": False,
"require_approval": False,
"require_membership": False,
"require_membership_hidden": False,

View File

@@ -255,6 +255,7 @@ def test_order_update_allowed_fields(token_client, organizer, event, order):
organizer.slug, event.slug, order.code
), format='json', data={
'comment': 'Here is a comment',
'valid_if_pending': True,
'custom_followup_at': '2021-06-12',
'checkin_attention': True,
'email': 'foo@bar.com',
@@ -283,6 +284,7 @@ def test_order_update_allowed_fields(token_client, organizer, event, order):
assert order.email == 'foo@bar.com'
assert order.phone == '+4962219999'
assert order.locale == 'de'
assert order.valid_if_pending
assert order.invoice_address.company == "This is my company name"
assert order.invoice_address.name_cached == "John Doe"
assert order.invoice_address.name_parts == {'_legacy': 'John Doe'}
@@ -540,6 +542,64 @@ def test_position_regenerate_secrets(token_client, organizer, event, order):
assert ps != p.secret
@pytest.mark.django_db
def test_position_manage_blocks(token_client, organizer, event, order):
with scopes_disabled():
p = order.positions.first()
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/add_block/'.format(
organizer.slug, event.slug, p.pk,
), format='json', data={
'name': 'invalid'
}
)
assert resp.status_code == 400
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/add_block/'.format(
organizer.slug, event.slug, p.pk,
), format='json', data={
'name': 'admin'
}
)
assert resp.status_code == 200
p.refresh_from_db()
assert p.blocked == ['admin']
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/add_block/'.format(
organizer.slug, event.slug, p.pk,
), format='json', data={
'name': 'api:custom'
}
)
assert resp.status_code == 200
p.refresh_from_db()
assert p.blocked == ['admin', 'api:custom']
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/remove_block/'.format(
organizer.slug, event.slug, p.pk,
), format='json', data={
'name': 'api:custom'
}
)
assert resp.status_code == 200
p.refresh_from_db()
assert p.blocked == ['admin']
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/remove_block/'.format(
organizer.slug, event.slug, p.pk,
), format='json', data={
'name': 'admin'
}
)
assert resp.status_code == 200
p.refresh_from_db()
assert p.blocked is None
@pytest.mark.django_db
def test_order_resend_link(token_client, organizer, event, order):
djmail.outbox = []
@@ -1614,6 +1674,8 @@ def test_position_add_and_set_info(token_client, organizer, event, order, questi
'order': order.code,
'item': item.pk,
'attendee_name': 'John Doe',
'valid_from': '2022-12-12T12:12:12+00:00',
'valid_until': '2022-12-12T13:12:12+00:00',
'answers': [
{
'question': question.pk,
@@ -1635,6 +1697,27 @@ def test_position_add_and_set_info(token_client, organizer, event, order, questi
assert op.positionid == 3
assert op.attendee_name == 'John Doe'
assert op.answers.count() == 1
assert op.valid_from.isoformat() == '2022-12-12T12:12:12+00:00'
assert op.valid_until.isoformat() == '2022-12-12T13:12:12+00:00'
@pytest.mark.django_db
def test_position_update_validity(token_client, organizer, event, order, quota, item, subevent):
with scopes_disabled():
op = order.positions.get()
payload = {
'valid_from': '2022-12-12T12:12:12+00:00',
'valid_until': '2022-12-12T13:12:12+00:00',
}
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(
organizer.slug, event.slug, op.pk
), format='json', data=payload
)
assert resp.status_code == 200
op.refresh_from_db()
assert op.valid_from.isoformat() == '2022-12-12T12:12:12+00:00'
assert op.valid_until.isoformat() == '2022-12-12T13:12:12+00:00'
@pytest.mark.django_db

View File

@@ -153,6 +153,7 @@ ORDER_CREATE_PAYLOAD = {
"phone": "+49622112345",
"locale": "en",
"sales_channel": "web",
"valid_if_pending": True,
"fees": [
{
"fee_type": "payment",
@@ -223,6 +224,7 @@ def test_order_create(token_client, organizer, event, item, quota, question):
assert o.total == Decimal('23.25')
assert o.status == Order.STATUS_PENDING
assert o.sales_channel == "web"
assert o.valid_if_pending
assert not o.testmode
with scopes_disabled():
@@ -295,6 +297,7 @@ def test_order_create_simulate(token_client, organizer, event, item, quota, ques
'datetime': None,
'payment_date': None,
'payment_provider': None,
'valid_if_pending': True,
'fees': [
{
'id': 0,
@@ -345,6 +348,9 @@ def test_order_create_simulate(token_client, organizer, event, item, quota, ques
'discount': None,
'checkins': [],
'downloads': [],
"valid_from": None,
"valid_until": None,
"blocked": None,
'answers': [
{'question': question.pk, 'answer': 'L', 'question_identifier': 'ABC',
'options': [opt.pk],
@@ -413,13 +419,13 @@ def test_order_create_positionids_addons_simulated(token_client, organizer, even
'street': None, 'zipcode': None, 'city': None, 'country': None, 'state': None, 'attendee_email': None,
'voucher': None, 'tax_rate': '0.00', 'tax_value': '0.00', 'discount': None,
'addon_to': None, 'subevent': None, 'checkins': [], 'downloads': [], 'answers': [], 'tax_rule': None,
'pseudonymization_id': 'PREVIEW', 'seat': None, 'canceled': False},
'pseudonymization_id': 'PREVIEW', 'seat': None, 'canceled': False, 'valid_from': None, 'valid_until': None, 'blocked': None},
{'id': 0, 'order': '', 'positionid': 2, 'item': item.pk, 'variation': None, 'price': '23.00',
'attendee_name': 'Peter', 'attendee_name_parts': {'full_name': 'Peter', '_scheme': 'full'}, 'company': None,
'street': None, 'zipcode': None, 'city': None, 'country': None, 'state': None, 'attendee_email': None,
'voucher': None, 'tax_rate': '0.00', 'tax_value': '0.00', 'discount': None,
'addon_to': 1, 'subevent': None, 'checkins': [], 'downloads': [], 'answers': [], 'tax_rule': None,
'pseudonymization_id': 'PREVIEW', 'seat': None, 'canceled': False}
'pseudonymization_id': 'PREVIEW', 'seat': None, 'canceled': False, 'valid_from': None, 'valid_until': None, 'blocked': None}
]

View File

@@ -173,6 +173,9 @@ TEST_ORDERPOSITION_RES = {
"city": None,
"country": None,
"state": None,
"valid_from": None,
"valid_until": None,
"blocked": None,
"answers": [
{
"question": 1,
@@ -271,6 +274,7 @@ TEST_ORDER_RES = {
"vat_id_validated": True
},
"require_approval": False,
"valid_if_pending": False,
"positions": [TEST_ORDERPOSITION_RES],
"downloads": [],
"payments": TEST_PAYMENTS_RES,
@@ -1752,6 +1756,22 @@ def test_revoked_secret_list(token_client, organizer, event):
assert [res] == resp.data['results']
@pytest.mark.django_db
def test_blocked_secret_list(token_client, organizer, event):
r = event.blocked_secrets.create(secret="abcd", blocked=True)
res = {
"id": r.id,
"secret": "abcd",
"blocked": True,
"updated": r.updated.isoformat().replace("+00:00", "Z")
}
resp = token_client.get('/api/v1/organizers/{}/events/{}/blockedsecrets/'.format(
organizer.slug, event.slug,
))
assert resp.status_code == 200
assert [res] == resp.data['results']
@pytest.mark.django_db
def test_pdf_data(token_client, organizer, event, order, django_assert_max_num_queries):
# order detail

View File

@@ -61,6 +61,8 @@ event_permission_sub_urls = [
('patch', 'can_change_event_settings', 'settings/', 200),
('get', 'can_view_orders', 'revokedsecrets/', 200),
('get', 'can_view_orders', 'revokedsecrets/1/', 404),
('get', 'can_view_orders', 'blockedsecrets/', 200),
('get', 'can_view_orders', 'blockedsecrets/1/', 404),
('get', 'can_view_orders', 'orders/', 200),
('get', 'can_view_orders', 'orderpositions/', 200),
('delete', 'can_change_orders', 'orderpositions/1/', 404),