diff --git a/src/pretix/api/auth/device.py b/src/pretix/api/auth/device.py index 8bc3ee2ec..9e813dce8 100644 --- a/src/pretix/api/auth/device.py +++ b/src/pretix/api/auth/device.py @@ -1,4 +1,5 @@ from django.contrib.auth.models import AnonymousUser +from django_scopes import scopes_disabled from rest_framework import exceptions from rest_framework.authentication import TokenAuthentication @@ -12,7 +13,8 @@ class DeviceTokenAuthentication(TokenAuthentication): def authenticate_credentials(self, key): model = self.get_model() try: - device = model.objects.select_related('organizer').get(api_token=key) + with scopes_disabled(): + device = model.objects.select_related('organizer').get(api_token=key) except model.DoesNotExist: raise exceptions.AuthenticationFailed('Invalid token.') diff --git a/src/pretix/api/middleware.py b/src/pretix/api/middleware.py index 6c74c9c70..fa77fba10 100644 --- a/src/pretix/api/middleware.py +++ b/src/pretix/api/middleware.py @@ -1,12 +1,12 @@ import json -from django.urls import resolve -from django_scopes import scope from hashlib import sha1 from django.conf import settings from django.db import transaction from django.http import HttpRequest, HttpResponse, JsonResponse +from django.urls import resolve from django.utils.timezone import now +from django_scopes import scope from rest_framework import status from pretix.api.models import ApiCall diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 79e07138f..4558eaca6 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -25,7 +25,6 @@ from pretix.base.services.checkin import ( ) from pretix.helpers.database import FixedOrderBy - with scopes_disabled(): class CheckinListFilter(FilterSet): class Meta: @@ -148,10 +147,11 @@ class CheckinListViewSet(viewsets.ModelViewSet): return Response(response) -class CheckinOrderPositionFilter(OrderPositionFilter): +with scopes_disabled(): + class CheckinOrderPositionFilter(OrderPositionFilter): - def has_checkin_qs(self, queryset, name, value): - return queryset.filter(last_checked_in__isnull=not value) + def has_checkin_qs(self, queryset, name, value): + return queryset.filter(last_checked_in__isnull=not value) class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet): diff --git a/src/pretix/api/views/event.py b/src/pretix/api/views/event.py index 1443fbda7..67fb1ae7a 100644 --- a/src/pretix/api/views/event.py +++ b/src/pretix/api/views/event.py @@ -19,7 +19,6 @@ from pretix.base.models import ( from pretix.base.models.event import SubEvent from pretix.helpers.dicts import merge_dicts - with scopes_disabled(): class EventFilter(FilterSet): is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs') diff --git a/src/pretix/api/views/item.py b/src/pretix/api/views/item.py index b1153e4a6..a06088e56 100644 --- a/src/pretix/api/views/item.py +++ b/src/pretix/api/views/item.py @@ -22,7 +22,6 @@ from pretix.base.models import ( ) from pretix.helpers.dicts import merge_dicts - with scopes_disabled(): class ItemFilter(FilterSet): tax_rate = django_filters.CharFilter(method='tax_rate_qs') diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index 7e8e8c795..689835a25 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -51,7 +51,6 @@ from pretix.base.signals import ( ) from pretix.base.templatetags.money import money_filter - with scopes_disabled(): class OrderFilter(FilterSet): email = django_filters.CharFilter(field_name='email', lookup_expr='iexact') @@ -552,25 +551,25 @@ with scopes_disabled(): | Q(order__email__icontains=value) ) - def has_checkin_qs(self, queryset, name, value): - return queryset.filter(checkins__isnull=not value) + def has_checkin_qs(self, queryset, name, value): + return queryset.filter(checkins__isnull=not value) - def attendee_name_qs(self, queryset, name, value): - return queryset.filter(Q(attendee_name_cached__iexact=value) | Q(addon_to__attendee_name_cached__iexact=value)) + def attendee_name_qs(self, queryset, name, value): + return queryset.filter(Q(attendee_name_cached__iexact=value) | Q(addon_to__attendee_name_cached__iexact=value)) - class Meta: - model = OrderPosition - fields = { - 'item': ['exact', 'in'], - 'variation': ['exact', 'in'], - 'secret': ['exact'], - 'order__status': ['exact', 'in'], - 'addon_to': ['exact', 'in'], - 'subevent': ['exact', 'in'], - 'pseudonymization_id': ['exact'], - 'voucher__code': ['exact'], - 'voucher': ['exact'], - } + class Meta: + model = OrderPosition + fields = { + 'item': ['exact', 'in'], + 'variation': ['exact', 'in'], + 'secret': ['exact'], + 'order__status': ['exact', 'in'], + 'addon_to': ['exact', 'in'], + 'subevent': ['exact', 'in'], + 'pseudonymization_id': ['exact'], + 'voucher__code': ['exact'], + 'voucher': ['exact'], + } class OrderPositionViewSet(mixins.DestroyModelMixin, viewsets.ReadOnlyModelViewSet): diff --git a/src/pretix/api/views/voucher.py b/src/pretix/api/views/voucher.py index 6db0a4d2c..d897cc226 100644 --- a/src/pretix/api/views/voucher.py +++ b/src/pretix/api/views/voucher.py @@ -16,7 +16,6 @@ from rest_framework.response import Response from pretix.api.serializers.voucher import VoucherSerializer from pretix.base.models import Voucher - with scopes_disabled(): class VoucherFilter(FilterSet): active = BooleanFilter(method='filter_active') diff --git a/src/pretix/api/views/waitinglist.py b/src/pretix/api/views/waitinglist.py index ec6c61a01..d189b950b 100644 --- a/src/pretix/api/views/waitinglist.py +++ b/src/pretix/api/views/waitinglist.py @@ -11,7 +11,6 @@ from pretix.api.serializers.waitinglist import WaitingListSerializer from pretix.base.models import WaitingListEntry from pretix.base.models.waitinglist import WaitingListException - with scopes_disabled(): class WaitingListFilter(FilterSet): has_voucher = django_filters.rest_framework.BooleanFilter(method='has_voucher_qs') diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 1d6bd1c6f..7697d7ca3 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -2,7 +2,6 @@ import string import uuid from collections import OrderedDict from datetime import datetime, time, timedelta -from django_scopes import ScopedManager from operator import attrgetter import pytz @@ -18,6 +17,7 @@ from django.utils.crypto import get_random_string from django.utils.functional import cached_property from django.utils.timezone import make_aware, now from django.utils.translation import ugettext_lazy as _ +from django_scopes import ScopedManager from i18nfield.fields import I18nCharField, I18nTextField from pretix.base.models.base import LoggedModel diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 05446c9b1..35841618c 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -3,7 +3,6 @@ import uuid from collections import Counter from datetime import date, datetime, time from decimal import Decimal, DecimalException -from django_scopes import ScopedManager from typing import Tuple import dateutil.parser @@ -18,6 +17,7 @@ from django.utils.functional import cached_property from django.utils.timezone import is_naive, make_aware, now from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from django_countries.fields import Country +from django_scopes import ScopedManager from i18nfield.fields import I18nCharField, I18nTextField from pretix.base.models import fields @@ -160,10 +160,10 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False): q = ( # IMPORTANT: If this is updated, also update the ItemVariation query # in models/event.py: EventMixin.annotated() - Q(active=True) - & Q(Q(available_from__isnull=True) | Q(available_from__lte=now())) - & Q(Q(available_until__isnull=True) | Q(available_until__gte=now())) - & Q(sales_channels__contains=channel) & Q(require_bundling=False) + Q(active=True) + & Q(Q(available_from__isnull=True) | Q(available_from__lte=now())) + & Q(Q(available_until__isnull=True) | Q(available_until__gte=now())) + & Q(sales_channels__contains=channel) & Q(require_bundling=False) ) if not allow_addons: q &= Q(Q(category__isnull=True) | Q(category__is_addon=False)) @@ -391,7 +391,6 @@ class Item(LoggedModel): # !!! Attention: If you add new fields here, also add them to the copying code in # pretix/control/forms/item.py if applicable. - class Meta: verbose_name = _("Product") verbose_name_plural = _("Products") diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 239a8b38e..d98ba157c 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -6,7 +6,6 @@ import os import string from datetime import datetime, time, timedelta from decimal import Decimal -from django_scopes import ScopedManager from typing import Any, Dict, List, Union import dateutil @@ -27,6 +26,7 @@ from django.utils.functional import cached_property from django.utils.timezone import make_aware, now from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from django_countries.fields import Country, CountryField +from django_scopes import ScopedManager from i18nfield.strings import LazyI18nString from jsonfallback.fields import FallbackJSONField diff --git a/src/pretix/control/forms/checkin.py b/src/pretix/control/forms/checkin.py index 72f6de7aa..574030863 100644 --- a/src/pretix/control/forms/checkin.py +++ b/src/pretix/control/forms/checkin.py @@ -1,7 +1,9 @@ from django import forms from django.urls import reverse from django.utils.translation import pgettext_lazy -from django_scopes.forms import SafeModelMultipleChoiceField, SafeModelChoiceField +from django_scopes.forms import ( + SafeModelChoiceField, SafeModelMultipleChoiceField, +) from pretix.base.models.checkin import CheckinList from pretix.control.forms.widgets import Select2 diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index a4eaeec3d..f01119a7b 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -6,7 +6,9 @@ from django.urls import reverse from django.utils.translation import ( pgettext_lazy, ugettext as __, ugettext_lazy as _, ) -from django_scopes.forms import SafeModelMultipleChoiceField, SafeModelChoiceField +from django_scopes.forms import ( + SafeModelChoiceField, SafeModelMultipleChoiceField, +) from i18nfield.forms import I18nFormField, I18nTextarea from pretix.base.channels import get_all_sales_channels diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index 4c01f06f1..9523a9fbe 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -1,4 +1,3 @@ -from django_scopes.forms import SafeModelChoiceField from urllib.parse import urlparse from django import forms @@ -7,6 +6,7 @@ from django.core.exceptions import ValidationError from django.core.validators import RegexValidator from django.utils.safestring import mark_safe from django.utils.translation import pgettext_lazy, ugettext_lazy as _ +from django_scopes.forms import SafeModelChoiceField from i18nfield.forms import I18nFormField, I18nTextarea from pretix.api.models import WebHook diff --git a/src/pretix/control/middleware.py b/src/pretix/control/middleware.py index 30554e6ea..1e92c2dde 100644 --- a/src/pretix/control/middleware.py +++ b/src/pretix/control/middleware.py @@ -1,4 +1,3 @@ -from django_scopes import scope from urllib.parse import quote, urljoin, urlparse from django.conf import settings @@ -6,9 +5,9 @@ from django.contrib.auth import REDIRECT_FIELD_NAME, logout from django.http import Http404 from django.shortcuts import get_object_or_404, redirect, resolve_url from django.urls import get_script_prefix, resolve, reverse -from django.utils.deprecation import MiddlewareMixin from django.utils.encoding import force_str from django.utils.translation import ugettext as _ +from django_scopes import scope from hijack.templatetags.hijack_tags import is_hijacked from pretix.base.models import Event, Organizer diff --git a/src/pretix/plugins/pretixdroid/forms.py b/src/pretix/plugins/pretixdroid/forms.py index fe93d7536..c0eb3e9e0 100644 --- a/src/pretix/plugins/pretixdroid/forms.py +++ b/src/pretix/plugins/pretixdroid/forms.py @@ -1,7 +1,9 @@ from django import forms from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from django_scopes.forms import SafeModelMultipleChoiceField, SafeModelChoiceField +from django_scopes.forms import ( + SafeModelChoiceField, SafeModelMultipleChoiceField, +) from pretix.control.forms.widgets import Select2 from pretix.plugins.pretixdroid.models import AppConfiguration diff --git a/src/pretix/presale/utils.py b/src/pretix/presale/utils.py index 90e45fbb6..b240f93ed 100644 --- a/src/pretix/presale/utils.py +++ b/src/pretix/presale/utils.py @@ -1,5 +1,4 @@ import warnings -from django_scopes import scope from importlib import import_module from urllib.parse import urljoin @@ -9,6 +8,7 @@ from django.http import Http404 from django.shortcuts import redirect from django.urls import resolve from django.utils.translation import ugettext_lazy as _ +from django_scopes import scope from pretix.base.middleware import LocaleMiddleware from pretix.base.models import Event, Organizer diff --git a/src/tests/api/conftest.py b/src/tests/api/conftest.py index cc96cf8ba..d61b86351 100644 --- a/src/tests/api/conftest.py +++ b/src/tests/api/conftest.py @@ -17,16 +17,19 @@ def client(): @pytest.fixture +@scopes_disabled() def organizer(): return Organizer.objects.create(name='Dummy', slug='dummy') @pytest.fixture +@scopes_disabled() def meta_prop(organizer): return organizer.meta_properties.create(name="type", default="Concert") @pytest.fixture +@scopes_disabled() def event(organizer, meta_prop): e = Event.objects.create( organizer=organizer, name='Dummy', slug='dummy', @@ -39,6 +42,7 @@ def event(organizer, meta_prop): @pytest.fixture +@scopes_disabled() def event2(organizer, meta_prop): e = Event.objects.create( organizer=organizer, name='Dummy2', slug='dummy2', @@ -50,6 +54,7 @@ def event2(organizer, meta_prop): @pytest.fixture +@scopes_disabled() def event3(organizer, meta_prop): e = Event.objects.create( organizer=organizer, name='Dummy3', slug='dummy3', @@ -61,6 +66,7 @@ def event3(organizer, meta_prop): @pytest.fixture +@scopes_disabled() def team(organizer): return Team.objects.create( organizer=organizer, @@ -75,6 +81,7 @@ def team(organizer): @pytest.fixture +@scopes_disabled() def device(organizer): return Device.objects.create( organizer=organizer, @@ -91,6 +98,7 @@ def user(): @pytest.fixture +@scopes_disabled() def user_client(client, team, user): team.can_view_orders = True team.can_view_vouchers = True @@ -102,6 +110,7 @@ def user_client(client, team, user): @pytest.fixture +@scopes_disabled() def token_client(client, team): team.can_view_orders = True team.can_view_vouchers = True @@ -119,6 +128,7 @@ def device_client(client, device): @pytest.fixture +@scopes_disabled() def subevent(event, meta_prop): event.has_subevents = True event.save() @@ -129,6 +139,7 @@ def subevent(event, meta_prop): @pytest.fixture +@scopes_disabled() def subevent2(event2, meta_prop): event2.has_subevents = True event2.save() @@ -139,11 +150,13 @@ def subevent2(event2, meta_prop): @pytest.fixture +@scopes_disabled() def taxrule(event): return event.tax_rules.create(name="VAT", rate=19) @pytest.fixture +@scopes_disabled() def taxrule2(event2): return event2.tax_rules.create(name="VAT", rate=25) diff --git a/src/tests/api/test_auth.py b/src/tests/api/test_auth.py index 4c2b3af6c..d418728c9 100644 --- a/src/tests/api/test_auth.py +++ b/src/tests/api/test_auth.py @@ -13,7 +13,6 @@ def test_no_auth(client): def test_session_auth_no_teams(client, user): client.login(email=user.email, password='dummy') resp = client.get('/api/v1/organizers/') - print(resp.data) assert resp.status_code == 200 assert len(resp.data['results']) == 0 diff --git a/src/tests/api/test_cart.py b/src/tests/api/test_cart.py index 7f07674e1..9852e1a92 100644 --- a/src/tests/api/test_cart.py +++ b/src/tests/api/test_cart.py @@ -5,6 +5,7 @@ from unittest import mock import pytest from django.utils.timezone import now +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import Question @@ -175,7 +176,8 @@ def test_cartpos_create(token_client, organizer, event, item, quota, question): ), format='json', data=res ) assert resp.status_code == 201 - cp = CartPosition.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cp = CartPosition.objects.get(pk=resp.data['id']) assert cp.price == Decimal('23.00') assert cp.item == item assert cp.attendee_name_parts == {'full_name': 'Peter'} @@ -193,7 +195,8 @@ def test_cartpos_create_name_optional(token_client, organizer, event, item, quot ), format='json', data=res ) assert resp.status_code == 201 - cp = CartPosition.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cp = CartPosition.objects.get(pk=resp.data['id']) assert cp.price == Decimal('23.00') assert cp.item == item assert cp.attendee_name_parts == {} @@ -217,7 +220,8 @@ def test_cartpos_create_legacy_name(token_client, organizer, event, item, quota, ), format='json', data=res ) assert resp.status_code == 201 - cp = CartPosition.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cp = CartPosition.objects.get(pk=resp.data['id']) assert cp.price == Decimal('23.00') assert cp.item == item assert cp.attendee_name_parts == {'_legacy': 'Peter'} @@ -247,7 +251,8 @@ def test_cartpos_cart_id_optional(token_client, organizer, event, item, quota, q ), format='json', data=res ) assert resp.status_code == 201 - cp = CartPosition.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cp = CartPosition.objects.get(pk=resp.data['id']) assert cp.price == Decimal('23.00') assert cp.item == item assert len(cp.cart_id) > 48 @@ -300,7 +305,8 @@ def test_cartpos_create_item_validation(token_client, organizer, event, item, it assert resp.status_code == 400 assert resp.data == {'item': ['The specified item does not belong to this event.']} - var2 = item2.variations.create(value="A") + with scopes_disabled(): + var2 = item2.variations.create(value="A") res['item'] = item.pk res['variation'] = var2.pk @@ -312,7 +318,8 @@ def test_cartpos_create_item_validation(token_client, organizer, event, item, it assert resp.status_code == 400 assert resp.data == {'non_field_errors': ['You cannot specify a variation for this item.']} - var1 = item.variations.create(value="A") + with scopes_disabled(): + var1 = item.variations.create(value="A") res['item'] = item.pk res['variation'] = var1.pk resp = token_client.post( @@ -361,7 +368,8 @@ def test_cartpos_expires_optional(token_client, organizer, event, item, quota, q ), format='json', data=res ) assert resp.status_code == 201 - cp = CartPosition.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cp = CartPosition.objects.get(pk=resp.data['id']) assert cp.price == Decimal('23.00') assert cp.item == item assert cp.expires - now() > datetime.timedelta(minutes=25) @@ -410,7 +418,8 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, assert resp.data == { 'answers': [{'non_field_errors': ['You need to specify options if the question is of a choice type.']}]} - question.options.create(answer="L") + with scopes_disabled(): + question.options.create(answer="L") res['answers'][0]['options'] = [ question.options.first().pk, question.options.last().pk, @@ -445,8 +454,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.question == question assert answ.answer == "XL, L" @@ -460,8 +470,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "3.45" question.type = Question.TYPE_NUMBER @@ -486,8 +497,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "True" question.type = Question.TYPE_BOOLEAN @@ -499,8 +511,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "False" question.type = Question.TYPE_BOOLEAN @@ -523,8 +536,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "2018-05-14" question.type = Question.TYPE_DATE @@ -548,8 +562,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "2018-05-14 13:00:00+00:00" question.type = Question.TYPE_DATETIME @@ -574,8 +589,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - pos = CartPosition.objects.get(pk=resp.data['id']) - answ = pos.answers.first() + with scopes_disabled(): + pos = CartPosition.objects.get(pk=resp.data['id']) + answ = pos.answers.first() assert answ.answer == "13:00:00" question.type = Question.TYPE_TIME diff --git a/src/tests/api/test_checkin.py b/src/tests/api/test_checkin.py index bf53da390..7c1c615e1 100644 --- a/src/tests/api/test_checkin.py +++ b/src/tests/api/test_checkin.py @@ -6,6 +6,7 @@ from unittest import mock import pytest from django.utils.timezone import now from django_countries.fields import Country +from django_scopes import scopes_disabled from i18nfield.strings import LazyI18nString from pytz import UTC @@ -157,7 +158,8 @@ def test_list_list(token_client, organizer, event, clist, item, subevent): resp = token_client.get( '/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) assert [res] == resp.data['results'] - se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) + with scopes_disabled(): + se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) resp = token_client.get( '/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) assert [] == resp.data['results'] @@ -188,10 +190,11 @@ def test_list_create(token_client, organizer, event, item, item_on_wrong_event): format='json' ) assert resp.status_code == 201 - cl = CheckinList.objects.get(pk=resp.data['id']) - assert cl.name == "VIP" - assert cl.limit_products.count() == 1 - assert not cl.all_products + with scopes_disabled(): + cl = CheckinList.objects.get(pk=resp.data['id']) + assert cl.name == "VIP" + assert cl.limit_products.count() == 1 + assert not cl.all_products resp = token_client.post( '/api/v1/organizers/{}/events/{}/checkinlists/'.format(organizer.slug, event.slug), @@ -271,18 +274,20 @@ def test_list_update(token_client, organizer, event, clist): format='json' ) assert resp.status_code == 200 - cl = CheckinList.objects.get(pk=resp.data['id']) + with scopes_disabled(): + cl = CheckinList.objects.get(pk=resp.data['id']) assert cl.name == "VIP" @pytest.mark.django_db def test_list_all_items_positions(token_client, organizer, event, clist, clist_all, item, other_item, order): - p1 = dict(TEST_ORDERPOSITION1_RES) - p1["id"] = order.positions.first().pk - p1["item"] = item.pk - p2 = dict(TEST_ORDERPOSITION2_RES) - p2["id"] = order.positions.last().pk - p2["item"] = other_item.pk + with scopes_disabled(): + p1 = dict(TEST_ORDERPOSITION1_RES) + p1["id"] = order.positions.first().pk + p1["item"] = item.pk + p2 = dict(TEST_ORDERPOSITION2_RES) + p2["id"] = order.positions.last().pk + p2["item"] = other_item.pk # All items resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/?ordering=positionid'.format( @@ -292,7 +297,8 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a assert [p1, p2] == resp.data['results'] # Check-ins on other list ignored - order.positions.first().checkins.create(list=clist) + with scopes_disabled(): + order.positions.first().checkins.create(list=clist) resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/?ordering=positionid'.format( organizer.slug, event.slug, clist_all.pk )) @@ -305,7 +311,8 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a assert [] == resp.data['results'] # Only checked in - c = order.positions.first().checkins.create(list=clist_all) + with scopes_disabled(): + c = order.positions.first().checkins.create(list=clist_all) p1['checkins'] = [ { 'list': clist_all.pk, @@ -341,7 +348,8 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a # Order by checkin date time.sleep(1) - c = order.positions.last().checkins.create(list=clist_all) + with scopes_disabled(): + c = order.positions.last().checkins.create(list=clist_all) p2['checkins'] = [ { 'list': clist_all.pk, @@ -388,7 +396,8 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a @pytest.mark.django_db def test_list_limited_items_positions(token_client, organizer, event, clist, item, order): p1 = dict(TEST_ORDERPOSITION1_RES) - p1["id"] = order.positions.first().pk + with scopes_disabled(): + p1["id"] = order.positions.first().pk p1["item"] = item.pk # All items @@ -402,12 +411,13 @@ def test_list_limited_items_positions(token_client, organizer, event, clist, ite @pytest.mark.django_db def test_list_limited_items_position_detail(token_client, organizer, event, clist, item, order): p1 = dict(TEST_ORDERPOSITION1_RES) - p1["id"] = order.positions.first().pk + with scopes_disabled(): + p1["id"] = order.positions.first().pk p1["item"] = item.pk # All items resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p1["id"] )) assert resp.status_code == 200 assert p1 == resp.data @@ -415,12 +425,13 @@ def test_list_limited_items_position_detail(token_client, organizer, event, clis @pytest.mark.django_db def test_status(token_client, organizer, event, clist_all, item, other_item, order): - op = order.positions.first() - var1 = item.variations.create(value="XS") - var2 = item.variations.create(value="S") - op.variation = var1 - op.save() - Checkin.objects.create(position=op, list=clist_all) + with scopes_disabled(): + op = order.positions.first() + var1 = item.variations.create(value="XS") + var2 = item.variations.create(value="S") + op.variation = var1 + op.save() + Checkin.objects.create(position=op, list=clist_all) resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/status/'.format( organizer.slug, event.slug, clist_all.pk, )) @@ -464,21 +475,25 @@ def test_status(token_client, organizer, event, clist_all, item, other_item, ord def test_custom_datetime(token_client, organizer, clist, event, order): dt = now() - datetime.timedelta(days=1) dt = dt.replace(microsecond=0) + with scopes_disabled(): + p = order.positions.first().pk resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p ), { 'datetime': dt.isoformat() }, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' - assert Checkin.objects.last().datetime == dt + with scopes_disabled(): + assert Checkin.objects.last().datetime == dt @pytest.mark.django_db def test_name_fallback(token_client, organizer, clist, event, order): order.invoice_address.name_parts = {'_legacy': 'Paul'} order.invoice_address.save() - op = order.positions.first() + with scopes_disabled(): + op = order.positions.first() op.attendee_name_cached = None op.attendee_name_parts = {} op.save() @@ -493,8 +508,10 @@ def test_name_fallback(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_by_secret(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().secret + organizer.slug, event.slug, clist.pk, p.secret ), {}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -502,13 +519,15 @@ def test_by_secret(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_only_once(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'error' @@ -517,13 +536,15 @@ def test_only_once(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_reupload_same_nonce(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'nonce': 'foobar'}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'nonce': 'foobar'}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -531,13 +552,15 @@ def test_reupload_same_nonce(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_multiple_different_list(token_client, organizer, clist, clist_all, event, order): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'nonce': 'foobar'}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist_all.pk, order.positions.first().pk + organizer.slug, event.slug, clist_all.pk, p.pk ), {'nonce': 'baz'}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -545,13 +568,15 @@ def test_multiple_different_list(token_client, organizer, clist, clist_all, even @pytest.mark.django_db def test_forced_multiple(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'force': True}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -559,17 +584,19 @@ def test_forced_multiple(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_require_paid(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() order.status = Order.STATUS_PENDING order.save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'error' assert resp.data['reason'] == 'unpaid' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'ignore_unpaid': True}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'error' @@ -579,14 +606,14 @@ def test_require_paid(token_client, organizer, clist, event, order): clist.save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'error' assert resp.data['reason'] == 'unpaid' resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'ignore_unpaid': True}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -603,88 +630,105 @@ def question(event, item): @pytest.mark.django_db def test_question_number(token_client, organizer, clist, event, order, question): - question[0].options.all().delete() + with scopes_disabled(): + p = order.positions.first() + question[0].options.all().delete() question[0].type = 'N' question[0].save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: "3.24"}}, format='json') - print(resp.data) assert resp.status_code == 201 assert resp.data['status'] == 'ok' - assert order.positions.first().answers.get(question=question[0]).answer == '3.24' + with scopes_disabled(): + assert order.positions.first().answers.get(question=question[0]).answer == '3.24' @pytest.mark.django_db def test_question_choice(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: str(question[1].pk)}}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' - assert order.positions.first().answers.get(question=question[0]).answer == 'M' - assert list(order.positions.first().answers.get(question=question[0]).options.all()) == [question[1]] + with scopes_disabled(): + assert order.positions.first().answers.get(question=question[0]).answer == 'M' + assert list(order.positions.first().answers.get(question=question[0]).options.all()) == [question[1]] @pytest.mark.django_db def test_question_invalid(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: "A"}}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] @pytest.mark.django_db def test_question_required(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() question[0].required = True question[0].save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: ""}}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] @pytest.mark.django_db def test_question_optional(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() question[0].required = False question[0].save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: ""}}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -692,20 +736,24 @@ def test_question_optional(token_client, organizer, clist, event, order, questio @pytest.mark.django_db def test_question_multiple_choice(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() question[0].type = 'M' question[0].save() resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {}, format='json') assert resp.status_code == 400 assert resp.data['status'] == 'incomplete' - assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( - organizer.slug, event.slug, clist.pk, order.positions.first().pk + organizer.slug, event.slug, clist.pk, p.pk ), {'answers': {question[0].pk: "{},{}".format(question[1].pk, question[2].pk)}}, format='json') assert resp.status_code == 201 assert resp.data['status'] == 'ok' - assert order.positions.first().answers.get(question=question[0]).answer == 'M, L' - assert set(order.positions.first().answers.get(question=question[0]).options.all()) == {question[1], question[2]} + with scopes_disabled(): + assert order.positions.first().answers.get(question=question[0]).answer == 'M, L' + assert set(order.positions.first().answers.get(question=question[0]).options.all()) == {question[1], question[2]} diff --git a/src/tests/api/test_events.py b/src/tests/api/test_events.py index f75d45d35..16b60ee94 100644 --- a/src/tests/api/test_events.py +++ b/src/tests/api/test_events.py @@ -5,6 +5,7 @@ from unittest import mock import pytest from django.conf import settings from django_countries.fields import Country +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import Event, InvoiceAddress, Order, OrderPosition @@ -161,11 +162,12 @@ def test_event_create(token_client, organizer, event, meta_prop): format='json' ) assert resp.status_code == 201 - assert not organizer.events.get(slug="2030").testmode - assert organizer.events.get(slug="2030").meta_values.filter( - property__name=meta_prop.name, value="Conference" - ).exists() - assert organizer.events.get(slug="2030").plugins == settings.PRETIX_PLUGINS_DEFAULT + with scopes_disabled(): + assert not organizer.events.get(slug="2030").testmode + assert organizer.events.get(slug="2030").meta_values.filter( + property__name=meta_prop.name, value="Conference" + ).exists() + assert organizer.events.get(slug="2030").plugins == settings.PRETIX_PLUGINS_DEFAULT resp = token_client.post( '/api/v1/organizers/{}/events/'.format(organizer.slug), @@ -278,13 +280,14 @@ def test_event_create_with_clone(token_client, organizer, event, meta_prop): ) assert resp.status_code == 201 - cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030') - assert cloned_event.plugins == 'pretix.plugins.ticketoutputpdf' - assert cloned_event.is_public is False - assert cloned_event.testmode - assert organizer.events.get(slug="2030").meta_values.filter( - property__name=meta_prop.name, value="Conference" - ).exists() + with scopes_disabled(): + cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030') + assert cloned_event.plugins == 'pretix.plugins.ticketoutputpdf' + assert cloned_event.is_public is False + assert cloned_event.testmode + assert organizer.events.get(slug="2030").meta_values.filter( + property__name=meta_prop.name, value="Conference" + ).exists() resp = token_client.post( '/api/v1/organizers/{}/events/{}/clone/'.format(organizer.slug, event.slug), @@ -310,12 +313,13 @@ def test_event_create_with_clone(token_client, organizer, event, meta_prop): ) assert resp.status_code == 201 - cloned_event = Event.objects.get(organizer=organizer.pk, slug='2031') - assert cloned_event.plugins == "pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf" - assert cloned_event.is_public is True - assert organizer.events.get(slug="2031").meta_values.filter( - property__name=meta_prop.name, value="Conference" - ).exists() + with scopes_disabled(): + cloned_event = Event.objects.get(organizer=organizer.pk, slug='2031') + assert cloned_event.plugins == "pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf" + assert cloned_event.is_public is True + assert organizer.events.get(slug="2031").meta_values.filter( + property__name=meta_prop.name, value="Conference" + ).exists() resp = token_client.post( '/api/v1/organizers/{}/events/{}/clone/'.format(organizer.slug, event.slug), @@ -339,8 +343,9 @@ def test_event_create_with_clone(token_client, organizer, event, meta_prop): ) assert resp.status_code == 201 - cloned_event = Event.objects.get(organizer=organizer.pk, slug='2032') - assert cloned_event.plugins == "" + with scopes_disabled(): + cloned_event = Event.objects.get(organizer=organizer.pk, slug='2032') + assert cloned_event.plugins == "" @pytest.mark.django_db @@ -388,11 +393,12 @@ def test_event_update(token_client, organizer, event, item, meta_prop): format='json' ) assert resp.status_code == 200 - event = Event.objects.get(organizer=organizer.pk, slug=resp.data['slug']) - assert event.currency == "DKK" - assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( - property__name=meta_prop.name, value="Conference" - ).exists() + with scopes_disabled(): + event = Event.objects.get(organizer=organizer.pk, slug=resp.data['slug']) + assert event.currency == "DKK" + assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( + property__name=meta_prop.name, value="Conference" + ).exists() resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), @@ -447,9 +453,10 @@ def test_event_update(token_client, organizer, event, item, meta_prop): format='json' ) assert resp.status_code == 200 - assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( - property__name=meta_prop.name, value="Workshop" - ).exists() + with scopes_disabled(): + assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( + property__name=meta_prop.name, value="Workshop" + ).exists() resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), @@ -460,9 +467,10 @@ def test_event_update(token_client, organizer, event, item, meta_prop): format='json' ) assert resp.status_code == 200 - assert not organizer.events.get(slug=resp.data['slug']).meta_values.filter( - property__name=meta_prop.name - ).exists() + with scopes_disabled(): + assert not organizer.events.get(slug=resp.data['slug']).meta_values.filter( + property__name=meta_prop.name + ).exists() resp = token_client.patch( '/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), @@ -598,7 +606,8 @@ def test_event_detail(token_client, organizer, event, team): def test_event_delete(token_client, organizer, event): resp = token_client.delete('/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug)) assert resp.status_code == 204 - assert not organizer.events.filter(pk=event.id).exists() + with scopes_disabled(): + assert not organizer.events.filter(pk=event.id).exists() @pytest.mark.django_db @@ -607,4 +616,5 @@ def test_event_with_order_position_not_delete(token_client, organizer, event, it assert resp.status_code == 403 assert resp.content.decode() == '{"detail":"The event can not be deleted as it already contains orders. Please ' \ 'set \'live\' to false to hide the event and take the shop offline instead."}' - assert organizer.events.filter(pk=event.id).exists() + with scopes_disabled(): + assert organizer.events.filter(pk=event.id).exists() diff --git a/src/tests/api/test_items.py b/src/tests/api/test_items.py index e5547237e..a070e8c5f 100644 --- a/src/tests/api/test_items.py +++ b/src/tests/api/test_items.py @@ -5,6 +5,7 @@ from unittest import mock import pytest from django_countries.fields import Country +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import ( @@ -169,7 +170,8 @@ def test_category_update(token_client, organizer, event, team, category): format='json' ) assert resp.status_code == 200 - assert ItemCategory.objects.get(pk=category.pk).name == {"en": "Test"} + with scopes_disabled(): + assert ItemCategory.objects.get(pk=category.pk).name == {"en": "Test"} @pytest.mark.django_db @@ -189,8 +191,9 @@ def test_category_delete(token_client, organizer, event, category3, item): resp = token_client.delete( '/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event.slug, category3.pk)) assert resp.status_code == 204 - assert not event.categories.filter(pk=category3.id).exists() - assert Item.objects.get(pk=item.pk).category is None + with scopes_disabled(): + assert not event.categories.filter(pk=category3.id).exists() + assert Item.objects.get(pk=item.pk).category is None @pytest.fixture @@ -308,7 +311,8 @@ def test_item_detail(token_client, organizer, event, team, item): @pytest.mark.django_db def test_item_detail_variations(token_client, organizer, event, team, item): - var = item.variations.create(value="Children") + with scopes_disabled(): + var = item.variations.create(value="Children") res = dict(TEST_ITEM_RES) res["id"] = item.pk res["variations"] = [{ @@ -349,8 +353,9 @@ def test_item_detail_addons(token_client, organizer, event, team, item, category @pytest.mark.django_db def test_item_detail_bundles(token_client, organizer, event, team, item, category): - i = event.items.create(name="Included thing", default_price=2) - item.bundles.create(bundled_item=i, count=1, designated_price=2) + with scopes_disabled(): + i = event.items.create(name="Included thing", default_price=2) + item.bundles.create(bundled_item=i, count=1, designated_price=2) res = dict(TEST_ITEM_RES) res["id"] = item.pk @@ -398,7 +403,8 @@ def test_item_create(token_client, organizer, event, item, category, taxrule): format='json' ) assert resp.status_code == 201 - assert Item.objects.get(pk=resp.data['id']).sales_channels == ["web", "pretixpos"] + with scopes_disabled(): + assert Item.objects.get(pk=resp.data['id']).sales_channels == ["web", "pretixpos"] @pytest.mark.django_db @@ -445,9 +451,10 @@ def test_item_create_with_variation(token_client, organizer, event, item, catego format='json' ) assert resp.status_code == 201 - new_item = Item.objects.get(pk=resp.data['id']) - assert new_item.variations.first().value.localize('de') == "Kommentar" - assert new_item.variations.first().value.localize('en') == "Comment" + with scopes_disabled(): + new_item = Item.objects.get(pk=resp.data['id']) + assert new_item.variations.first().value.localize('de') == "Kommentar" + assert new_item.variations.first().value.localize('en') == "Comment" @pytest.mark.django_db @@ -490,10 +497,11 @@ def test_item_create_with_addon(token_client, organizer, event, item, category, format='json' ) assert resp.status_code == 201 - item = Item.objects.get(pk=resp.data['id']) - assert item.addons.first().addon_category == category - assert item.addons.first().max_count == 10 - assert 2 == Item.objects.all().count() + with scopes_disabled(): + item = Item.objects.get(pk=resp.data['id']) + assert item.addons.first().addon_category == category + assert item.addons.first().max_count == 10 + assert 2 == Item.objects.all().count() resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), @@ -534,7 +542,8 @@ def test_item_create_with_addon(token_client, organizer, event, item, category, ) assert resp.status_code == 400 assert resp.content.decode() == '{"addons":["The add-on\'s category must belong to the same event as the item."]}' - assert 2 == Item.objects.all().count() + with scopes_disabled(): + assert 2 == Item.objects.all().count() resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), @@ -575,7 +584,8 @@ def test_item_create_with_addon(token_client, organizer, event, item, category, ) assert resp.status_code == 400 assert resp.content.decode() == '{"addons":["The maximum count needs to be greater than the minimum count."]}' - assert 2 == Item.objects.all().count() + with scopes_disabled(): + assert 2 == Item.objects.all().count() resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), @@ -619,12 +629,14 @@ def test_item_create_with_addon(token_client, organizer, event, item, category, '{"addons":["The minimum count needs to be equal to or greater than zero."]}', '{"addons":[{"min_count":["Ensure this value is greater than or equal to 0."]}]}', # mysql ] - assert 2 == Item.objects.all().count() + with scopes_disabled(): + assert 2 == Item.objects.all().count() @pytest.mark.django_db def test_item_create_with_bundle(token_client, organizer, event, item, category, item2, taxrule): - i = event.items.create(name="Included thing", default_price=2) + with scopes_disabled(): + i = event.items.create(name="Included thing", default_price=2) resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), { @@ -662,8 +674,9 @@ def test_item_create_with_bundle(token_client, organizer, event, item, category, format='json' ) assert resp.status_code == 201 - item = Item.objects.get(pk=resp.data['id']) - b = item.bundles.first() + with scopes_disabled(): + item = Item.objects.get(pk=resp.data['id']) + b = item.bundles.first() assert b.bundled_item == i assert b.bundled_variation is None assert b.count == 2 @@ -708,7 +721,8 @@ def test_item_create_with_bundle(token_client, organizer, event, item, category, assert resp.status_code == 400 assert resp.content.decode() == '{"bundles":["The bundled item must belong to the same event as the item."]}' - v = item2.variations.create(value="foo") + with scopes_disabled(): + v = item2.variations.create(value="foo") resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), { @@ -760,7 +774,8 @@ def test_item_update(token_client, organizer, event, item, category, item2, cate format='json' ) assert resp.status_code == 200 - assert Item.objects.get(pk=item.pk).max_per_order == 2 + with scopes_disabled(): + assert Item.objects.get(pk=item.pk).max_per_order == 2 resp = token_client.patch( '/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk), @@ -896,21 +911,24 @@ def test_item_update_with_addon(token_client, organizer, event, item, category): def test_items_delete(token_client, organizer, event, item): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk)) assert resp.status_code == 204 - assert not event.items.filter(pk=item.id).exists() + with scopes_disabled(): + assert not event.items.filter(pk=item.id).exists() @pytest.mark.django_db def test_items_with_order_position_not_delete(token_client, organizer, event, item, order_position): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk)) assert resp.status_code == 403 - assert event.items.filter(pk=item.id).exists() + with scopes_disabled(): + assert event.items.filter(pk=item.id).exists() @pytest.mark.django_db def test_items_with_cart_position_delete(token_client, organizer, event, item, cart_position): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk)) assert resp.status_code == 204 - assert not event.items.filter(pk=item.id).exists() + with scopes_disabled(): + assert not event.items.filter(pk=item.id).exists() @pytest.fixture @@ -996,7 +1014,8 @@ def test_variations_create(token_client, organizer, event, item, variation): format='json' ) assert resp.status_code == 201 - var = ItemVariation.objects.get(pk=resp.data['id']) + with scopes_disabled(): + var = ItemVariation.objects.get(pk=resp.data['id']) assert var.position == 1 assert var.price == 23.0 @@ -1060,40 +1079,47 @@ def test_variations_update(token_client, organizer, event, item, item3, variatio def test_variations_delete(token_client, organizer, event, item, variations, order): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/variations/{}/'.format(organizer.slug, event.slug, item.pk, variations[0].pk)) assert resp.status_code == 204 - assert not item.variations.filter(pk=variations[0].pk).exists() + with scopes_disabled(): + assert not item.variations.filter(pk=variations[0].pk).exists() @pytest.mark.django_db def test_variations_with_order_position_not_delete(token_client, organizer, event, item, order, variations, order_position): - assert item.variations.filter(pk=variations[0].id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variations[0].id).exists() resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/variations/{}/'.format(organizer.slug, event.slug, item.pk, variations[0].pk)) assert resp.status_code == 403 assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it has already been ordered ' \ 'by a user or currently is in a users\'s cart. Please set the variation as ' \ '\'inactive\' instead."}' - assert item.variations.filter(pk=variations[0].id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variations[0].id).exists() @pytest.mark.django_db def test_variations_with_cart_position_not_delete(token_client, organizer, event, item, variations, cart_position): - assert item.variations.filter(pk=variations[0].id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variations[0].id).exists() resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/variations/{}/'.format(organizer.slug, event.slug, item.pk, variations[0].pk)) assert resp.status_code == 403 assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it has already been ordered ' \ 'by a user or currently is in a users\'s cart. Please set the variation as ' \ '\'inactive\' instead."}' - assert item.variations.filter(pk=variations[0].id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variations[0].id).exists() @pytest.mark.django_db def test_only_variation_not_delete(token_client, organizer, event, item, variation): - assert item.variations.filter(pk=variation.id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variation.id).exists() resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/variations/{}/'.format(organizer.slug, event.slug, item.pk, variation.pk)) assert resp.status_code == 403 assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it is the only variation. ' \ 'Changing a product with variations to a product without variations is not ' \ 'allowed."}' - assert item.variations.filter(pk=variation.id).exists() + with scopes_disabled(): + assert item.variations.filter(pk=variation.id).exists() @pytest.fixture @@ -1144,7 +1170,8 @@ def test_bundles_create(token_client, organizer, event, item, item2, item3): format='json' ) assert resp.status_code == 201 - b = ItemBundle.objects.get(pk=resp.data['id']) + with scopes_disabled(): + b = ItemBundle.objects.get(pk=resp.data['id']) assert b.bundled_item == item3 assert b.bundled_variation is None assert b.designated_price == 1.5 @@ -1176,7 +1203,8 @@ def test_bundles_create(token_client, organizer, event, item, item2, item3): assert resp.status_code == 400 assert resp.content.decode() == '{"non_field_errors":["The bundled item must not be the same item as the bundling one."]}' - item3.bundles.create(bundled_item=item, count=1, designated_price=3) + with scopes_disabled(): + item3.bundles.create(bundled_item=item, count=1, designated_price=3) resp = token_client.post( '/api/v1/organizers/{}/events/{}/items/{}/bundles/'.format(organizer.slug, event.slug, item.pk), { @@ -1201,7 +1229,8 @@ def test_bundles_update(token_client, organizer, event, item, bundle): format='json' ) assert resp.status_code == 200 - a = ItemBundle.objects.get(pk=bundle.pk) + with scopes_disabled(): + a = ItemBundle.objects.get(pk=bundle.pk) assert a.count == 3 @@ -1210,7 +1239,8 @@ def test_bundles_delete(token_client, organizer, event, item, bundle): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/bundles/{}/'.format(organizer.slug, event.slug, item.pk, bundle.pk)) assert resp.status_code == 204 - assert not item.bundles.filter(pk=bundle.id).exists() + with scopes_disabled(): + assert not item.bundles.filter(pk=bundle.id).exists() @pytest.fixture @@ -1270,7 +1300,8 @@ def test_addons_create(token_client, organizer, event, item, category, category2 format='json' ) assert resp.status_code == 201 - addon = ItemAddOn.objects.get(pk=resp.data['id']) + with scopes_disabled(): + addon = ItemAddOn.objects.get(pk=resp.data['id']) assert addon.position == 1 assert addon.addon_category == category @@ -1315,7 +1346,8 @@ def test_addons_update(token_client, organizer, event, item, addon): format='json' ) assert resp.status_code == 200 - a = ItemAddOn.objects.get(pk=addon.pk) + with scopes_disabled(): + a = ItemAddOn.objects.get(pk=addon.pk) assert a.min_count == 100 assert a.max_count == 101 @@ -1337,7 +1369,8 @@ def test_addons_delete(token_client, organizer, event, item, addon): resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug, item.pk, addon.pk)) assert resp.status_code == 204 - assert not item.addons.filter(pk=addon.id).exists() + with scopes_disabled(): + assert not item.addons.filter(pk=addon.id).exists() @pytest.fixture @@ -1372,7 +1405,8 @@ def test_quota_list(token_client, organizer, event, quota, item, subevent): resp = token_client.get( '/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) assert [res] == resp.data['results'] - se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) + with scopes_disabled(): + se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) resp = token_client.get( '/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) assert [] == resp.data['results'] @@ -1404,7 +1438,8 @@ def test_quota_create(token_client, organizer, event, event2, item): format='json' ) assert resp.status_code == 201 - quota = Quota.objects.get(pk=resp.data['id']) + with scopes_disabled(): + quota = Quota.objects.get(pk=resp.data['id']) assert quota.name == "Ticket Quota" assert quota.size == 200 @@ -1550,7 +1585,8 @@ def test_quota_update(token_client, organizer, event, quota, item): format='json' ) assert resp.status_code == 200 - quota = Quota.objects.get(pk=resp.data['id']) + with scopes_disabled(): + quota = Quota.objects.get(pk=resp.data['id']) assert quota.name == "Ticket Quota Update" assert quota.size == 111 assert quota.all_logentries().count() == 1 @@ -1566,7 +1602,8 @@ def test_quota_update_unchanged(token_client, organizer, event, quota, item): format='json' ) assert resp.status_code == 200 - quota = Quota.objects.get(pk=resp.data['id']) + with scopes_disabled(): + quota = Quota.objects.get(pk=resp.data['id']) assert quota.size == 200 assert quota.all_logentries().count() == 0 @@ -1575,7 +1612,8 @@ def test_quota_update_unchanged(token_client, organizer, event, quota, item): def test_quota_delete(token_client, organizer, event, quota): resp = token_client.delete('/api/v1/organizers/{}/events/{}/quotas/{}/'.format(organizer.slug, event.slug, quota.pk)) assert resp.status_code == 204 - assert not event.quotas.filter(pk=quota.id).exists() + with scopes_disabled(): + assert not event.quotas.filter(pk=quota.id).exists() @pytest.mark.django_db @@ -1690,11 +1728,12 @@ def test_question_create(token_client, organizer, event, event2, item): format='json' ) assert resp.status_code == 201 - question = Question.objects.get(pk=resp.data['id']) - assert question.question == "What's your name?" - assert question.type == "S" - assert question.identifier is not None - assert len(question.items.all()) == 1 + with scopes_disabled(): + question = Question.objects.get(pk=resp.data['id']) + assert question.question == "What's your name?" + assert question.type == "S" + assert question.identifier is not None + assert len(question.items.all()) == 1 resp = token_client.post( '/api/v1/organizers/{}/events/{}/questions/'.format(organizer.slug, event2.slug), @@ -1784,7 +1823,8 @@ def test_question_create(token_client, organizer, event, event2, item): format='json' ) assert resp.status_code == 201 - q2 = Question.objects.get(pk=resp.data['id']) + with scopes_disabled(): + q2 = Question.objects.get(pk=resp.data['id']) assert q2.dependency_question == question @@ -1799,14 +1839,16 @@ def test_question_update(token_client, organizer, event, question): format='json' ) assert resp.status_code == 200 - question = Question.objects.get(pk=resp.data['id']) + with scopes_disabled(): + question = Question.objects.get(pk=resp.data['id']) assert question.question == "What's your shoe size?" assert question.type == "N" @pytest.mark.django_db def test_question_update_circular_dependency(token_client, organizer, event, question): - q2 = event.questions.create(question="T-Shirt size", type="B", identifier="FOO", dependency_question=question) + with scopes_disabled(): + q2 = event.questions.create(question="T-Shirt size", type="B", identifier="FOO", dependency_question=question) resp = token_client.patch( '/api/v1/organizers/{}/events/{}/questions/{}/'.format(organizer.slug, event.slug, question.pk), { @@ -1836,7 +1878,8 @@ def test_question_update_options(token_client, organizer, event, question, item) def test_question_delete(token_client, organizer, event, question): resp = token_client.delete('/api/v1/organizers/{}/events/{}/questions/{}/'.format(organizer.slug, event.slug, question.pk)) assert resp.status_code == 204 - assert not event.questions.filter(pk=question.id).exists() + with scopes_disabled(): + assert not event.questions.filter(pk=question.id).exists() TEST_OPTIONS_RES = { @@ -1881,7 +1924,8 @@ def test_options_create(token_client, organizer, event, question): format='json' ) assert resp.status_code == 201 - option = QuestionOption.objects.get(pk=resp.data['id']) + with scopes_disabled(): + option = QuestionOption.objects.get(pk=resp.data['id']) assert option.answer == "A" resp = token_client.post( @@ -1907,7 +1951,8 @@ def test_options_update(token_client, organizer, event, question, option): format='json' ) assert resp.status_code == 200 - a = QuestionOption.objects.get(pk=option.pk) + with scopes_disabled(): + a = QuestionOption.objects.get(pk=option.pk) assert a.answer == "B" @@ -1917,7 +1962,8 @@ def test_options_delete(token_client, organizer, event, question, option): organizer.slug, event.slug, question.pk, option.pk )) assert resp.status_code == 204 - assert not question.options.filter(pk=option.id).exists() + with scopes_disabled(): + assert not question.options.filter(pk=option.id).exists() @pytest.mark.django_db @@ -1948,11 +1994,12 @@ def test_question_create_with_option(token_client, organizer, event, item): format='json' ) assert resp.status_code == 201 - question = Question.objects.get(pk=resp.data['id']) - assert str(question.options.first().answer) == "A" - assert question.options.first().identifier is not None - assert str(question.options.last().answer) == "B" - assert 2 == question.options.count() + with scopes_disabled(): + question = Question.objects.get(pk=resp.data['id']) + assert str(question.options.first().answer) == "A" + assert question.options.first().identifier is not None + assert str(question.options.last().answer) == "B" + assert 2 == question.options.count() resp = token_client.post( '/api/v1/organizers/{}/events/{}/questions/'.format(organizer.slug, event.slug), diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index 077eb242c..1865be74a 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -8,6 +8,7 @@ import pytest from django.core import mail as djmail from django.utils.timezone import now from django_countries.fields import Country +from django_scopes import scopes_disabled from pytz import UTC from stripe.error import APIConnectionError from tests.plugins.stripe.test_provider import MockedCharge @@ -229,7 +230,8 @@ TEST_ORDER_RES = { @pytest.mark.django_db def test_order_list(token_client, organizer, event, order, item, taxrule, question): res = dict(TEST_ORDER_RES) - res["positions"][0]["id"] = order.positions.first().pk + with scopes_disabled(): + res["positions"][0]["id"] = order.positions.first().pk res["positions"][0]["item"] = item.pk res["positions"][0]["answers"][0]["question"] = question.pk res["last_modified"] = order.last_modified.isoformat().replace('+00:00', 'Z') @@ -285,7 +287,8 @@ def test_order_list(token_client, organizer, event, order, item, taxrule, questi @pytest.mark.django_db def test_order_detail(token_client, organizer, event, order, item, taxrule, question): res = dict(TEST_ORDER_RES) - res["positions"][0]["id"] = order.positions.first().pk + with scopes_disabled(): + res["positions"][0]["id"] = order.positions.first().pk res["positions"][0]["item"] = item.pk res["fees"][0]["tax_rule"] = taxrule.pk res["positions"][0]["answers"][0]["question"] = question.pk @@ -338,7 +341,8 @@ def test_payment_confirm(token_client, organizer, event, order): resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/confirm/'.format( organizer.slug, event.slug, order.code ), format='json', data={'force': True}) - p = order.payments.get(local_id=2) + with scopes_disabled(): + p = order.payments.get(local_id=2) assert resp.status_code == 200 assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED @@ -353,7 +357,8 @@ def test_payment_cancel(token_client, organizer, event, order): resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/cancel/'.format( organizer.slug, event.slug, order.code )) - p = order.payments.get(local_id=2) + with scopes_disabled(): + p = order.payments.get(local_id=2) assert resp.status_code == 200 assert p.state == OrderPayment.PAYMENT_STATE_CANCELED @@ -365,7 +370,8 @@ def test_payment_cancel(token_client, organizer, event, order): @pytest.mark.django_db def test_payment_refund_fail(token_client, organizer, event, order, monkeypatch): - order.payments.last().confirm() + with scopes_disabled(): + order.payments.last().confirm() resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/refund/'.format( organizer.slug, event.slug, order.code ), format='json', data={ @@ -424,15 +430,16 @@ def test_payment_refund_success(token_client, organizer, event, order, monkeypat c.refunds.create = refund_create return c - p1 = order.payments.create( - provider='stripe', - state='confirmed', - amount=Decimal('23.00'), - payment_date=order.datetime, - info=json.dumps({ - 'id': 'ch_123345345' - }) - ) + with scopes_disabled(): + p1 = order.payments.create( + provider='stripe', + state='confirmed', + amount=Decimal('23.00'), + payment_date=order.datetime, + info=json.dumps({ + 'id': 'ch_123345345' + }) + ) monkeypatch.setattr("stripe.Charge.retrieve", charge_retr) resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format( organizer.slug, event.slug, order.code, p1.local_id @@ -441,10 +448,11 @@ def test_payment_refund_success(token_client, organizer, event, order, monkeypat 'mark_canceled': False, }) assert resp.status_code == 200 - r = order.refunds.get(local_id=resp.data['local_id']) - assert r.provider == "stripe" - assert r.state == OrderRefund.REFUND_STATE_DONE - assert r.source == OrderRefund.REFUND_SOURCE_ADMIN + with scopes_disabled(): + r = order.refunds.get(local_id=resp.data['local_id']) + assert r.provider == "stripe" + assert r.state == OrderRefund.REFUND_STATE_DONE + assert r.source == OrderRefund.REFUND_SOURCE_ADMIN @pytest.mark.django_db @@ -457,15 +465,16 @@ def test_payment_refund_unavailable(token_client, organizer, event, order, monke c.refunds.create = refund_create return c - p1 = order.payments.create( - provider='stripe', - state='confirmed', - amount=Decimal('23.00'), - payment_date=order.datetime, - info=json.dumps({ - 'id': 'ch_123345345' - }) - ) + with scopes_disabled(): + p1 = order.payments.create( + provider='stripe', + state='confirmed', + amount=Decimal('23.00'), + payment_date=order.datetime, + info=json.dumps({ + 'id': 'ch_123345345' + }) + ) monkeypatch.setattr("stripe.Charge.retrieve", charge_retr) resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format( organizer.slug, event.slug, order.code, p1.local_id @@ -475,7 +484,8 @@ def test_payment_refund_unavailable(token_client, organizer, event, order, monke }) assert resp.status_code == 400 assert resp.data == {'detail': 'External error: We had trouble communicating with Stripe. Please try again and contact support if the problem persists.'} - r = order.refunds.last() + with scopes_disabled(): + r = order.refunds.last() assert r.provider == "stripe" assert r.state == OrderRefund.REFUND_STATE_FAILED assert r.source == OrderRefund.REFUND_SOURCE_ADMIN @@ -499,13 +509,15 @@ def test_refund_detail(token_client, organizer, event, order): @pytest.mark.django_db def test_refund_done(token_client, organizer, event, order): - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) r.state = 'transit' r.save() resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/done/'.format( organizer.slug, event.slug, order.code )) - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) assert resp.status_code == 200 assert r.state == OrderRefund.REFUND_STATE_DONE @@ -517,12 +529,14 @@ def test_refund_done(token_client, organizer, event, order): @pytest.mark.django_db def test_refund_process_mark_refunded(token_client, organizer, event, order): - p = order.payments.get(local_id=1) - p.create_external_refund() + with scopes_disabled(): + p = order.payments.get(local_id=1) + p.create_external_refund() resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format( organizer.slug, event.slug, order.code ), format='json', data={'mark_canceled': True}) - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) assert resp.status_code == 200 assert r.state == OrderRefund.REFUND_STATE_DONE order.refresh_from_db() @@ -536,12 +550,14 @@ def test_refund_process_mark_refunded(token_client, organizer, event, order): @pytest.mark.django_db def test_refund_process_mark_pending(token_client, organizer, event, order): - p = order.payments.get(local_id=1) - p.create_external_refund() + with scopes_disabled(): + p = order.payments.get(local_id=1) + p.create_external_refund() resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format( organizer.slug, event.slug, order.code ), format='json', data={'mark_canceled': False}) - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) assert resp.status_code == 200 assert r.state == OrderRefund.REFUND_STATE_DONE order.refresh_from_db() @@ -550,13 +566,15 @@ def test_refund_process_mark_pending(token_client, organizer, event, order): @pytest.mark.django_db def test_refund_cancel(token_client, organizer, event, order): - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) r.state = 'transit' r.save() resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/cancel/'.format( organizer.slug, event.slug, order.code )) - r = order.refunds.get(local_id=1) + with scopes_disabled(): + r = order.refunds.get(local_id=1) assert resp.status_code == 200 assert r.state == OrderRefund.REFUND_STATE_CANCELED @@ -571,10 +589,11 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven i2 = copy.copy(item) i2.pk = None i2.save() - var = item.variations.create(value="Children") - var2 = item.variations.create(value="Children") - res = dict(TEST_ORDERPOSITION_RES) - op = order.positions.first() + with scopes_disabled(): + var = item.variations.create(value="Children") + var2 = item.variations.create(value="Children") + res = dict(TEST_ORDERPOSITION_RES) + op = order.positions.first() op.variation = var op.save() res["id"] = op.pk @@ -665,8 +684,9 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven '/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)) assert [] == resp.data['results'] - cl = event.checkin_lists.create(name="Default") - op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl) + with scopes_disabled(): + cl = event.checkin_lists.create(name="Default") + op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl) res['checkins'] = [{'datetime': '2017-12-26T10:00:00Z', 'list': cl.pk}] resp = token_client.get( '/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)) @@ -692,7 +712,8 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven @pytest.mark.django_db def test_orderposition_detail(token_client, organizer, event, order, item, question): res = dict(TEST_ORDERPOSITION_RES) - op = order.positions.first() + with scopes_disabled(): + op = order.positions.first() res["id"] = op.pk res["item"] = item.pk res["answers"][0]["question"] = question.pk @@ -711,7 +732,8 @@ def test_orderposition_detail(token_client, organizer, event, order, item, quest @pytest.mark.django_db def test_orderposition_detail_no_canceled(token_client, organizer, event, order, item, question): - op = order.all_positions.filter(canceled=True).first() + with scopes_disabled(): + op = order.all_positions.filter(canceled=True).first() resp = token_client.get('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(organizer.slug, event.slug, op.pk)) assert resp.status_code == 404 @@ -719,33 +741,36 @@ def test_orderposition_detail_no_canceled(token_client, organizer, event, order, @pytest.mark.django_db def test_orderposition_delete(token_client, organizer, event, order, item, question): - op = order.positions.first() + with scopes_disabled(): + op = order.positions.first() resp = token_client.delete('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format( organizer.slug, event.slug, op.pk )) assert resp.status_code == 400 assert resp.data == ['This operation would leave the order empty. Please cancel the order itself instead.'] - op2 = OrderPosition.objects.create( - order=order, - item=item, - variation=None, - price=Decimal("23"), - attendee_name_parts={"full_name": "Peter", "_scheme": "full"}, - secret="foobar", - pseudonymization_id="BAZ", - ) - order.refresh_from_db() - order.total = Decimal('46') - order.save() - assert order.positions.count() == 2 + with scopes_disabled(): + op2 = OrderPosition.objects.create( + order=order, + item=item, + variation=None, + price=Decimal("23"), + attendee_name_parts={"full_name": "Peter", "_scheme": "full"}, + secret="foobar", + pseudonymization_id="BAZ", + ) + order.refresh_from_db() + order.total = Decimal('46') + order.save() + assert order.positions.count() == 2 resp = token_client.delete('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format( organizer.slug, event.slug, op2.pk )) assert resp.status_code == 204 - assert order.positions.count() == 1 - assert order.all_positions.count() == 3 + with scopes_disabled(): + assert order.positions.count() == 1 + assert order.all_positions.count() == 3 order.refresh_from_db() assert order.total == Decimal('23.25') @@ -822,7 +847,8 @@ def test_invoice_list(token_client, organizer, event, order, invoice): organizer.slug, event.slug)) assert [] == resp.data['results'] - ic = generate_cancellation(invoice) + with scopes_disabled(): + ic = generate_cancellation(invoice) resp = token_client.get('/api/v1/organizers/{}/events/{}/invoices/?is_cancellation=false'.format( organizer.slug, event.slug)) @@ -854,7 +880,8 @@ def test_invoice_detail(token_client, organizer, event, invoice): @pytest.mark.django_db def test_invoice_regenerate(token_client, organizer, event, invoice): - InvoiceAddress.objects.filter(order=invoice.order).update(company="ACME Ltd") + with scopes_disabled(): + InvoiceAddress.objects.filter(order=invoice.order).update(company="ACME Ltd") resp = token_client.post('/api/v1/organizers/{}/events/{}/invoices/{}/regenerate/'.format( organizer.slug, event.slug, invoice.number @@ -866,7 +893,8 @@ def test_invoice_regenerate(token_client, organizer, event, invoice): @pytest.mark.django_db def test_invoice_reissue(token_client, organizer, event, invoice): - InvoiceAddress.objects.filter(order=invoice.order).update(company="ACME Ltd") + with scopes_disabled(): + InvoiceAddress.objects.filter(order=invoice.order).update(company="ACME Ltd") resp = token_client.post('/api/v1/organizers/{}/events/{}/invoices/{}/reissue/'.format( organizer.slug, event.slug, invoice.number @@ -874,8 +902,9 @@ def test_invoice_reissue(token_client, organizer, event, invoice): assert resp.status_code == 204 invoice.refresh_from_db() assert "ACME Ltd" not in invoice.invoice_to - assert invoice.order.invoices.count() == 3 - invoice = invoice.order.invoices.last() + with scopes_disabled(): + assert invoice.order.invoices.count() == 3 + invoice = invoice.order.invoices.last() assert "ACME Ltd" in invoice.invoice_to @@ -1009,7 +1038,8 @@ def test_order_mark_canceled_expired(token_client, organizer, event, order): def test_order_mark_paid_canceled_keep_fee(token_client, organizer, event, order): order.status = Order.STATUS_PAID order.save() - order.payments.create(state=OrderPayment.PAYMENT_STATE_CONFIRMED, amount=order.total) + with scopes_disabled(): + order.payments.create(state=OrderPayment.PAYMENT_STATE_CONFIRMED, amount=order.total) resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/{}/mark_canceled/'.format( organizer.slug, event.slug, order.code @@ -1186,7 +1216,8 @@ def test_order_extend_expired_quota_waiting_list(token_client, organizer, event, order.save() quota.size = 1 quota.save() - event.waitinglistentries.create(item=item, email='foo@bar.com') + with scopes_disabled(): + event.waitinglistentries.create(item=item, email='foo@bar.com') newdate = (now() + datetime.timedelta(days=20)).strftime("%Y-%m-%d") resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/{}/extend/'.format( @@ -1353,7 +1384,8 @@ def test_order_create(token_client, organizer, event, item, quota, question): ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert o.email == "dummy@dummy.test" assert o.locale == "en" assert o.total == Decimal('23.25') @@ -1361,24 +1393,28 @@ def test_order_create(token_client, organizer, event, item, quota, question): assert o.sales_channel == "web" assert not o.testmode - p = o.payments.first() + with scopes_disabled(): + p = o.payments.first() assert p.provider == "banktransfer" assert p.amount == o.total assert p.state == "created" - fee = o.fees.first() + with scopes_disabled(): + fee = o.fees.first() assert fee.fee_type == "payment" assert fee.value == Decimal('0.25') ia = o.invoice_address assert ia.company == "Sample company" assert ia.name_parts == {"full_name": "Fo", "_scheme": "full"} assert ia.name_cached == "Fo" - assert o.positions.count() == 1 - pos = o.positions.first() + with scopes_disabled(): + assert o.positions.count() == 1 + pos = o.positions.first() assert pos.item == item assert pos.price == Decimal("23.00") assert pos.attendee_name_parts == {"full_name": "Peter", "_scheme": "full"} - answ = pos.answers.first() + with scopes_disabled(): + answ = pos.answers.first() assert answ.question == question assert answ.answer == "S" @@ -1395,9 +1431,10 @@ def test_order_create_invoice_address_optional(token_client, organizer, event, i ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - with pytest.raises(InvoiceAddress.DoesNotExist): - o.invoice_address + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + with pytest.raises(InvoiceAddress.DoesNotExist): + o.invoice_address @pytest.mark.django_db @@ -1412,7 +1449,8 @@ def test_order_create_sales_channel_optional(token_client, organizer, event, ite ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert o.sales_channel == "web" @@ -1443,7 +1481,8 @@ def test_order_create_in_test_mode(token_client, organizer, event, item, quota, ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert o.testmode @@ -1460,8 +1499,9 @@ def test_order_create_attendee_name_optional(token_client, organizer, event, ite ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.positions.first().attendee_name_parts == {} + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().attendee_name_parts == {} @pytest.mark.django_db @@ -1484,8 +1524,10 @@ def test_order_create_legacy_attendee_name(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.positions.first().attendee_name_parts == {"_legacy": "Peter"} + + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().attendee_name_parts == {"_legacy": "Peter"} @pytest.mark.django_db @@ -1508,8 +1550,9 @@ def test_order_create_legacy_invoice_name(token_client, organizer, event, item, ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.invoice_address.name_parts == {"_legacy": "Peter"} + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.invoice_address.name_parts == {"_legacy": "Peter"} @pytest.mark.django_db @@ -1524,7 +1567,8 @@ def test_order_create_code_optional(token_client, organizer, event, item, quota, ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert o.code == "ABCDE" resp = token_client.post( @@ -1557,7 +1601,8 @@ def test_order_email_optional(token_client, organizer, event, item, quota, quest ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert not o.email @@ -1572,7 +1617,6 @@ def test_order_create_payment_info_optional(token_client, organizer, event, item ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) res['payment_info'] = { 'foo': { @@ -1586,9 +1630,10 @@ def test_order_create_payment_info_optional(token_client, organizer, event, item ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) - p = o.payments.first() + p = o.payments.first() assert p.provider == "banktransfer" assert p.amount == o.total assert json.loads(p.info) == res['payment_info'] @@ -1605,8 +1650,9 @@ def test_order_create_position_secret_optional(token_client, organizer, event, i ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.positions.first().secret + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().secret res['positions'][0]['secret'] = "aaa" resp = token_client.post( @@ -1615,8 +1661,9 @@ def test_order_create_position_secret_optional(token_client, organizer, event, i ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.positions.first().secret == "aaa" + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().secret == "aaa" resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/'.format( @@ -1642,15 +1689,17 @@ def test_order_create_tax_rules(token_client, organizer, event, item, quota, que ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - fee = o.fees.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + fee = o.fees.first() assert fee.fee_type == "payment" assert fee.value == Decimal('0.25') assert fee.tax_rate == Decimal('19.00') assert fee.tax_rule == taxrule ia = o.invoice_address assert ia.company == "Sample company" - pos = o.positions.first() + with scopes_disabled(): + pos = o.positions.first() assert pos.item == item assert pos.tax_rate == Decimal('19.00') assert pos.tax_value == Decimal('3.67') @@ -1765,8 +1814,9 @@ def test_order_create_item_validation(token_client, organizer, event, item, item assert resp.status_code == 400 assert resp.data == {'positions': [{'item': ['The specified item does not belong to this event.']}]} - var2 = item2.variations.create(value="A") - quota.variations.add(var2) + with scopes_disabled(): + var2 = item2.variations.create(value="A") + quota.variations.add(var2) res['positions'][0]['item'] = item.pk res['positions'][0]['variation'] = var2.pk @@ -1778,7 +1828,8 @@ def test_order_create_item_validation(token_client, organizer, event, item, item assert resp.status_code == 400 assert resp.data == {'positions': [{'variation': ['You cannot specify a variation for this item.']}]} - var1 = item.variations.create(value="A") + with scopes_disabled(): + var1 = item.variations.create(value="A") res['positions'][0]['item'] = item.pk res['positions'][0]['variation'] = var1.pk resp = token_client.post( @@ -1789,7 +1840,8 @@ def test_order_create_item_validation(token_client, organizer, event, item, item assert resp.status_code == 400 assert resp.data == {'positions': [{'item': ['The product "Budget Ticket" is not assigned to a quota.']}]} - quota.variations.add(var1) + with scopes_disabled(): + quota.variations.add(var1) resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/'.format( organizer.slug, event.slug @@ -1850,9 +1902,10 @@ def test_order_create_positionids_addons(token_client, organizer, event, item, q ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos1 = o.positions.first() - pos2 = o.positions.last() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos1 = o.positions.first() + pos2 = o.positions.last() assert pos2.addon_to == pos1 @@ -2046,11 +2099,13 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu assert resp.data == {'positions': [ {'answers': [{'non_field_errors': ['You need to specify options if the question is of a choice type.']}]}]} - question.options.create(answer="L") - res['positions'][0]['answers'][0]['options'] = [ - question.options.first().pk, - question.options.last().pk, - ] + with scopes_disabled(): + question.options.create(answer="L") + with scopes_disabled(): + res['positions'][0]['answers'][0]['options'] = [ + question.options.first().pk, + question.options.last().pk, + ] resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/'.format( organizer.slug, event.slug @@ -2073,19 +2128,21 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu question.type = Question.TYPE_CHOICE_MULTIPLE question.save() - res['positions'][0]['answers'][0]['options'] = [ - question.options.first().pk, - question.options.last().pk, - ] + with scopes_disabled(): + res['positions'][0]['answers'][0]['options'] = [ + question.options.first().pk, + question.options.last().pk, + ] resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/'.format( organizer.slug, event.slug ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.question == question assert answ.answer == "XL, L" @@ -2099,9 +2156,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "3.45" question.type = Question.TYPE_NUMBER @@ -2126,9 +2184,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "True" question.type = Question.TYPE_BOOLEAN @@ -2140,9 +2199,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "False" question.type = Question.TYPE_BOOLEAN @@ -2166,9 +2226,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "2018-05-14" question.type = Question.TYPE_DATE @@ -2192,9 +2253,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "2018-05-14 13:00:00+00:00" question.type = Question.TYPE_DATETIME @@ -2219,9 +2281,10 @@ def test_order_create_answer_validation(token_client, organizer, event, item, qu ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - pos = o.positions.first() - answ = pos.answers.first() + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + pos = o.positions.first() + answ = pos.answers.first() assert answ.answer == "13:00:00" question.type = Question.TYPE_TIME @@ -2310,11 +2373,12 @@ def test_order_create_quota_consume_cart(token_client, organizer, event, item, q res['positions'][0]['item'] = item.pk res['positions'][0]['answers'][0]['question'] = question.pk - cr = CartPosition.objects.create( - event=event, cart_id="uxLJBUMEcnxOLI2EuxLYN1hWJq9GKu4yWL9FEgs2m7M0vdFi@api", item=item, - price=23, - expires=now() + datetime.timedelta(hours=3) - ) + with scopes_disabled(): + cr = CartPosition.objects.create( + event=event, cart_id="uxLJBUMEcnxOLI2EuxLYN1hWJq9GKu4yWL9FEgs2m7M0vdFi@api", item=item, + price=23, + expires=now() + datetime.timedelta(hours=3) + ) quota.size = 1 quota.save() @@ -2337,7 +2401,8 @@ def test_order_create_quota_consume_cart(token_client, organizer, event, item, q ), format='json', data=res ) assert resp.status_code == 201 - assert not CartPosition.objects.filter(pk=cr.pk).exists() + with scopes_disabled(): + assert not CartPosition.objects.filter(pk=cr.pk).exists() @pytest.mark.django_db @@ -2353,11 +2418,13 @@ def test_order_create_free(token_client, organizer, event, item, quota, question ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) assert o.total == Decimal('0.00') assert o.status == Order.STATUS_PAID - p = o.payments.first() + with scopes_disabled(): + p = o.payments.first() assert p.provider == "free" assert p.amount == o.total assert p.state == "confirmed" @@ -2437,10 +2504,11 @@ def test_order_create_paid_generate_invoice(token_client, organizer, event, item ), format='json', data=res ) assert resp.status_code == 201 - o = Order.objects.get(code=resp.data['code']) - assert o.invoices.count() == 1 + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.invoices.count() == 1 - p = o.payments.first() + p = o.payments.first() assert p.provider == "banktransfer" assert p.amount == o.total assert p.state == "confirmed" @@ -2472,7 +2540,8 @@ def test_refund_create(token_client, organizer, event, order): ), format='json', data=res ) assert resp.status_code == 201 - r = order.refunds.get(local_id=resp.data['local_id']) + with scopes_disabled(): + r = order.refunds.get(local_id=resp.data['local_id']) assert r.provider == "manual" assert r.amount == Decimal("23.00") assert r.state == "created" @@ -2493,7 +2562,8 @@ def test_refund_create_mark_refunded(token_client, organizer, event, order): ), format='json', data=res ) assert resp.status_code == 201 - r = order.refunds.get(local_id=resp.data['local_id']) + with scopes_disabled(): + r = order.refunds.get(local_id=resp.data['local_id']) assert r.provider == "manual" assert r.amount == Decimal("23.00") assert r.state == "created" @@ -2515,7 +2585,8 @@ def test_refund_optional_fields(token_client, organizer, event, order): ), format='json', data=res ) assert resp.status_code == 201 - r = order.refunds.get(local_id=resp.data['local_id']) + with scopes_disabled(): + r = order.refunds.get(local_id=resp.data['local_id']) assert r.provider == "manual" assert r.amount == Decimal("23.00") assert r.state == "created" @@ -2562,7 +2633,8 @@ def test_order_delete_test_mode(token_client, organizer, event, order): ) ) assert resp.status_code == 204 - assert not Order.objects.filter(code=order.code).exists() + with scopes_disabled(): + assert not Order.objects.filter(code=order.code).exists() @pytest.mark.django_db @@ -2697,11 +2769,12 @@ def test_order_update_allowed_fields(token_client, organizer, event, order): assert str(order.invoice_address.country) == "FR" assert not order.invoice_address.vat_id_validated assert order.invoice_address.city == "Paris" - assert order.all_logentries().get(action_type='pretix.event.order.comment') - assert order.all_logentries().get(action_type='pretix.event.order.checkin_attention') - assert order.all_logentries().get(action_type='pretix.event.order.contact.changed') - assert order.all_logentries().get(action_type='pretix.event.order.locale.changed') - assert order.all_logentries().get(action_type='pretix.event.order.modified') + with scopes_disabled(): + assert order.all_logentries().get(action_type='pretix.event.order.comment') + assert order.all_logentries().get(action_type='pretix.event.order.checkin_attention') + assert order.all_logentries().get(action_type='pretix.event.order.contact.changed') + assert order.all_logentries().get(action_type='pretix.event.order.locale.changed') + assert order.all_logentries().get(action_type='pretix.event.order.modified') @pytest.mark.django_db @@ -2847,7 +2920,8 @@ def test_order_create_invoice(token_client, organizer, event, order): @pytest.mark.django_db def test_order_regenerate_secrets(token_client, organizer, event, order): s = order.secret - ps = order.positions.first().secret + with scopes_disabled(): + ps = order.positions.first().secret resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/{}/regenerate_secrets/'.format( organizer.slug, event.slug, order.code @@ -2856,7 +2930,8 @@ def test_order_regenerate_secrets(token_client, organizer, event, order): assert resp.status_code == 200 order.refresh_from_db() assert s != order.secret - assert ps != order.positions.first().secret + with scopes_disabled(): + assert ps != order.positions.first().secret @pytest.mark.django_db @@ -2882,7 +2957,8 @@ def test_order_resend_link(token_client, organizer, event, order): @pytest.mark.django_db def test_orderposition_price_calculation(token_client, organizer, event, order, item): - op = order.positions.first() + with scopes_disabled(): + op = order.positions.first() resp = token_client.post( '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), data={ @@ -2901,8 +2977,9 @@ def test_orderposition_price_calculation(token_client, organizer, event, order, @pytest.mark.django_db def test_orderposition_price_calculation_item_with_tax(token_client, organizer, event, order, item, taxrule): - item2 = event.items.create(name="Budget Ticket", default_price=23, tax_rule=taxrule) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23, tax_rule=taxrule) + op = order.positions.first() resp = token_client.post( '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), data={ @@ -2922,9 +2999,10 @@ def test_orderposition_price_calculation_item_with_tax(token_client, organizer, @pytest.mark.django_db def test_orderposition_price_calculation_item_with_variation(token_client, organizer, event, order): - item2 = event.items.create(name="Budget Ticket", default_price=23) - var = item2.variations.create(default_price=12, value="XS") - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23) + var = item2.variations.create(default_price=12, value="XS") + op = order.positions.first() resp = token_client.post( '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), data={ @@ -2945,8 +3023,9 @@ def test_orderposition_price_calculation_item_with_variation(token_client, organ @pytest.mark.django_db def test_orderposition_price_calculation_subevent(token_client, organizer, event, order, subevent): - item2 = event.items.create(name="Budget Ticket", default_price=23) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23) + op = order.positions.first() op.subevent = subevent op.save() resp = token_client.post( @@ -2969,10 +3048,11 @@ def test_orderposition_price_calculation_subevent(token_client, organizer, event @pytest.mark.django_db def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent): - item2 = event.items.create(name="Budget Ticket", default_price=23) - se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) - se2.subeventitem_set.create(item=item2, price=12) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23) + se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) + se2.subeventitem_set.create(item=item2, price=12) + op = order.positions.first() op.subevent = subevent op.save() resp = token_client.post( @@ -2995,12 +3075,13 @@ def test_orderposition_price_calculation_subevent_with_override(token_client, or @pytest.mark.django_db def test_orderposition_price_calculation_voucher_matching(token_client, organizer, event, order, subevent, item): - item2 = event.items.create(name="Budget Ticket", default_price=23) - q = event.quotas.create(name="Quota") - q.items.add(item) - q.items.add(item2) - voucher = event.vouchers.create(price_mode="set", value=15, quota=q) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23) + q = event.quotas.create(name="Quota") + q.items.add(item) + q.items.add(item2) + voucher = event.vouchers.create(price_mode="set", value=15, quota=q) + op = order.positions.first() op.voucher = voucher op.save() resp = token_client.post( @@ -3022,11 +3103,12 @@ def test_orderposition_price_calculation_voucher_matching(token_client, organize @pytest.mark.django_db def test_orderposition_price_calculation_voucher_not_matching(token_client, organizer, event, order, subevent, item): - item2 = event.items.create(name="Budget Ticket", default_price=23) - q = event.quotas.create(name="Quota") - q.items.add(item) - voucher = event.vouchers.create(price_mode="set", value=15, quota=q) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=23) + q = event.quotas.create(name="Quota") + q.items.add(item) + voucher = event.vouchers.create(price_mode="set", value=15, quota=q) + op = order.positions.first() op.voucher = voucher op.save() resp = token_client.post( @@ -3050,8 +3132,9 @@ def test_orderposition_price_calculation_voucher_not_matching(token_client, orga def test_orderposition_price_calculation_net_price(token_client, organizer, event, order, subevent, item, taxrule): taxrule.price_includes_tax = False taxrule.save() - item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) + op = order.positions.first() resp = token_client.post( '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), data={ @@ -3080,8 +3163,9 @@ def test_orderposition_price_calculation_reverse_charge(token_client, organizer, order.invoice_address.vat_id_validated = True order.invoice_address.country = Country('AT') order.invoice_address.save() - item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) - op = order.positions.first() + with scopes_disabled(): + item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) + op = order.positions.first() resp = token_client.post( '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), data={ diff --git a/src/tests/api/test_subevents.py b/src/tests/api/test_subevents.py index d8c5a1e53..d4f716472 100644 --- a/src/tests/api/test_subevents.py +++ b/src/tests/api/test_subevents.py @@ -4,6 +4,7 @@ from unittest import mock import pytest from django_countries.fields import Country +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import InvoiceAddress, Order, OrderPosition @@ -159,9 +160,10 @@ def test_subevent_create(token_client, organizer, event, subevent, meta_prop, it ) assert resp.status_code == 201 assert not subevent.active - assert subevent.meta_values.filter( - property__name=meta_prop.name, value="Workshop" - ).exists() + with scopes_disabled(): + assert subevent.meta_values.filter( + property__name=meta_prop.name, value="Workshop" + ).exists() resp = token_client.post( '/api/v1/organizers/{}/events/{}/subevents/'.format(organizer.slug, event.slug), @@ -217,7 +219,8 @@ def test_subevent_create(token_client, organizer, event, subevent, meta_prop, it ) assert resp.status_code == 201 assert item.default_price == Decimal('23.00') - assert event.subevents.get(id=resp.data['id']).item_price_overrides[item.pk] == Decimal('23.42') + with scopes_disabled(): + assert event.subevents.get(id=resp.data['id']).item_price_overrides[item.pk] == Decimal('23.42') resp = token_client.post( '/api/v1/organizers/{}/events/{}/subevents/'.format(organizer.slug, event.slug), @@ -261,7 +264,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - subevent = event.subevents.get(id=subevent.id) + with scopes_disabled(): + subevent = event.subevents.get(id=subevent.id) assert subevent.date_from == datetime(2018, 12, 27, 10, 0, tzinfo=UTC) assert subevent.date_to == datetime(2018, 12, 28, 10, 0, tzinfo=UTC) @@ -297,9 +301,10 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert organizer.events.get(slug=event.slug).subevents.get(id=resp.data['id']).meta_values.filter( - property__name=meta_prop.name, value="Conference" - ).exists() + with scopes_disabled(): + assert organizer.events.get(slug=event.slug).subevents.get(id=resp.data['id']).meta_values.filter( + property__name=meta_prop.name, value="Conference" + ).exists() resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -310,9 +315,10 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert not subevent.meta_values.filter( - property__name=meta_prop.name - ).exists() + with scopes_disabled(): + assert not subevent.meta_values.filter( + property__name=meta_prop.name + ).exists() resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -339,7 +345,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert subevent.items.get(id=item.pk).default_price == Decimal('23.00') + with scopes_disabled(): + assert subevent.items.get(id=item.pk).default_price == Decimal('23.00') assert subevent.item_price_overrides[item.pk] == Decimal('99.99') resp = token_client.patch( @@ -355,7 +362,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert event.subevents.get(id=subevent.id).item_price_overrides[item.pk] == Decimal('88.88') + with scopes_disabled(): + assert event.subevents.get(id=subevent.id).item_price_overrides[item.pk] == Decimal('88.88') resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -370,7 +378,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert item.pk not in event.subevents.get(id=subevent.id).item_price_overrides + with scopes_disabled(): + assert item.pk not in event.subevents.get(id=subevent.id).item_price_overrides resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -385,7 +394,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert event.subevents.get(id=subevent.id).item_price_overrides[item.pk] == Decimal('12.34') + with scopes_disabled(): + assert event.subevents.get(id=subevent.id).item_price_overrides[item.pk] == Decimal('12.34') resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -395,7 +405,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert item.pk not in event.subevents.get(id=subevent.id).item_price_overrides + with scopes_disabled(): + assert item.pk not in event.subevents.get(id=subevent.id).item_price_overrides resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -440,8 +451,9 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert subevent.variations.get(id=variations[0].pk).default_price == Decimal('12.00') - assert subevent.var_price_overrides[variations[0].pk] == Decimal('99.99') + with scopes_disabled(): + assert subevent.variations.get(id=variations[0].pk).default_price == Decimal('12.00') + assert subevent.var_price_overrides[variations[0].pk] == Decimal('99.99') resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -456,7 +468,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert event.subevents.get(id=subevent.id).var_price_overrides[variations[0].pk] == Decimal('88.88') + with scopes_disabled(): + assert event.subevents.get(id=subevent.id).var_price_overrides[variations[0].pk] == Decimal('88.88') resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -471,7 +484,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert variations[0].pk not in event.subevents.get(id=subevent.id).var_price_overrides + with scopes_disabled(): + assert variations[0].pk not in event.subevents.get(id=subevent.id).var_price_overrides resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -486,7 +500,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert event.subevents.get(id=subevent.id).var_price_overrides[variations[0].pk] == Decimal('12.34') + with scopes_disabled(): + assert event.subevents.get(id=subevent.id).var_price_overrides[variations[0].pk] == Decimal('12.34') resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -496,7 +511,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2, format='json' ) assert resp.status_code == 200 - assert variations[0].pk not in event.subevents.get(id=subevent.id).var_price_overrides + with scopes_disabled(): + assert variations[0].pk not in event.subevents.get(id=subevent.id).var_price_overrides resp = token_client.patch( '/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), @@ -544,7 +560,8 @@ def test_subevent_delete(token_client, organizer, event, subevent): resp = token_client.delete('/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk)) assert resp.status_code == 204 - assert not event.subevents.filter(pk=subevent.id).exists() + with scopes_disabled(): + assert not event.subevents.filter(pk=subevent.id).exists() @pytest.mark.django_db @@ -554,4 +571,5 @@ def test_subevent_with_order_position_not_delete(token_client, organizer, event, assert resp.status_code == 403 assert resp.content.decode() == '{"detail":"The sub-event can not be deleted as it has already been used in ' \ 'orders. Please set \'active\' to false instead to hide it from users."}' - assert event.subevents.filter(pk=subevent.id).exists() + with scopes_disabled(): + assert event.subevents.filter(pk=subevent.id).exists() diff --git a/src/tests/api/test_vouchers.py b/src/tests/api/test_vouchers.py index 8707e4187..4fe0906a5 100644 --- a/src/tests/api/test_vouchers.py +++ b/src/tests/api/test_vouchers.py @@ -5,6 +5,7 @@ from decimal import Decimal import pytest from django.utils import timezone from django.utils.timezone import now +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import Event, Voucher @@ -58,7 +59,8 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube i2 = copy.copy(item) i2.pk = None i2.save() - var2 = i2.variations.create(value="foo") + with scopes_disabled(): + var2 = i2.variations.create(value="foo") resp = token_client.get('/api/v1/organizers/{}/events/{}/vouchers/'.format(organizer.slug, event.slug)) assert resp.status_code == 200 @@ -136,9 +138,10 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube ) assert [] == resp.data['results'] - var = item.variations.create(value='VIP') - voucher.variation = var - voucher.save() + with scopes_disabled(): + var = item.variations.create(value='VIP') + voucher.variation = var + voucher.save() res['variation'] = var.pk resp = token_client.get( '/api/v1/organizers/{}/events/{}/vouchers/?variation={}'.format(organizer.slug, event.slug, var.pk) @@ -208,7 +211,8 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube resp = token_client.get( '/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) assert [res] == resp.data['results'] - se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) + with scopes_disabled(): + se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) resp = token_client.get( '/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) @@ -237,7 +241,8 @@ def create_voucher(token_client, organizer, event, data, expected_failure=False) assert resp.status_code == 400 else: assert resp.status_code == 201 - return Voucher.objects.get(pk=resp.data['id']) + with scopes_disabled(): + return Voucher.objects.get(pk=resp.data['id']) @pytest.mark.django_db @@ -324,7 +329,8 @@ def test_create_non_blocking_item_voucher(token_client, organizer, event, item): @pytest.mark.django_db def test_create_non_blocking_variation_voucher(token_client, organizer, event, item): - variation = item.variations.create(value="XL") + with scopes_disabled(): + variation = item.variations.create(value="XL") v = create_voucher( token_client, organizer, event, data={ @@ -394,7 +400,8 @@ def test_create_blocking_item_voucher_quota_full_invalid(token_client, organizer @pytest.mark.django_db def test_create_blocking_variation_voucher_quota_free(token_client, organizer, event, item, quota): - variation = item.variations.create(value="XL") + with scopes_disabled(): + variation = item.variations.create(value="XL") quota.variations.add(variation) v = create_voucher( token_client, organizer, event, @@ -421,7 +428,8 @@ def test_create_short_code(token_client, organizer, event, item): @pytest.mark.django_db def test_create_blocking_variation_voucher_quota_full(token_client, organizer, event, item, quota): - variation = item.variations.create(value="XL") + with scopes_disabled(): + variation = item.variations.create(value="XL") quota.variations.add(variation) quota.size = 0 quota.save() @@ -463,7 +471,8 @@ def test_create_blocking_quota_voucher_quota_full(token_client, organizer, event @pytest.mark.django_db def test_create_duplicate_code(token_client, organizer, event, quota): - v = event.vouchers.create(quota=quota) + with scopes_disabled(): + v = event.vouchers.create(quota=quota) create_voucher( token_client, organizer, event, data={ @@ -501,11 +510,12 @@ def test_subevent_required_for_blocking(token_client, organizer, event, item, su @pytest.mark.django_db def test_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent): - se2 = event.subevents.create(name="Bar", date_from=now()) - quota.subevent = subevent - quota.save() - q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) - q2.items.add(item) + with scopes_disabled(): + se2 = event.subevents.create(name="Bar", date_from=now()) + quota.subevent = subevent + quota.save() + q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) + q2.items.add(item) v = create_voucher( token_client, organizer, event, @@ -521,12 +531,13 @@ def test_subevent_blocking_quota_free(token_client, organizer, event, item, quot @pytest.mark.django_db def test_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent): - se2 = event.subevents.create(name="Bar", date_from=now()) - quota.subevent = subevent - quota.size = 0 - quota.save() - q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) - q2.items.add(item) + with scopes_disabled(): + se2 = event.subevents.create(name="Bar", date_from=now()) + quota.subevent = subevent + quota.size = 0 + quota.save() + q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) + q2.items.add(item) create_voucher( token_client, organizer, event, @@ -553,15 +564,16 @@ def change_voucher(token_client, organizer, event, voucher, data, expected_failu @pytest.mark.django_db def test_change_to_item_of_other_event(token_client, organizer, event, item): - e2 = Event.objects.create( - organizer=organizer, - name='Dummy2', - slug='dummy2', - date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC), - plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf' - ) - ticket2 = e2.items.create(name='Late-bird ticket', default_price=23) - v = event.vouchers.create(item=item) + with scopes_disabled(): + e2 = Event.objects.create( + organizer=organizer, + name='Dummy2', + slug='dummy2', + date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC), + plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf' + ) + ticket2 = e2.items.create(name='Late-bird ticket', default_price=23) + v = event.vouchers.create(item=item) change_voucher( token_client, organizer, event, v, data={ @@ -575,7 +587,8 @@ def test_change_to_item_of_other_event(token_client, organizer, event, item): @pytest.mark.django_db def test_change_non_blocking_voucher(token_client, organizer, event, item, quota): - v = event.vouchers.create(item=item) + with scopes_disabled(): + v = event.vouchers.create(item=item) change_voucher( token_client, organizer, event, v, data={ @@ -589,7 +602,8 @@ def test_change_non_blocking_voucher(token_client, organizer, event, item, quota @pytest.mark.django_db def test_change_voucher_reduce_max_usages(token_client, organizer, event, item, quota): - v = event.vouchers.create(item=item, max_usages=5, redeemed=3) + with scopes_disabled(): + v = event.vouchers.create(item=item, max_usages=5, redeemed=3) change_voucher( token_client, organizer, event, v, data={ @@ -604,7 +618,8 @@ def test_change_voucher_reduce_max_usages(token_client, organizer, event, item, def test_change_blocking_voucher_unchanged_quota_full(token_client, organizer, event, item, quota): quota.size = 0 quota.save() - v = event.vouchers.create(item=item, block_quota=True) + with scopes_disabled(): + v = event.vouchers.create(item=item, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -620,7 +635,8 @@ def test_change_blocking_voucher_unchanged_quota_full(token_client, organizer, e def test_change_voucher_to_blocking_quota_full(token_client, organizer, event, item, quota): quota.size = 0 quota.save() - v = event.vouchers.create(item=item) + with scopes_disabled(): + v = event.vouchers.create(item=item) change_voucher( token_client, organizer, event, v, data={ @@ -632,7 +648,8 @@ def test_change_voucher_to_blocking_quota_full(token_client, organizer, event, i @pytest.mark.django_db def test_change_voucher_to_blocking_quota_free(token_client, organizer, event, item, quota): - v = event.vouchers.create(item=item) + with scopes_disabled(): + v = event.vouchers.create(item=item) change_voucher( token_client, organizer, event, v, data={ @@ -646,8 +663,9 @@ def test_change_voucher_to_blocking_quota_free(token_client, organizer, event, i def test_change_voucher_validity_to_valid_quota_full(token_client, organizer, event, item, quota): quota.size = 0 quota.save() - v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3), - block_quota=True) + with scopes_disabled(): + v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3), + block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -660,8 +678,9 @@ def test_change_voucher_validity_to_valid_quota_full(token_client, organizer, ev @pytest.mark.django_db def test_change_voucher_validity_to_valid_quota_free(token_client, organizer, event, item, quota): - v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3), - block_quota=True) + with scopes_disabled(): + v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3), + block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -673,9 +692,10 @@ def test_change_voucher_validity_to_valid_quota_free(token_client, organizer, ev @pytest.mark.django_db def test_change_item_of_blocking_voucher_quota_free(token_client, organizer, event, item, quota): - ticket2 = event.items.create(name='Late-bird ticket', default_price=23) - quota.items.add(ticket2) - v = event.vouchers.create(item=item, block_quota=True) + with scopes_disabled(): + ticket2 = event.items.create(name='Late-bird ticket', default_price=23) + quota.items.add(ticket2) + v = event.vouchers.create(item=item, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -687,10 +707,11 @@ def test_change_item_of_blocking_voucher_quota_free(token_client, organizer, eve @pytest.mark.django_db def test_change_item_of_blocking_voucher_quota_full(token_client, organizer, event, item, quota): - ticket2 = event.items.create(name='Late-bird ticket', default_price=23) - quota2 = event.quotas.create(name='Late', size=0) - quota2.items.add(ticket2) - v = event.vouchers.create(item=item, block_quota=True) + with scopes_disabled(): + ticket2 = event.items.create(name='Late-bird ticket', default_price=23) + quota2 = event.quotas.create(name='Late', size=0) + quota2.items.add(ticket2) + v = event.vouchers.create(item=item, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -702,14 +723,15 @@ def test_change_item_of_blocking_voucher_quota_full(token_client, organizer, eve @pytest.mark.django_db def test_change_variation_of_blocking_voucher_quota_free(token_client, organizer, event): - shirt = event.items.create(name='Shirt', default_price=23) - vs = shirt.variations.create(value='S') - vm = shirt.variations.create(value='M') - qs = event.quotas.create(name='S', size=2) - qs.variations.add(vs) - qm = event.quotas.create(name='M', size=2) - qm.variations.add(vm) - v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) + with scopes_disabled(): + shirt = event.items.create(name='Shirt', default_price=23) + vs = shirt.variations.create(value='S') + vm = shirt.variations.create(value='M') + qs = event.quotas.create(name='S', size=2) + qs.variations.add(vs) + qm = event.quotas.create(name='M', size=2) + qm.variations.add(vm) + v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -721,13 +743,14 @@ def test_change_variation_of_blocking_voucher_quota_free(token_client, organizer @pytest.mark.django_db def test_change_variation_of_blocking_voucher_without_quota_change(token_client, organizer, event): - shirt = event.items.create(name='Shirt', default_price=23) - vs = shirt.variations.create(value='S') - vm = shirt.variations.create(value='M') - q = event.quotas.create(name='S', size=0) - q.variations.add(vs) - q.variations.add(vm) - v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) + with scopes_disabled(): + shirt = event.items.create(name='Shirt', default_price=23) + vs = shirt.variations.create(value='S') + vm = shirt.variations.create(value='M') + q = event.quotas.create(name='S', size=0) + q.variations.add(vs) + q.variations.add(vm) + v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -739,14 +762,15 @@ def test_change_variation_of_blocking_voucher_without_quota_change(token_client, @pytest.mark.django_db def test_change_variation_of_blocking_voucher_quota_full(token_client, organizer, event): - shirt = event.items.create(name='Shirt', default_price=23) - vs = shirt.variations.create(value='S') - vm = shirt.variations.create(value='M') - qs = event.quotas.create(name='S', size=2) - qs.variations.add(vs) - qm = event.quotas.create(name='M', size=0) - qm.variations.add(vm) - v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) + with scopes_disabled(): + shirt = event.items.create(name='Shirt', default_price=23) + vs = shirt.variations.create(value='S') + vm = shirt.variations.create(value='M') + qs = event.quotas.create(name='S', size=2) + qs.variations.add(vs) + qm = event.quotas.create(name='M', size=0) + qm.variations.add(vm) + v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -758,9 +782,10 @@ def test_change_variation_of_blocking_voucher_quota_full(token_client, organizer @pytest.mark.django_db def test_change_quota_of_blocking_voucher_quota_free(token_client, organizer, event): - qs = event.quotas.create(name='S', size=2) - qm = event.quotas.create(name='M', size=2) - v = event.vouchers.create(quota=qs, block_quota=True) + with scopes_disabled(): + qs = event.quotas.create(name='S', size=2) + qm = event.quotas.create(name='M', size=2) + v = event.vouchers.create(quota=qs, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -772,9 +797,10 @@ def test_change_quota_of_blocking_voucher_quota_free(token_client, organizer, ev @pytest.mark.django_db def test_change_quota_of_blocking_voucher_quota_full(token_client, organizer, event): - qs = event.quotas.create(name='S', size=2) - qm = event.quotas.create(name='M', size=0) - v = event.vouchers.create(quota=qs, block_quota=True) + with scopes_disabled(): + qs = event.quotas.create(name='S', size=2) + qm = event.quotas.create(name='M', size=0) + v = event.vouchers.create(quota=qs, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -786,11 +812,12 @@ def test_change_quota_of_blocking_voucher_quota_full(token_client, organizer, ev @pytest.mark.django_db def test_change_item_of_blocking_voucher_without_quota_change(token_client, organizer, event, item, quota): - quota.size = 0 - quota.save() - ticket2 = event.items.create(name='Standard Ticket', default_price=23) - quota.items.add(ticket2) - v = event.vouchers.create(item=item, block_quota=True) + with scopes_disabled(): + quota.size = 0 + quota.save() + ticket2 = event.items.create(name='Standard Ticket', default_price=23) + quota.items.add(ticket2) + v = event.vouchers.create(item=item, block_quota=True) change_voucher( token_client, organizer, event, v, data={ @@ -802,8 +829,9 @@ def test_change_item_of_blocking_voucher_without_quota_change(token_client, orga @pytest.mark.django_db def test_change_code_to_duplicate(token_client, organizer, event, item, quota): - v1 = event.vouchers.create(quota=quota) - v2 = event.vouchers.create(quota=quota) + with scopes_disabled(): + v1 = event.vouchers.create(quota=quota) + v2 = event.vouchers.create(quota=quota) change_voucher( token_client, organizer, event, v1, data={ @@ -815,13 +843,14 @@ def test_change_code_to_duplicate(token_client, organizer, event, item, quota): @pytest.mark.django_db def test_change_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent): - quota.subevent = subevent - quota.save() - se2 = event.subevents.create(name="Bar", date_from=now()) - q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) - q2.items.add(item) + with scopes_disabled(): + quota.subevent = subevent + quota.save() + se2 = event.subevents.create(name="Bar", date_from=now()) + q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) + q2.items.add(item) - v = event.vouchers.create(item=item, block_quota=True, subevent=subevent) + v = event.vouchers.create(item=item, block_quota=True, subevent=subevent) change_voucher( token_client, organizer, event, v, data={ @@ -833,13 +862,14 @@ def test_change_subevent_blocking_quota_free(token_client, organizer, event, ite @pytest.mark.django_db def test_change_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent): - quota.subevent = subevent - quota.save() - se2 = event.subevents.create(name="Bar", date_from=now()) - q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) - q2.items.add(item) + with scopes_disabled(): + quota.subevent = subevent + quota.save() + se2 = event.subevents.create(name="Bar", date_from=now()) + q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) + q2.items.add(item) - v = event.vouchers.create(item=item, block_quota=True, subevent=subevent) + v = event.vouchers.create(item=item, block_quota=True, subevent=subevent) change_voucher( token_client, organizer, event, v, data={ @@ -851,27 +881,32 @@ def test_change_subevent_blocking_quota_full(token_client, organizer, event, ite @pytest.mark.django_db def test_delete_voucher(token_client, organizer, event, quota): - v = event.vouchers.create(quota=quota) + with scopes_disabled(): + v = event.vouchers.create(quota=quota) resp = token_client.delete( '/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk), ) assert resp.status_code == 204 - assert not event.vouchers.filter(pk=v.id).exists() + with scopes_disabled(): + assert not event.vouchers.filter(pk=v.id).exists() @pytest.mark.django_db def test_delete_voucher_redeemed(token_client, organizer, event, quota): - v = event.vouchers.create(quota=quota, redeemed=1) + with scopes_disabled(): + v = event.vouchers.create(quota=quota, redeemed=1) resp = token_client.delete( '/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk), ) assert resp.status_code == 403 - assert event.vouchers.filter(pk=v.id).exists() + with scopes_disabled(): + assert event.vouchers.filter(pk=v.id).exists() @pytest.mark.django_db def test_redeemed_is_not_writable(token_client, organizer, event, item): - v = event.vouchers.create(item=item) + with scopes_disabled(): + v = event.vouchers.create(item=item) change_voucher( token_client, organizer, event, v, data={ @@ -919,13 +954,14 @@ def test_create_multiple_vouchers(token_client, organizer, event, item): ], format='json' ) assert resp.status_code == 201 - assert Voucher.objects.count() == 2 - assert resp.data[0]['code'] == 'ABCDEFGHI' - v1 = Voucher.objects.get(code='ABCDEFGHI') - assert not v1.block_quota - assert resp.data[1]['code'] == 'JKLMNOPQR' - v2 = Voucher.objects.get(code='JKLMNOPQR') - assert v2.block_quota + with scopes_disabled(): + assert Voucher.objects.count() == 2 + assert resp.data[0]['code'] == 'ABCDEFGHI' + v1 = Voucher.objects.get(code='ABCDEFGHI') + assert not v1.block_quota + assert resp.data[1]['code'] == 'JKLMNOPQR' + v2 = Voucher.objects.get(code='JKLMNOPQR') + assert v2.block_quota @pytest.mark.django_db @@ -967,7 +1003,8 @@ def test_create_multiple_vouchers_one_invalid(token_client, organizer, event, it ) assert resp.status_code == 400 assert resp.data == [{}, {'code': ['Ensure this field has at least 5 characters.']}] - assert Voucher.objects.count() == 0 + with scopes_disabled(): + assert Voucher.objects.count() == 0 @pytest.mark.django_db @@ -1009,4 +1046,5 @@ def test_create_multiple_vouchers_duplicate_code(token_client, organizer, event, ) assert resp.status_code == 400 assert resp.data == [{}, {'code': ['Duplicate voucher code in request.']}] - assert Voucher.objects.count() == 0 + with scopes_disabled(): + assert Voucher.objects.count() == 0 diff --git a/src/tests/api/test_waitinglist.py b/src/tests/api/test_waitinglist.py index affec8563..809d1276f 100644 --- a/src/tests/api/test_waitinglist.py +++ b/src/tests/api/test_waitinglist.py @@ -3,6 +3,7 @@ import datetime from unittest import mock import pytest +from django_scopes import scopes_disabled from pytz import UTC from pretix.base.models import WaitingListEntry @@ -44,8 +45,9 @@ TEST_WLE_RES = { @pytest.mark.django_db def test_wle_list(token_client, organizer, event, wle, item, subevent): - var = item.variations.create(value="Children") - var2 = item.variations.create(value="Children") + with scopes_disabled(): + var = item.variations.create(value="Children") + var2 = item.variations.create(value="Children") res = dict(TEST_WLE_RES) wle.variation = var wle.save() @@ -97,7 +99,8 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent): '/api/v1/organizers/{}/events/{}/waitinglistentries/?has_voucher=true'.format(organizer.slug, event.slug)) assert [] == resp.data['results'] - v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') + with scopes_disabled(): + v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') wle.voucher = v wle.save() res['voucher'] = v.pk @@ -112,7 +115,8 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent): resp = token_client.get( '/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) assert [res] == resp.data['results'] - se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) + with scopes_disabled(): + se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) resp = token_client.get( '/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) @@ -136,19 +140,22 @@ def test_delete_wle(token_client, organizer, event, wle, item): '/api/v1/organizers/{}/events/{}/waitinglistentries/{}/'.format(organizer.slug, event.slug, wle.pk), ) assert resp.status_code == 204 - assert not event.waitinglistentries.filter(pk=wle.id).exists() + with scopes_disabled(): + assert not event.waitinglistentries.filter(pk=wle.id).exists() @pytest.mark.django_db def test_delete_wle_assigned(token_client, organizer, event, wle, item): - v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') + with scopes_disabled(): + v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') wle.voucher = v wle.save() resp = token_client.delete( '/api/v1/organizers/{}/events/{}/waitinglistentries/{}/'.format(organizer.slug, event.slug, wle.pk), ) assert resp.status_code == 403 - assert event.waitinglistentries.filter(pk=wle.id).exists() + with scopes_disabled(): + assert event.waitinglistentries.filter(pk=wle.id).exists() def create_wle(token_client, organizer, event, data, expected_failure=False): @@ -159,9 +166,9 @@ def create_wle(token_client, organizer, event, data, expected_failure=False): if expected_failure: assert resp.status_code == 400 else: - print(resp.data) assert resp.status_code == 201 - return WaitingListEntry.objects.get(pk=resp.data['id']) + with scopes_disabled(): + return WaitingListEntry.objects.get(pk=resp.data['id']) @pytest.mark.django_db @@ -205,7 +212,8 @@ def test_wle_require_fields(token_client, organizer, event, item, quota): }, expected_failure=True ) - v = item.variations.create(value="S") + with scopes_disabled(): + v = item.variations.create(value="S") create_wle( token_client, organizer, event, data={ @@ -300,7 +308,8 @@ def test_wle_change_email(token_client, organizer, event, item, wle, quota): @pytest.mark.django_db def test_wle_change_assigned(token_client, organizer, event, item, wle, quota): - v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') + with scopes_disabled(): + v = event.vouchers.create(item=item, price_mode='set', value=12, tag='Foo') wle.voucher = v wle.save() change_wle( @@ -315,8 +324,9 @@ def test_wle_change_assigned(token_client, organizer, event, item, wle, quota): @pytest.mark.django_db def test_wle_change_to_available_item(token_client, organizer, event, item, wle, quota): - i = event.items.create(name="Budget Ticket", default_price=23) - q = event.quotas.create(name="Budget Ticket", size=1) + with scopes_disabled(): + i = event.items.create(name="Budget Ticket", default_price=23) + q = event.quotas.create(name="Budget Ticket", size=1) q.items.add(i) change_wle( token_client, organizer, event, wle, @@ -330,9 +340,10 @@ def test_wle_change_to_available_item(token_client, organizer, event, item, wle, @pytest.mark.django_db def test_wle_change_to_unavailable_item(token_client, organizer, event, item, wle, quota): - i = event.items.create(name="Budget Ticket", default_price=23) - v = i.variations.create(value="S") - q = event.quotas.create(name="Budget Ticket", size=0) + with scopes_disabled(): + i = event.items.create(name="Budget Ticket", default_price=23) + v = i.variations.create(value="S") + q = event.quotas.create(name="Budget Ticket", size=0) q.items.add(i) q.variations.add(v) change_wle( @@ -349,9 +360,10 @@ def test_wle_change_to_unavailable_item(token_client, organizer, event, item, wl @pytest.mark.django_db def test_wle_change_to_unavailable_item_missing_var(token_client, organizer, event, item, wle, quota): - i = event.items.create(name="Budget Ticket", default_price=23) - v = i.variations.create(value="S") - q = event.quotas.create(name="Budget Ticket", size=0) + with scopes_disabled(): + i = event.items.create(name="Budget Ticket", default_price=23) + v = i.variations.create(value="S") + q = event.quotas.create(name="Budget Ticket", size=0) q.items.add(i) q.variations.add(v) change_wle( diff --git a/src/tests/api/test_webhooks.py b/src/tests/api/test_webhooks.py index 4c3551e1a..3eaaf4441 100644 --- a/src/tests/api/test_webhooks.py +++ b/src/tests/api/test_webhooks.py @@ -1,6 +1,7 @@ import copy import pytest +from django_scopes import scopes_disabled from pretix.api.models import WebHook @@ -64,12 +65,13 @@ def test_hook_create(token_client, organizer, event): format='json' ) assert resp.status_code == 201 - cl = WebHook.objects.get(pk=resp.data['id']) - assert cl.target_url == "https://google.com" - assert cl.limit_events.count() == 1 - assert set(cl.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', - 'pretix.event.order.paid'} - assert not cl.all_events + with scopes_disabled(): + cl = WebHook.objects.get(pk=resp.data['id']) + assert cl.target_url == "https://google.com" + assert cl.limit_events.count() == 1 + assert set(cl.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', + 'pretix.event.order.paid'} + assert not cl.all_events @pytest.mark.django_db @@ -136,9 +138,10 @@ def test_hook_patch_url(token_client, organizer, event, webhook): assert resp.status_code == 200 webhook.refresh_from_db() assert webhook.target_url == "https://pretix.eu" - assert webhook.limit_events.count() == 1 - assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', - 'pretix.event.order.paid'} + with scopes_disabled(): + assert webhook.limit_events.count() == 1 + assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', + 'pretix.event.order.paid'} assert webhook.enabled @@ -153,9 +156,10 @@ def test_hook_patch_types(token_client, organizer, event, webhook): ) assert resp.status_code == 200 webhook.refresh_from_db() - assert webhook.limit_events.count() == 1 - assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', - 'pretix.event.order.canceled'} + with scopes_disabled(): + assert webhook.limit_events.count() == 1 + assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', + 'pretix.event.order.canceled'} assert webhook.enabled diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 77acb1460..0e3fe9faa 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -1,4 +1,5 @@ import pytest +from django_scopes import scopes_disabled from xdist.dsession import DSession CRASHED_ITEMS = set() @@ -31,3 +32,9 @@ def pytest_configure(config): self.sched.check_schedule(node) DSession.handle_crashitem = _handle_crashitem + + +@pytest.hookimpl(hookwrapper=True) +def pytest_fixture_setup(fixturedef, request): + with scopes_disabled(): + yield