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:
Martin Gross
2020-02-26 15:06:25 +01:00
committed by GitHub
parent dd1e5fa929
commit 76aaf61e19
22 changed files with 573 additions and 25 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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):