From 06ffa0bcd53dc136a63e9cc9deac0fb93bd6bdec Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 17 Feb 2022 17:33:52 +0100 Subject: [PATCH] API: Fix creation of items with required membership types --- src/pretix/api/serializers/item.py | 3 +++ src/tests/api/conftest.py | 6 ++++++ src/tests/api/test_items.py | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index 5985841a20..82d3f7148f 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -251,9 +251,12 @@ class ItemSerializer(I18nAwareModelSerializer): bundles_data = validated_data.pop('bundles') if 'bundles' in validated_data else {} meta_data = validated_data.pop('meta_data', None) picture = validated_data.pop('picture', None) + require_membership_types = validated_data.pop('require_membership_types', []) item = Item.objects.create(**validated_data) if picture: item.picture.save(os.path.basename(picture.name), picture) + if require_membership_types: + item.require_membership_types.add(*require_membership_types) for variation_data in variations_data: require_membership_types = variation_data.pop('require_membership_types', []) diff --git a/src/tests/api/conftest.py b/src/tests/api/conftest.py index 95d0e79fc8..860d77c3d1 100644 --- a/src/tests/api/conftest.py +++ b/src/tests/api/conftest.py @@ -213,4 +213,10 @@ def item(event): return event.items.create(name='foo', default_price=3) +@pytest.fixture +@scopes_disabled() +def membership_type(organizer): + return organizer.membership_types.create(name='foo') + + utils.setup_databases = scopes_disabled()(utils.setup_databases) diff --git a/src/tests/api/test_items.py b/src/tests/api/test_items.py index 5a3317a10c..cd3432958d 100644 --- a/src/tests/api/test_items.py +++ b/src/tests/api/test_items.py @@ -434,7 +434,7 @@ def test_item_detail_bundles(token_client, organizer, event, team, item, categor @pytest.mark.django_db -def test_item_create(token_client, organizer, event, item, category, taxrule): +def test_item_create(token_client, organizer, event, item, category, taxrule, membership_type): resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), { @@ -462,6 +462,7 @@ def test_item_create(token_client, organizer, event, item, category, taxrule): "max_per_order": None, "checkin_attention": False, "has_variations": True, + "require_membership_types": [membership_type.pk], "meta_data": { "day": "Wednesday" } @@ -472,6 +473,7 @@ def test_item_create(token_client, organizer, event, item, category, taxrule): 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'} + assert Item.objects.get(pk=resp.data['id']).require_membership_types.count() == 1 @pytest.mark.django_db