mirror of
https://github.com/pretix/pretix.git
synced 2026-05-03 14:54:04 +00:00
Add meta_data for items (#1576)
* PoC for ItemMetaProperties/Values * Missing is_valid * ItemMetaProperties/Values in editable via API, cloneable * Tests * Add Docs * Fix import order * Fix another import sorting... * Typeahead for ItemMetaValues * Test for editing event-objects * Fix typeahead permission checks * Further access restriction Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
This commit is contained in:
@@ -38,6 +38,7 @@ def event(organizer, meta_prop):
|
||||
is_public=True
|
||||
)
|
||||
e.meta_values.create(property=meta_prop, value="Conference")
|
||||
e.item_meta_properties.create(name="day", default="Monday")
|
||||
e.settings.timezone = 'Europe/Berlin'
|
||||
return e
|
||||
|
||||
|
||||
@@ -80,7 +80,10 @@ TEST_EVENT_RES = {
|
||||
'plugins': [
|
||||
'pretix.plugins.banktransfer',
|
||||
'pretix.plugins.ticketoutputpdf'
|
||||
]
|
||||
],
|
||||
'item_meta_properties': {
|
||||
'day': 'Monday',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -507,6 +510,35 @@ def test_event_update(token_client, organizer, event, item, meta_prop):
|
||||
assert resp.status_code == 400
|
||||
assert resp.content.decode() == '{"meta_data":["Meta data property \'test\' does not exist."]}'
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
|
||||
{
|
||||
"item_meta_properties": {
|
||||
"Foo": "Bar"
|
||||
}
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
with scopes_disabled():
|
||||
assert organizer.events.get(slug=resp.data['slug']).item_meta_properties.filter(
|
||||
name="Foo", default="Bar"
|
||||
).exists()
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
|
||||
{
|
||||
"item_meta_properties": {
|
||||
}
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
with scopes_disabled():
|
||||
assert not organizer.events.get(slug=resp.data['slug']).item_meta_properties.filter(
|
||||
name="Foo"
|
||||
).exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_event_test_mode(token_client, organizer, event):
|
||||
|
||||
@@ -198,7 +198,9 @@ def test_category_delete(token_client, organizer, event, category3, item):
|
||||
|
||||
@pytest.fixture
|
||||
def item(event):
|
||||
return event.items.create(name="Budget Ticket", default_price=23)
|
||||
item = event.items.create(name="Budget Ticket", default_price=23)
|
||||
item.meta_values.create(property=event.item_meta_properties.first(), value="Tuesday")
|
||||
return item
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -244,7 +246,10 @@ TEST_ITEM_RES = {
|
||||
"addons": [],
|
||||
"bundles": [],
|
||||
"show_quota_left": None,
|
||||
"original_price": None
|
||||
"original_price": None,
|
||||
"meta_data": {
|
||||
"day": "Tuesday"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -403,13 +408,17 @@ def test_item_create(token_client, organizer, event, item, category, taxrule):
|
||||
"min_per_order": None,
|
||||
"max_per_order": None,
|
||||
"checkin_attention": False,
|
||||
"has_variations": True
|
||||
"has_variations": True,
|
||||
"meta_data": {
|
||||
"day": "Wednesday"
|
||||
}
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
assert Item.objects.get(pk=resp.data['id']).sales_channels == ["web", "pretixpos"]
|
||||
assert Item.objects.get(pk=resp.data['id']).meta_data == {'day': 'Wednesday'}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -939,6 +948,31 @@ def test_item_update(token_client, organizer, event, item, category, item2, cate
|
||||
assert resp.content.decode() == '{"non_field_errors":["Updating add-ons, bundles, or variations via PATCH/PUT is not supported. Please use ' \
|
||||
'the dedicated nested endpoint."]}'
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk),
|
||||
{
|
||||
"meta_data": {
|
||||
"day": "Friday"
|
||||
}
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
with scopes_disabled():
|
||||
assert Item.objects.get(pk=item.pk).meta_data == {'day': 'Friday'}
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk),
|
||||
{
|
||||
"meta_data": {
|
||||
"foo": "bar"
|
||||
}
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
assert resp.content.decode() == '{"meta_data":["Item meta data property \'foo\' does not exist."]}'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_item_update_with_variation(token_client, organizer, event, item):
|
||||
|
||||
Reference in New Issue
Block a user