From b8f8e49ccecbc824d42005b9297a4b8a13baa4e3 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 23 Sep 2026 19:01:52 +0200 Subject: [PATCH] API: Add additional tests for modifying meta data (Z#23247634) --- src/tests/api/conftest.py | 9 +++++ src/tests/api/test_events.py | 67 +++++++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/src/tests/api/conftest.py b/src/tests/api/conftest.py index a4d617b22a..01179e669e 100644 --- a/src/tests/api/conftest.py +++ b/src/tests/api/conftest.py @@ -61,6 +61,15 @@ def meta_prop(organizer): return organizer.meta_properties.create(name="type", default="Concert") +@pytest.fixture +@scopes_disabled() +def meta_prop_choices(organizer): + return organizer.meta_properties.create(name="department", default="A", choices=[ + {"key": "A", "label": {"en": "Group A"}}, + {"key": "B", "label": {"en": "Group B"}}, + ]) + + @pytest.fixture @scopes_disabled() def event(organizer, meta_prop): diff --git a/src/tests/api/test_events.py b/src/tests/api/test_events.py index 00b2659910..fc93ea9442 100644 --- a/src/tests/api/test_events.py +++ b/src/tests/api/test_events.py @@ -703,7 +703,7 @@ def test_event_delete_with_clone(token_client, organizer, event, meta_prop): @pytest.mark.django_db -def test_event_update(token_client, organizer, event, item, meta_prop): +def test_event_update(token_client, team, organizer, event, item, meta_prop, meta_prop_choices): resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), { @@ -782,6 +782,26 @@ def test_event_update(token_client, organizer, event, item, meta_prop): property__name=meta_prop.name, value="Workshop" ).exists() + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), + { + "meta_data": { + meta_prop.name: "Workshop", + meta_prop_choices.name: "B" + } + }, + format='json' + ) + assert resp.status_code == 200 + assert resp.data["meta_data"] == { + meta_prop.name: "Workshop", + meta_prop_choices.name: "B" + } + with scopes_disabled(): + assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( + property__name=meta_prop_choices.name, value="B" + ).exists() + resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), { @@ -796,6 +816,51 @@ def test_event_update(token_client, organizer, event, item, meta_prop): property__name=meta_prop.name ).exists() + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), + { + "meta_data": { + meta_prop_choices.name: "invalid" + } + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.content.decode() == '{"meta_data":["Meta data property \'department\' does not allow value \'invalid\'."]}' + + meta_prop_choices.protected = True + meta_prop_choices.save() + team.all_organizer_permissions = False + team.limit_organizer_permissions = {} + team.save() + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), + { + "meta_data": { + meta_prop_choices.name: "A" + } + }, + format='json' + ) + assert resp.status_code == 200 # silently ignored + assert resp.data["meta_data"] == {} + + team.all_organizer_permissions = True + team.save() + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), + { + "meta_data": { + meta_prop_choices.name: "A" + } + }, + format='json' + ) + assert resp.status_code == 200 + assert resp.data["meta_data"] == { + meta_prop_choices.name: "A" + } + resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), {