Fix tests.api

This commit is contained in:
Raphael Michel
2019-06-13 11:35:30 +02:00
parent 5c06c41a5b
commit 867667cd12
29 changed files with 871 additions and 574 deletions

View File

@@ -1,4 +1,5 @@
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django_scopes import scopes_disabled
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework.authentication import TokenAuthentication from rest_framework.authentication import TokenAuthentication
@@ -12,7 +13,8 @@ class DeviceTokenAuthentication(TokenAuthentication):
def authenticate_credentials(self, key): def authenticate_credentials(self, key):
model = self.get_model() model = self.get_model()
try: 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: except model.DoesNotExist:
raise exceptions.AuthenticationFailed('Invalid token.') raise exceptions.AuthenticationFailed('Invalid token.')

View File

@@ -1,12 +1,12 @@
import json import json
from django.urls import resolve
from django_scopes import scope
from hashlib import sha1 from hashlib import sha1
from django.conf import settings from django.conf import settings
from django.db import transaction from django.db import transaction
from django.http import HttpRequest, HttpResponse, JsonResponse from django.http import HttpRequest, HttpResponse, JsonResponse
from django.urls import resolve
from django.utils.timezone import now from django.utils.timezone import now
from django_scopes import scope
from rest_framework import status from rest_framework import status
from pretix.api.models import ApiCall from pretix.api.models import ApiCall

View File

@@ -25,7 +25,6 @@ from pretix.base.services.checkin import (
) )
from pretix.helpers.database import FixedOrderBy from pretix.helpers.database import FixedOrderBy
with scopes_disabled(): with scopes_disabled():
class CheckinListFilter(FilterSet): class CheckinListFilter(FilterSet):
class Meta: class Meta:
@@ -148,10 +147,11 @@ class CheckinListViewSet(viewsets.ModelViewSet):
return Response(response) return Response(response)
class CheckinOrderPositionFilter(OrderPositionFilter): with scopes_disabled():
class CheckinOrderPositionFilter(OrderPositionFilter):
def has_checkin_qs(self, queryset, name, value): def has_checkin_qs(self, queryset, name, value):
return queryset.filter(last_checked_in__isnull=not value) return queryset.filter(last_checked_in__isnull=not value)
class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet): class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):

View File

@@ -19,7 +19,6 @@ from pretix.base.models import (
from pretix.base.models.event import SubEvent from pretix.base.models.event import SubEvent
from pretix.helpers.dicts import merge_dicts from pretix.helpers.dicts import merge_dicts
with scopes_disabled(): with scopes_disabled():
class EventFilter(FilterSet): class EventFilter(FilterSet):
is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs') is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs')

View File

@@ -22,7 +22,6 @@ from pretix.base.models import (
) )
from pretix.helpers.dicts import merge_dicts from pretix.helpers.dicts import merge_dicts
with scopes_disabled(): with scopes_disabled():
class ItemFilter(FilterSet): class ItemFilter(FilterSet):
tax_rate = django_filters.CharFilter(method='tax_rate_qs') tax_rate = django_filters.CharFilter(method='tax_rate_qs')

View File

@@ -51,7 +51,6 @@ from pretix.base.signals import (
) )
from pretix.base.templatetags.money import money_filter from pretix.base.templatetags.money import money_filter
with scopes_disabled(): with scopes_disabled():
class OrderFilter(FilterSet): class OrderFilter(FilterSet):
email = django_filters.CharFilter(field_name='email', lookup_expr='iexact') email = django_filters.CharFilter(field_name='email', lookup_expr='iexact')
@@ -552,25 +551,25 @@ with scopes_disabled():
| Q(order__email__icontains=value) | Q(order__email__icontains=value)
) )
def has_checkin_qs(self, queryset, name, value): def has_checkin_qs(self, queryset, name, value):
return queryset.filter(checkins__isnull=not value) return queryset.filter(checkins__isnull=not value)
def attendee_name_qs(self, queryset, name, 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)) return queryset.filter(Q(attendee_name_cached__iexact=value) | Q(addon_to__attendee_name_cached__iexact=value))
class Meta: class Meta:
model = OrderPosition model = OrderPosition
fields = { fields = {
'item': ['exact', 'in'], 'item': ['exact', 'in'],
'variation': ['exact', 'in'], 'variation': ['exact', 'in'],
'secret': ['exact'], 'secret': ['exact'],
'order__status': ['exact', 'in'], 'order__status': ['exact', 'in'],
'addon_to': ['exact', 'in'], 'addon_to': ['exact', 'in'],
'subevent': ['exact', 'in'], 'subevent': ['exact', 'in'],
'pseudonymization_id': ['exact'], 'pseudonymization_id': ['exact'],
'voucher__code': ['exact'], 'voucher__code': ['exact'],
'voucher': ['exact'], 'voucher': ['exact'],
} }
class OrderPositionViewSet(mixins.DestroyModelMixin, viewsets.ReadOnlyModelViewSet): class OrderPositionViewSet(mixins.DestroyModelMixin, viewsets.ReadOnlyModelViewSet):

View File

@@ -16,7 +16,6 @@ from rest_framework.response import Response
from pretix.api.serializers.voucher import VoucherSerializer from pretix.api.serializers.voucher import VoucherSerializer
from pretix.base.models import Voucher from pretix.base.models import Voucher
with scopes_disabled(): with scopes_disabled():
class VoucherFilter(FilterSet): class VoucherFilter(FilterSet):
active = BooleanFilter(method='filter_active') active = BooleanFilter(method='filter_active')

View File

@@ -11,7 +11,6 @@ from pretix.api.serializers.waitinglist import WaitingListSerializer
from pretix.base.models import WaitingListEntry from pretix.base.models import WaitingListEntry
from pretix.base.models.waitinglist import WaitingListException from pretix.base.models.waitinglist import WaitingListException
with scopes_disabled(): with scopes_disabled():
class WaitingListFilter(FilterSet): class WaitingListFilter(FilterSet):
has_voucher = django_filters.rest_framework.BooleanFilter(method='has_voucher_qs') has_voucher = django_filters.rest_framework.BooleanFilter(method='has_voucher_qs')

View File

@@ -2,7 +2,6 @@ import string
import uuid import uuid
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, time, timedelta from datetime import datetime, time, timedelta
from django_scopes import ScopedManager
from operator import attrgetter from operator import attrgetter
import pytz import pytz
@@ -18,6 +17,7 @@ from django.utils.crypto import get_random_string
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.timezone import make_aware, now from django.utils.timezone import make_aware, now
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_scopes import ScopedManager
from i18nfield.fields import I18nCharField, I18nTextField from i18nfield.fields import I18nCharField, I18nTextField
from pretix.base.models.base import LoggedModel from pretix.base.models.base import LoggedModel

View File

@@ -3,7 +3,6 @@ import uuid
from collections import Counter from collections import Counter
from datetime import date, datetime, time from datetime import date, datetime, time
from decimal import Decimal, DecimalException from decimal import Decimal, DecimalException
from django_scopes import ScopedManager
from typing import Tuple from typing import Tuple
import dateutil.parser 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.timezone import is_naive, make_aware, now
from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import ScopedManager
from i18nfield.fields import I18nCharField, I18nTextField from i18nfield.fields import I18nCharField, I18nTextField
from pretix.base.models import fields from pretix.base.models import fields
@@ -160,10 +160,10 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False):
q = ( q = (
# IMPORTANT: If this is updated, also update the ItemVariation query # IMPORTANT: If this is updated, also update the ItemVariation query
# in models/event.py: EventMixin.annotated() # in models/event.py: EventMixin.annotated()
Q(active=True) Q(active=True)
& Q(Q(available_from__isnull=True) | Q(available_from__lte=now())) & Q(Q(available_from__isnull=True) | Q(available_from__lte=now()))
& Q(Q(available_until__isnull=True) | Q(available_until__gte=now())) & Q(Q(available_until__isnull=True) | Q(available_until__gte=now()))
& Q(sales_channels__contains=channel) & Q(require_bundling=False) & Q(sales_channels__contains=channel) & Q(require_bundling=False)
) )
if not allow_addons: if not allow_addons:
q &= Q(Q(category__isnull=True) | Q(category__is_addon=False)) 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 # !!! Attention: If you add new fields here, also add them to the copying code in
# pretix/control/forms/item.py if applicable. # pretix/control/forms/item.py if applicable.
class Meta: class Meta:
verbose_name = _("Product") verbose_name = _("Product")
verbose_name_plural = _("Products") verbose_name_plural = _("Products")

View File

@@ -6,7 +6,6 @@ import os
import string import string
from datetime import datetime, time, timedelta from datetime import datetime, time, timedelta
from decimal import Decimal from decimal import Decimal
from django_scopes import ScopedManager
from typing import Any, Dict, List, Union from typing import Any, Dict, List, Union
import dateutil import dateutil
@@ -27,6 +26,7 @@ from django.utils.functional import cached_property
from django.utils.timezone import make_aware, now from django.utils.timezone import make_aware, now
from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from django_countries.fields import Country, CountryField from django_countries.fields import Country, CountryField
from django_scopes import ScopedManager
from i18nfield.strings import LazyI18nString from i18nfield.strings import LazyI18nString
from jsonfallback.fields import FallbackJSONField from jsonfallback.fields import FallbackJSONField

View File

@@ -1,7 +1,9 @@
from django import forms from django import forms
from django.urls import reverse from django.urls import reverse
from django.utils.translation import pgettext_lazy 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.base.models.checkin import CheckinList
from pretix.control.forms.widgets import Select2 from pretix.control.forms.widgets import Select2

View File

@@ -6,7 +6,9 @@ from django.urls import reverse
from django.utils.translation import ( from django.utils.translation import (
pgettext_lazy, ugettext as __, ugettext_lazy as _, 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 i18nfield.forms import I18nFormField, I18nTextarea
from pretix.base.channels import get_all_sales_channels from pretix.base.channels import get_all_sales_channels

View File

@@ -1,4 +1,3 @@
from django_scopes.forms import SafeModelChoiceField
from urllib.parse import urlparse from urllib.parse import urlparse
from django import forms from django import forms
@@ -7,6 +6,7 @@ from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from django_scopes.forms import SafeModelChoiceField
from i18nfield.forms import I18nFormField, I18nTextarea from i18nfield.forms import I18nFormField, I18nTextarea
from pretix.api.models import WebHook from pretix.api.models import WebHook

View File

@@ -1,4 +1,3 @@
from django_scopes import scope
from urllib.parse import quote, urljoin, urlparse from urllib.parse import quote, urljoin, urlparse
from django.conf import settings 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.http import Http404
from django.shortcuts import get_object_or_404, redirect, resolve_url from django.shortcuts import get_object_or_404, redirect, resolve_url
from django.urls import get_script_prefix, resolve, reverse 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.encoding import force_str
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django_scopes import scope
from hijack.templatetags.hijack_tags import is_hijacked from hijack.templatetags.hijack_tags import is_hijacked
from pretix.base.models import Event, Organizer from pretix.base.models import Event, Organizer

View File

@@ -1,7 +1,9 @@
from django import forms from django import forms
from django.urls import reverse from django.urls import reverse
from django.utils.translation import ugettext_lazy as _ 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.control.forms.widgets import Select2
from pretix.plugins.pretixdroid.models import AppConfiguration from pretix.plugins.pretixdroid.models import AppConfiguration

View File

@@ -1,5 +1,4 @@
import warnings import warnings
from django_scopes import scope
from importlib import import_module from importlib import import_module
from urllib.parse import urljoin from urllib.parse import urljoin
@@ -9,6 +8,7 @@ from django.http import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import resolve from django.urls import resolve
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_scopes import scope
from pretix.base.middleware import LocaleMiddleware from pretix.base.middleware import LocaleMiddleware
from pretix.base.models import Event, Organizer from pretix.base.models import Event, Organizer

View File

@@ -17,16 +17,19 @@ def client():
@pytest.fixture @pytest.fixture
@scopes_disabled()
def organizer(): def organizer():
return Organizer.objects.create(name='Dummy', slug='dummy') return Organizer.objects.create(name='Dummy', slug='dummy')
@pytest.fixture @pytest.fixture
@scopes_disabled()
def meta_prop(organizer): def meta_prop(organizer):
return organizer.meta_properties.create(name="type", default="Concert") return organizer.meta_properties.create(name="type", default="Concert")
@pytest.fixture @pytest.fixture
@scopes_disabled()
def event(organizer, meta_prop): def event(organizer, meta_prop):
e = Event.objects.create( e = Event.objects.create(
organizer=organizer, name='Dummy', slug='dummy', organizer=organizer, name='Dummy', slug='dummy',
@@ -39,6 +42,7 @@ def event(organizer, meta_prop):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def event2(organizer, meta_prop): def event2(organizer, meta_prop):
e = Event.objects.create( e = Event.objects.create(
organizer=organizer, name='Dummy2', slug='dummy2', organizer=organizer, name='Dummy2', slug='dummy2',
@@ -50,6 +54,7 @@ def event2(organizer, meta_prop):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def event3(organizer, meta_prop): def event3(organizer, meta_prop):
e = Event.objects.create( e = Event.objects.create(
organizer=organizer, name='Dummy3', slug='dummy3', organizer=organizer, name='Dummy3', slug='dummy3',
@@ -61,6 +66,7 @@ def event3(organizer, meta_prop):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def team(organizer): def team(organizer):
return Team.objects.create( return Team.objects.create(
organizer=organizer, organizer=organizer,
@@ -75,6 +81,7 @@ def team(organizer):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def device(organizer): def device(organizer):
return Device.objects.create( return Device.objects.create(
organizer=organizer, organizer=organizer,
@@ -91,6 +98,7 @@ def user():
@pytest.fixture @pytest.fixture
@scopes_disabled()
def user_client(client, team, user): def user_client(client, team, user):
team.can_view_orders = True team.can_view_orders = True
team.can_view_vouchers = True team.can_view_vouchers = True
@@ -102,6 +110,7 @@ def user_client(client, team, user):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def token_client(client, team): def token_client(client, team):
team.can_view_orders = True team.can_view_orders = True
team.can_view_vouchers = True team.can_view_vouchers = True
@@ -119,6 +128,7 @@ def device_client(client, device):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def subevent(event, meta_prop): def subevent(event, meta_prop):
event.has_subevents = True event.has_subevents = True
event.save() event.save()
@@ -129,6 +139,7 @@ def subevent(event, meta_prop):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def subevent2(event2, meta_prop): def subevent2(event2, meta_prop):
event2.has_subevents = True event2.has_subevents = True
event2.save() event2.save()
@@ -139,11 +150,13 @@ def subevent2(event2, meta_prop):
@pytest.fixture @pytest.fixture
@scopes_disabled()
def taxrule(event): def taxrule(event):
return event.tax_rules.create(name="VAT", rate=19) return event.tax_rules.create(name="VAT", rate=19)
@pytest.fixture @pytest.fixture
@scopes_disabled()
def taxrule2(event2): def taxrule2(event2):
return event2.tax_rules.create(name="VAT", rate=25) return event2.tax_rules.create(name="VAT", rate=25)

View File

@@ -13,7 +13,6 @@ def test_no_auth(client):
def test_session_auth_no_teams(client, user): def test_session_auth_no_teams(client, user):
client.login(email=user.email, password='dummy') client.login(email=user.email, password='dummy')
resp = client.get('/api/v1/organizers/') resp = client.get('/api/v1/organizers/')
print(resp.data)
assert resp.status_code == 200 assert resp.status_code == 200
assert len(resp.data['results']) == 0 assert len(resp.data['results']) == 0

View File

@@ -5,6 +5,7 @@ from unittest import mock
import pytest import pytest
from django.utils.timezone import now from django.utils.timezone import now
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import Question 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 ), format='json', data=res
) )
assert resp.status_code == 201 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.price == Decimal('23.00')
assert cp.item == item assert cp.item == item
assert cp.attendee_name_parts == {'full_name': 'Peter'} 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 ), format='json', data=res
) )
assert resp.status_code == 201 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.price == Decimal('23.00')
assert cp.item == item assert cp.item == item
assert cp.attendee_name_parts == {} 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 ), format='json', data=res
) )
assert resp.status_code == 201 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.price == Decimal('23.00')
assert cp.item == item assert cp.item == item
assert cp.attendee_name_parts == {'_legacy': 'Peter'} 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 ), format='json', data=res
) )
assert resp.status_code == 201 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.price == Decimal('23.00')
assert cp.item == item assert cp.item == item
assert len(cp.cart_id) > 48 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.status_code == 400
assert resp.data == {'item': ['The specified item does not belong to this event.']} 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['item'] = item.pk
res['variation'] = var2.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.status_code == 400
assert resp.data == {'non_field_errors': ['You cannot specify a variation for this item.']} 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['item'] = item.pk
res['variation'] = var1.pk res['variation'] = var1.pk
resp = token_client.post( resp = token_client.post(
@@ -361,7 +368,8 @@ def test_cartpos_expires_optional(token_client, organizer, event, item, quota, q
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.price == Decimal('23.00')
assert cp.item == item assert cp.item == item
assert cp.expires - now() > datetime.timedelta(minutes=25) 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 == { assert resp.data == {
'answers': [{'non_field_errors': ['You need to specify options if the question is of a choice type.']}]} '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'] = [ res['answers'][0]['options'] = [
question.options.first().pk, question.options.first().pk,
question.options.last().pk, question.options.last().pk,
@@ -445,8 +454,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.question == question assert answ.question == question
assert answ.answer == "XL, L" assert answ.answer == "XL, L"
@@ -460,8 +470,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "3.45" assert answ.answer == "3.45"
question.type = Question.TYPE_NUMBER question.type = Question.TYPE_NUMBER
@@ -486,8 +497,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "True" assert answ.answer == "True"
question.type = Question.TYPE_BOOLEAN question.type = Question.TYPE_BOOLEAN
@@ -499,8 +511,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "False" assert answ.answer == "False"
question.type = Question.TYPE_BOOLEAN question.type = Question.TYPE_BOOLEAN
@@ -523,8 +536,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "2018-05-14" assert answ.answer == "2018-05-14"
question.type = Question.TYPE_DATE question.type = Question.TYPE_DATE
@@ -548,8 +562,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "2018-05-14 13:00:00+00:00" assert answ.answer == "2018-05-14 13:00:00+00:00"
question.type = Question.TYPE_DATETIME question.type = Question.TYPE_DATETIME
@@ -574,8 +589,9 @@ def test_cartpos_create_answer_validation(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
pos = CartPosition.objects.get(pk=resp.data['id']) with scopes_disabled():
answ = pos.answers.first() pos = CartPosition.objects.get(pk=resp.data['id'])
answ = pos.answers.first()
assert answ.answer == "13:00:00" assert answ.answer == "13:00:00"
question.type = Question.TYPE_TIME question.type = Question.TYPE_TIME

View File

@@ -6,6 +6,7 @@ from unittest import mock
import pytest import pytest
from django.utils.timezone import now from django.utils.timezone import now
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import scopes_disabled
from i18nfield.strings import LazyI18nString from i18nfield.strings import LazyI18nString
from pytz import UTC from pytz import UTC
@@ -157,7 +158,8 @@ def test_list_list(token_client, organizer, event, clist, item, subevent):
resp = token_client.get( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) '/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results'] 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( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) '/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
assert [] == resp.data['results'] assert [] == resp.data['results']
@@ -188,10 +190,11 @@ def test_list_create(token_client, organizer, event, item, item_on_wrong_event):
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
cl = CheckinList.objects.get(pk=resp.data['id']) with scopes_disabled():
assert cl.name == "VIP" cl = CheckinList.objects.get(pk=resp.data['id'])
assert cl.limit_products.count() == 1 assert cl.name == "VIP"
assert not cl.all_products assert cl.limit_products.count() == 1
assert not cl.all_products
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/checkinlists/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 200 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" assert cl.name == "VIP"
@pytest.mark.django_db @pytest.mark.django_db
def test_list_all_items_positions(token_client, organizer, event, clist, clist_all, item, other_item, order): def test_list_all_items_positions(token_client, organizer, event, clist, clist_all, item, other_item, order):
p1 = dict(TEST_ORDERPOSITION1_RES) with scopes_disabled():
p1["id"] = order.positions.first().pk p1 = dict(TEST_ORDERPOSITION1_RES)
p1["item"] = item.pk p1["id"] = order.positions.first().pk
p2 = dict(TEST_ORDERPOSITION2_RES) p1["item"] = item.pk
p2["id"] = order.positions.last().pk p2 = dict(TEST_ORDERPOSITION2_RES)
p2["item"] = other_item.pk p2["id"] = order.positions.last().pk
p2["item"] = other_item.pk
# All items # All items
resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/?ordering=positionid'.format( 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'] assert [p1, p2] == resp.data['results']
# Check-ins on other list ignored # 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( resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/?ordering=positionid'.format(
organizer.slug, event.slug, clist_all.pk 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'] assert [] == resp.data['results']
# Only checked in # 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'] = [ p1['checkins'] = [
{ {
'list': clist_all.pk, '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 # Order by checkin date
time.sleep(1) 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'] = [ p2['checkins'] = [
{ {
'list': clist_all.pk, '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 @pytest.mark.django_db
def test_list_limited_items_positions(token_client, organizer, event, clist, item, order): def test_list_limited_items_positions(token_client, organizer, event, clist, item, order):
p1 = dict(TEST_ORDERPOSITION1_RES) p1 = dict(TEST_ORDERPOSITION1_RES)
p1["id"] = order.positions.first().pk with scopes_disabled():
p1["id"] = order.positions.first().pk
p1["item"] = item.pk p1["item"] = item.pk
# All items # All items
@@ -402,12 +411,13 @@ def test_list_limited_items_positions(token_client, organizer, event, clist, ite
@pytest.mark.django_db @pytest.mark.django_db
def test_list_limited_items_position_detail(token_client, organizer, event, clist, item, order): def test_list_limited_items_position_detail(token_client, organizer, event, clist, item, order):
p1 = dict(TEST_ORDERPOSITION1_RES) p1 = dict(TEST_ORDERPOSITION1_RES)
p1["id"] = order.positions.first().pk with scopes_disabled():
p1["id"] = order.positions.first().pk
p1["item"] = item.pk p1["item"] = item.pk
# All items # All items
resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/'.format( 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 resp.status_code == 200
assert p1 == resp.data assert p1 == resp.data
@@ -415,12 +425,13 @@ def test_list_limited_items_position_detail(token_client, organizer, event, clis
@pytest.mark.django_db @pytest.mark.django_db
def test_status(token_client, organizer, event, clist_all, item, other_item, order): def test_status(token_client, organizer, event, clist_all, item, other_item, order):
op = order.positions.first() with scopes_disabled():
var1 = item.variations.create(value="XS") op = order.positions.first()
var2 = item.variations.create(value="S") var1 = item.variations.create(value="XS")
op.variation = var1 var2 = item.variations.create(value="S")
op.save() op.variation = var1
Checkin.objects.create(position=op, list=clist_all) op.save()
Checkin.objects.create(position=op, list=clist_all)
resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/status/'.format( resp = token_client.get('/api/v1/organizers/{}/events/{}/checkinlists/{}/status/'.format(
organizer.slug, event.slug, clist_all.pk, 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): def test_custom_datetime(token_client, organizer, clist, event, order):
dt = now() - datetime.timedelta(days=1) dt = now() - datetime.timedelta(days=1)
dt = dt.replace(microsecond=0) 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( 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() 'datetime': dt.isoformat()
}, format='json') }, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
assert Checkin.objects.last().datetime == dt with scopes_disabled():
assert Checkin.objects.last().datetime == dt
@pytest.mark.django_db @pytest.mark.django_db
def test_name_fallback(token_client, organizer, clist, event, order): def test_name_fallback(token_client, organizer, clist, event, order):
order.invoice_address.name_parts = {'_legacy': 'Paul'} order.invoice_address.name_parts = {'_legacy': 'Paul'}
order.invoice_address.save() order.invoice_address.save()
op = order.positions.first() with scopes_disabled():
op = order.positions.first()
op.attendee_name_cached = None op.attendee_name_cached = None
op.attendee_name_parts = {} op.attendee_name_parts = {}
op.save() op.save()
@@ -493,8 +508,10 @@ def test_name_fallback(token_client, organizer, clist, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_by_secret(token_client, organizer, clist, event, order): 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( 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') ), {}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
@@ -502,13 +519,15 @@ def test_by_secret(token_client, organizer, clist, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_only_once(token_client, organizer, clist, event, order): 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( 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') ), {}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'error' assert resp.data['status'] == 'error'
@@ -517,13 +536,15 @@ def test_only_once(token_client, organizer, clist, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_reupload_same_nonce(token_client, organizer, clist, event, order): 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( 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') ), {'nonce': 'foobar'}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {'nonce': 'foobar'}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
@@ -531,13 +552,15 @@ def test_reupload_same_nonce(token_client, organizer, clist, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_multiple_different_list(token_client, organizer, clist, clist_all, event, order): 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( 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') ), {'nonce': 'foobar'}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {'nonce': 'baz'}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' 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 @pytest.mark.django_db
def test_forced_multiple(token_client, organizer, clist, event, order): 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( 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') ), {}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {'force': True}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
@@ -559,17 +584,19 @@ def test_forced_multiple(token_client, organizer, clist, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_require_paid(token_client, organizer, clist, event, order): def test_require_paid(token_client, organizer, clist, event, order):
with scopes_disabled():
p = order.positions.first()
order.status = Order.STATUS_PENDING order.status = Order.STATUS_PENDING
order.save() order.save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'error' assert resp.data['status'] == 'error'
assert resp.data['reason'] == 'unpaid' assert resp.data['reason'] == 'unpaid'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {'ignore_unpaid': True}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'error' assert resp.data['status'] == 'error'
@@ -579,14 +606,14 @@ def test_require_paid(token_client, organizer, clist, event, order):
clist.save() clist.save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'error' assert resp.data['status'] == 'error'
assert resp.data['reason'] == 'unpaid' assert resp.data['reason'] == 'unpaid'
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {'ignore_unpaid': True}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
@@ -603,88 +630,105 @@ def question(event, item):
@pytest.mark.django_db @pytest.mark.django_db
def test_question_number(token_client, organizer, clist, event, order, question): 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].type = 'N'
question[0].save() question[0].save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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( 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') ), {'answers': {question[0].pk: "3.24"}}, format='json')
print(resp.data)
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' 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 @pytest.mark.django_db
def test_question_choice(token_client, organizer, clist, event, order, question): 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( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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( 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') ), {'answers': {question[0].pk: str(question[1].pk)}}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
assert order.positions.first().answers.get(question=question[0]).answer == 'M' with scopes_disabled():
assert list(order.positions.first().answers.get(question=question[0]).options.all()) == [question[1]] 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 @pytest.mark.django_db
def test_question_invalid(token_client, organizer, clist, event, order, question): 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( 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') ), {'answers': {question[0].pk: "A"}}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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 @pytest.mark.django_db
def test_question_required(token_client, organizer, clist, event, order, question): def test_question_required(token_client, organizer, clist, event, order, question):
with scopes_disabled():
p = order.positions.first()
question[0].required = True question[0].required = True
question[0].save() question[0].save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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( 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') ), {'answers': {question[0].pk: ""}}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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 @pytest.mark.django_db
def test_question_optional(token_client, organizer, clist, event, order, question): def test_question_optional(token_client, organizer, clist, event, order, question):
with scopes_disabled():
p = order.positions.first()
question[0].required = False question[0].required = False
question[0].save() question[0].save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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( 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') ), {'answers': {question[0].pk: ""}}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
@@ -692,20 +736,24 @@ def test_question_optional(token_client, organizer, clist, event, order, questio
@pytest.mark.django_db @pytest.mark.django_db
def test_question_multiple_choice(token_client, organizer, clist, event, order, question): 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].type = 'M'
question[0].save() question[0].save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( 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') ), {}, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data['status'] == 'incomplete' 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( 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') ), {'answers': {question[0].pk: "{},{}".format(question[1].pk, question[2].pk)}}, format='json')
assert resp.status_code == 201 assert resp.status_code == 201
assert resp.data['status'] == 'ok' assert resp.data['status'] == 'ok'
assert order.positions.first().answers.get(question=question[0]).answer == 'M, L' with scopes_disabled():
assert set(order.positions.first().answers.get(question=question[0]).options.all()) == {question[1], question[2]} 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]}

View File

@@ -5,6 +5,7 @@ from unittest import mock
import pytest import pytest
from django.conf import settings from django.conf import settings
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import Event, InvoiceAddress, Order, OrderPosition 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' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
assert not organizer.events.get(slug="2030").testmode with scopes_disabled():
assert organizer.events.get(slug="2030").meta_values.filter( assert not organizer.events.get(slug="2030").testmode
property__name=meta_prop.name, value="Conference" assert organizer.events.get(slug="2030").meta_values.filter(
).exists() property__name=meta_prop.name, value="Conference"
assert organizer.events.get(slug="2030").plugins == settings.PRETIX_PLUGINS_DEFAULT ).exists()
assert organizer.events.get(slug="2030").plugins == settings.PRETIX_PLUGINS_DEFAULT
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/'.format(organizer.slug), '/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 assert resp.status_code == 201
cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030') with scopes_disabled():
assert cloned_event.plugins == 'pretix.plugins.ticketoutputpdf' cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030')
assert cloned_event.is_public is False assert cloned_event.plugins == 'pretix.plugins.ticketoutputpdf'
assert cloned_event.testmode assert cloned_event.is_public is False
assert organizer.events.get(slug="2030").meta_values.filter( assert cloned_event.testmode
property__name=meta_prop.name, value="Conference" assert organizer.events.get(slug="2030").meta_values.filter(
).exists() property__name=meta_prop.name, value="Conference"
).exists()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/clone/'.format(organizer.slug, event.slug), '/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 assert resp.status_code == 201
cloned_event = Event.objects.get(organizer=organizer.pk, slug='2031') with scopes_disabled():
assert cloned_event.plugins == "pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf" cloned_event = Event.objects.get(organizer=organizer.pk, slug='2031')
assert cloned_event.is_public is True assert cloned_event.plugins == "pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf"
assert organizer.events.get(slug="2031").meta_values.filter( assert cloned_event.is_public is True
property__name=meta_prop.name, value="Conference" assert organizer.events.get(slug="2031").meta_values.filter(
).exists() property__name=meta_prop.name, value="Conference"
).exists()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/clone/'.format(organizer.slug, event.slug), '/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 assert resp.status_code == 201
cloned_event = Event.objects.get(organizer=organizer.pk, slug='2032') with scopes_disabled():
assert cloned_event.plugins == "" cloned_event = Event.objects.get(organizer=organizer.pk, slug='2032')
assert cloned_event.plugins == ""
@pytest.mark.django_db @pytest.mark.django_db
@@ -388,11 +393,12 @@ def test_event_update(token_client, organizer, event, item, meta_prop):
format='json' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
event = Event.objects.get(organizer=organizer.pk, slug=resp.data['slug']) with scopes_disabled():
assert event.currency == "DKK" event = Event.objects.get(organizer=organizer.pk, slug=resp.data['slug'])
assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( assert event.currency == "DKK"
property__name=meta_prop.name, value="Conference" assert organizer.events.get(slug=resp.data['slug']).meta_values.filter(
).exists() property__name=meta_prop.name, value="Conference"
).exists()
resp = token_client.patch( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
assert organizer.events.get(slug=resp.data['slug']).meta_values.filter( with scopes_disabled():
property__name=meta_prop.name, value="Workshop" assert organizer.events.get(slug=resp.data['slug']).meta_values.filter(
).exists() property__name=meta_prop.name, value="Workshop"
).exists()
resp = token_client.patch( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
assert not organizer.events.get(slug=resp.data['slug']).meta_values.filter( with scopes_disabled():
property__name=meta_prop.name assert not organizer.events.get(slug=resp.data['slug']).meta_values.filter(
).exists() property__name=meta_prop.name
).exists()
resp = token_client.patch( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug), '/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): def test_event_delete(token_client, organizer, event):
resp = token_client.delete('/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug))
assert resp.status_code == 204 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 @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.status_code == 403
assert resp.content.decode() == '{"detail":"The event can not be deleted as it already contains orders. Please ' \ 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."}' '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()

View File

@@ -5,6 +5,7 @@ from unittest import mock
import pytest import pytest
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import ( from pretix.base.models import (
@@ -169,7 +170,8 @@ def test_category_update(token_client, organizer, event, team, category):
format='json' format='json'
) )
assert resp.status_code == 200 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 @pytest.mark.django_db
@@ -189,8 +191,9 @@ def test_category_delete(token_client, organizer, event, category3, item):
resp = token_client.delete( resp = token_client.delete(
'/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event.slug, category3.pk)) '/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event.slug, category3.pk))
assert resp.status_code == 204 assert resp.status_code == 204
assert not event.categories.filter(pk=category3.id).exists() with scopes_disabled():
assert Item.objects.get(pk=item.pk).category is None assert not event.categories.filter(pk=category3.id).exists()
assert Item.objects.get(pk=item.pk).category is None
@pytest.fixture @pytest.fixture
@@ -308,7 +311,8 @@ def test_item_detail(token_client, organizer, event, team, item):
@pytest.mark.django_db @pytest.mark.django_db
def test_item_detail_variations(token_client, organizer, event, team, item): 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 = dict(TEST_ITEM_RES)
res["id"] = item.pk res["id"] = item.pk
res["variations"] = [{ res["variations"] = [{
@@ -349,8 +353,9 @@ def test_item_detail_addons(token_client, organizer, event, team, item, category
@pytest.mark.django_db @pytest.mark.django_db
def test_item_detail_bundles(token_client, organizer, event, team, item, category): def test_item_detail_bundles(token_client, organizer, event, team, item, category):
i = event.items.create(name="Included thing", default_price=2) with scopes_disabled():
item.bundles.create(bundled_item=i, count=1, designated_price=2) 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 = dict(TEST_ITEM_RES)
res["id"] = item.pk res["id"] = item.pk
@@ -398,7 +403,8 @@ def test_item_create(token_client, organizer, event, item, category, taxrule):
format='json' format='json'
) )
assert resp.status_code == 201 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 @pytest.mark.django_db
@@ -445,9 +451,10 @@ def test_item_create_with_variation(token_client, organizer, event, item, catego
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
new_item = Item.objects.get(pk=resp.data['id']) with scopes_disabled():
assert new_item.variations.first().value.localize('de') == "Kommentar" new_item = Item.objects.get(pk=resp.data['id'])
assert new_item.variations.first().value.localize('en') == "Comment" assert new_item.variations.first().value.localize('de') == "Kommentar"
assert new_item.variations.first().value.localize('en') == "Comment"
@pytest.mark.django_db @pytest.mark.django_db
@@ -490,10 +497,11 @@ def test_item_create_with_addon(token_client, organizer, event, item, category,
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
item = Item.objects.get(pk=resp.data['id']) with scopes_disabled():
assert item.addons.first().addon_category == category item = Item.objects.get(pk=resp.data['id'])
assert item.addons.first().max_count == 10 assert item.addons.first().addon_category == category
assert 2 == Item.objects.all().count() assert item.addons.first().max_count == 10
assert 2 == Item.objects.all().count()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), '/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.status_code == 400
assert resp.content.decode() == '{"addons":["The add-on\'s category must belong to the same event as the item."]}' 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), '/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.status_code == 400
assert resp.content.decode() == '{"addons":["The maximum count needs to be greater than the minimum count."]}' 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), '/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":["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 '{"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 @pytest.mark.django_db
def test_item_create_with_bundle(token_client, organizer, event, item, category, item2, taxrule): 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
item = Item.objects.get(pk=resp.data['id']) with scopes_disabled():
b = item.bundles.first() item = Item.objects.get(pk=resp.data['id'])
b = item.bundles.first()
assert b.bundled_item == i assert b.bundled_item == i
assert b.bundled_variation is None assert b.bundled_variation is None
assert b.count == 2 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.status_code == 400
assert resp.content.decode() == '{"bundles":["The bundled item must belong to the same event as the item."]}' 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk), '/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): 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)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk))
assert resp.status_code == 204 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 @pytest.mark.django_db
def test_items_with_order_position_not_delete(token_client, organizer, event, item, order_position): 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)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk))
assert resp.status_code == 403 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 @pytest.mark.django_db
def test_items_with_cart_position_delete(token_client, organizer, event, item, cart_position): 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)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug, item.pk))
assert resp.status_code == 204 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 @pytest.fixture
@@ -996,7 +1014,8 @@ def test_variations_create(token_client, organizer, event, item, variation):
format='json' format='json'
) )
assert resp.status_code == 201 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.position == 1
assert var.price == 23.0 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): 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)) 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 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 @pytest.mark.django_db
def test_variations_with_order_position_not_delete(token_client, organizer, event, item, order, variations, order_position): 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)) 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.status_code == 403
assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it has already been ordered ' \ 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 ' \ 'by a user or currently is in a users\'s cart. Please set the variation as ' \
'\'inactive\' instead."}' '\'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 @pytest.mark.django_db
def test_variations_with_cart_position_not_delete(token_client, organizer, event, item, variations, cart_position): 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)) 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.status_code == 403
assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it has already been ordered ' \ 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 ' \ 'by a user or currently is in a users\'s cart. Please set the variation as ' \
'\'inactive\' instead."}' '\'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 @pytest.mark.django_db
def test_only_variation_not_delete(token_client, organizer, event, item, variation): 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)) 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.status_code == 403
assert resp.content.decode() == '{"detail":"This variation cannot be deleted because it is the only variation. ' \ 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 ' \ 'Changing a product with variations to a product without variations is not ' \
'allowed."}' 'allowed."}'
assert item.variations.filter(pk=variation.id).exists() with scopes_disabled():
assert item.variations.filter(pk=variation.id).exists()
@pytest.fixture @pytest.fixture
@@ -1144,7 +1170,8 @@ def test_bundles_create(token_client, organizer, event, item, item2, item3):
format='json' format='json'
) )
assert resp.status_code == 201 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_item == item3
assert b.bundled_variation is None assert b.bundled_variation is None
assert b.designated_price == 1.5 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.status_code == 400
assert resp.content.decode() == '{"non_field_errors":["The bundled item must not be the same item as the bundling one."]}' 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/items/{}/bundles/'.format(organizer.slug, event.slug, item.pk), '/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' format='json'
) )
assert resp.status_code == 200 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 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, resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/bundles/{}/'.format(organizer.slug, event.slug,
item.pk, bundle.pk)) item.pk, bundle.pk))
assert resp.status_code == 204 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 @pytest.fixture
@@ -1270,7 +1300,8 @@ def test_addons_create(token_client, organizer, event, item, category, category2
format='json' format='json'
) )
assert resp.status_code == 201 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.position == 1
assert addon.addon_category == category assert addon.addon_category == category
@@ -1315,7 +1346,8 @@ def test_addons_update(token_client, organizer, event, item, addon):
format='json' format='json'
) )
assert resp.status_code == 200 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.min_count == 100
assert a.max_count == 101 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, resp = token_client.delete('/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug,
item.pk, addon.pk)) item.pk, addon.pk))
assert resp.status_code == 204 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 @pytest.fixture
@@ -1372,7 +1405,8 @@ def test_quota_list(token_client, organizer, event, quota, item, subevent):
resp = token_client.get( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) '/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results'] 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( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk)) '/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
assert [] == resp.data['results'] assert [] == resp.data['results']
@@ -1404,7 +1438,8 @@ def test_quota_create(token_client, organizer, event, event2, item):
format='json' format='json'
) )
assert resp.status_code == 201 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.name == "Ticket Quota"
assert quota.size == 200 assert quota.size == 200
@@ -1550,7 +1585,8 @@ def test_quota_update(token_client, organizer, event, quota, item):
format='json' format='json'
) )
assert resp.status_code == 200 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.name == "Ticket Quota Update"
assert quota.size == 111 assert quota.size == 111
assert quota.all_logentries().count() == 1 assert quota.all_logentries().count() == 1
@@ -1566,7 +1602,8 @@ def test_quota_update_unchanged(token_client, organizer, event, quota, item):
format='json' format='json'
) )
assert resp.status_code == 200 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.size == 200
assert quota.all_logentries().count() == 0 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): 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)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/quotas/{}/'.format(organizer.slug, event.slug, quota.pk))
assert resp.status_code == 204 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 @pytest.mark.django_db
@@ -1690,11 +1728,12 @@ def test_question_create(token_client, organizer, event, event2, item):
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
question = Question.objects.get(pk=resp.data['id']) with scopes_disabled():
assert question.question == "What's your name?" question = Question.objects.get(pk=resp.data['id'])
assert question.type == "S" assert question.question == "What's your name?"
assert question.identifier is not None assert question.type == "S"
assert len(question.items.all()) == 1 assert question.identifier is not None
assert len(question.items.all()) == 1
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/questions/'.format(organizer.slug, event2.slug), '/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' format='json'
) )
assert resp.status_code == 201 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 assert q2.dependency_question == question
@@ -1799,14 +1839,16 @@ def test_question_update(token_client, organizer, event, question):
format='json' format='json'
) )
assert resp.status_code == 200 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.question == "What's your shoe size?"
assert question.type == "N" assert question.type == "N"
@pytest.mark.django_db @pytest.mark.django_db
def test_question_update_circular_dependency(token_client, organizer, event, question): 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/questions/{}/'.format(organizer.slug, event.slug, question.pk), '/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): 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)) resp = token_client.delete('/api/v1/organizers/{}/events/{}/questions/{}/'.format(organizer.slug, event.slug, question.pk))
assert resp.status_code == 204 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 = { TEST_OPTIONS_RES = {
@@ -1881,7 +1924,8 @@ def test_options_create(token_client, organizer, event, question):
format='json' format='json'
) )
assert resp.status_code == 201 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" assert option.answer == "A"
resp = token_client.post( resp = token_client.post(
@@ -1907,7 +1951,8 @@ def test_options_update(token_client, organizer, event, question, option):
format='json' format='json'
) )
assert resp.status_code == 200 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" 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 organizer.slug, event.slug, question.pk, option.pk
)) ))
assert resp.status_code == 204 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 @pytest.mark.django_db
@@ -1948,11 +1994,12 @@ def test_question_create_with_option(token_client, organizer, event, item):
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
question = Question.objects.get(pk=resp.data['id']) with scopes_disabled():
assert str(question.options.first().answer) == "A" question = Question.objects.get(pk=resp.data['id'])
assert question.options.first().identifier is not None assert str(question.options.first().answer) == "A"
assert str(question.options.last().answer) == "B" assert question.options.first().identifier is not None
assert 2 == question.options.count() assert str(question.options.last().answer) == "B"
assert 2 == question.options.count()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/questions/'.format(organizer.slug, event.slug), '/api/v1/organizers/{}/events/{}/questions/'.format(organizer.slug, event.slug),

View File

@@ -8,6 +8,7 @@ import pytest
from django.core import mail as djmail from django.core import mail as djmail
from django.utils.timezone import now from django.utils.timezone import now
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from stripe.error import APIConnectionError from stripe.error import APIConnectionError
from tests.plugins.stripe.test_provider import MockedCharge from tests.plugins.stripe.test_provider import MockedCharge
@@ -229,7 +230,8 @@ TEST_ORDER_RES = {
@pytest.mark.django_db @pytest.mark.django_db
def test_order_list(token_client, organizer, event, order, item, taxrule, question): def test_order_list(token_client, organizer, event, order, item, taxrule, question):
res = dict(TEST_ORDER_RES) 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]["item"] = item.pk
res["positions"][0]["answers"][0]["question"] = question.pk res["positions"][0]["answers"][0]["question"] = question.pk
res["last_modified"] = order.last_modified.isoformat().replace('+00:00', 'Z') 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 @pytest.mark.django_db
def test_order_detail(token_client, organizer, event, order, item, taxrule, question): def test_order_detail(token_client, organizer, event, order, item, taxrule, question):
res = dict(TEST_ORDER_RES) 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]["item"] = item.pk
res["fees"][0]["tax_rule"] = taxrule.pk res["fees"][0]["tax_rule"] = taxrule.pk
res["positions"][0]["answers"][0]["question"] = question.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( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/confirm/'.format(
organizer.slug, event.slug, order.code organizer.slug, event.slug, order.code
), format='json', data={'force': True}) ), 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 resp.status_code == 200
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED 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( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/cancel/'.format(
organizer.slug, event.slug, order.code 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 resp.status_code == 200
assert p.state == OrderPayment.PAYMENT_STATE_CANCELED assert p.state == OrderPayment.PAYMENT_STATE_CANCELED
@@ -365,7 +370,8 @@ def test_payment_cancel(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_payment_refund_fail(token_client, organizer, event, order, monkeypatch): 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( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/2/refund/'.format(
organizer.slug, event.slug, order.code organizer.slug, event.slug, order.code
), format='json', data={ ), format='json', data={
@@ -424,15 +430,16 @@ def test_payment_refund_success(token_client, organizer, event, order, monkeypat
c.refunds.create = refund_create c.refunds.create = refund_create
return c return c
p1 = order.payments.create( with scopes_disabled():
provider='stripe', p1 = order.payments.create(
state='confirmed', provider='stripe',
amount=Decimal('23.00'), state='confirmed',
payment_date=order.datetime, amount=Decimal('23.00'),
info=json.dumps({ payment_date=order.datetime,
'id': 'ch_123345345' info=json.dumps({
}) 'id': 'ch_123345345'
) })
)
monkeypatch.setattr("stripe.Charge.retrieve", charge_retr) monkeypatch.setattr("stripe.Charge.retrieve", charge_retr)
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format(
organizer.slug, event.slug, order.code, p1.local_id 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, 'mark_canceled': False,
}) })
assert resp.status_code == 200 assert resp.status_code == 200
r = order.refunds.get(local_id=resp.data['local_id']) with scopes_disabled():
assert r.provider == "stripe" r = order.refunds.get(local_id=resp.data['local_id'])
assert r.state == OrderRefund.REFUND_STATE_DONE assert r.provider == "stripe"
assert r.source == OrderRefund.REFUND_SOURCE_ADMIN assert r.state == OrderRefund.REFUND_STATE_DONE
assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
@pytest.mark.django_db @pytest.mark.django_db
@@ -457,15 +465,16 @@ def test_payment_refund_unavailable(token_client, organizer, event, order, monke
c.refunds.create = refund_create c.refunds.create = refund_create
return c return c
p1 = order.payments.create( with scopes_disabled():
provider='stripe', p1 = order.payments.create(
state='confirmed', provider='stripe',
amount=Decimal('23.00'), state='confirmed',
payment_date=order.datetime, amount=Decimal('23.00'),
info=json.dumps({ payment_date=order.datetime,
'id': 'ch_123345345' info=json.dumps({
}) 'id': 'ch_123345345'
) })
)
monkeypatch.setattr("stripe.Charge.retrieve", charge_retr) monkeypatch.setattr("stripe.Charge.retrieve", charge_retr)
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/payments/{}/refund/'.format(
organizer.slug, event.slug, order.code, p1.local_id 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.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.'} 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.provider == "stripe"
assert r.state == OrderRefund.REFUND_STATE_FAILED assert r.state == OrderRefund.REFUND_STATE_FAILED
assert r.source == OrderRefund.REFUND_SOURCE_ADMIN assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
@@ -499,13 +509,15 @@ def test_refund_detail(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_refund_done(token_client, organizer, event, order): 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.state = 'transit'
r.save() r.save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/done/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/done/'.format(
organizer.slug, event.slug, order.code 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 resp.status_code == 200
assert r.state == OrderRefund.REFUND_STATE_DONE assert r.state == OrderRefund.REFUND_STATE_DONE
@@ -517,12 +529,14 @@ def test_refund_done(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_refund_process_mark_refunded(token_client, organizer, event, order): def test_refund_process_mark_refunded(token_client, organizer, event, order):
p = order.payments.get(local_id=1) with scopes_disabled():
p.create_external_refund() p = order.payments.get(local_id=1)
p.create_external_refund()
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format(
organizer.slug, event.slug, order.code organizer.slug, event.slug, order.code
), format='json', data={'mark_canceled': True}) ), 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 resp.status_code == 200
assert r.state == OrderRefund.REFUND_STATE_DONE assert r.state == OrderRefund.REFUND_STATE_DONE
order.refresh_from_db() order.refresh_from_db()
@@ -536,12 +550,14 @@ def test_refund_process_mark_refunded(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_refund_process_mark_pending(token_client, organizer, event, order): def test_refund_process_mark_pending(token_client, organizer, event, order):
p = order.payments.get(local_id=1) with scopes_disabled():
p.create_external_refund() p = order.payments.get(local_id=1)
p.create_external_refund()
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/2/process/'.format(
organizer.slug, event.slug, order.code organizer.slug, event.slug, order.code
), format='json', data={'mark_canceled': False}) ), 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 resp.status_code == 200
assert r.state == OrderRefund.REFUND_STATE_DONE assert r.state == OrderRefund.REFUND_STATE_DONE
order.refresh_from_db() order.refresh_from_db()
@@ -550,13 +566,15 @@ def test_refund_process_mark_pending(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_refund_cancel(token_client, organizer, event, order): 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.state = 'transit'
r.save() r.save()
resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/cancel/'.format( resp = token_client.post('/api/v1/organizers/{}/events/{}/orders/{}/refunds/1/cancel/'.format(
organizer.slug, event.slug, order.code 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 resp.status_code == 200
assert r.state == OrderRefund.REFUND_STATE_CANCELED 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 = copy.copy(item)
i2.pk = None i2.pk = None
i2.save() i2.save()
var = item.variations.create(value="Children") with scopes_disabled():
var2 = item.variations.create(value="Children") var = item.variations.create(value="Children")
res = dict(TEST_ORDERPOSITION_RES) var2 = item.variations.create(value="Children")
op = order.positions.first() res = dict(TEST_ORDERPOSITION_RES)
op = order.positions.first()
op.variation = var op.variation = var
op.save() op.save()
res["id"] = op.pk 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)) '/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
assert [] == resp.data['results'] assert [] == resp.data['results']
cl = event.checkin_lists.create(name="Default") with scopes_disabled():
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl) 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}] res['checkins'] = [{'datetime': '2017-12-26T10:00:00Z', 'list': cl.pk}]
resp = token_client.get( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)) '/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 @pytest.mark.django_db
def test_orderposition_detail(token_client, organizer, event, order, item, question): def test_orderposition_detail(token_client, organizer, event, order, item, question):
res = dict(TEST_ORDERPOSITION_RES) res = dict(TEST_ORDERPOSITION_RES)
op = order.positions.first() with scopes_disabled():
op = order.positions.first()
res["id"] = op.pk res["id"] = op.pk
res["item"] = item.pk res["item"] = item.pk
res["answers"][0]["question"] = question.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 @pytest.mark.django_db
def test_orderposition_detail_no_canceled(token_client, organizer, event, order, item, question): 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, resp = token_client.get('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(organizer.slug, event.slug,
op.pk)) op.pk))
assert resp.status_code == 404 assert resp.status_code == 404
@@ -719,33 +741,36 @@ def test_orderposition_detail_no_canceled(token_client, organizer, event, order,
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_delete(token_client, organizer, event, order, item, question): 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( resp = token_client.delete('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(
organizer.slug, event.slug, op.pk organizer.slug, event.slug, op.pk
)) ))
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data == ['This operation would leave the order empty. Please cancel the order itself instead.'] assert resp.data == ['This operation would leave the order empty. Please cancel the order itself instead.']
op2 = OrderPosition.objects.create( with scopes_disabled():
order=order, op2 = OrderPosition.objects.create(
item=item, order=order,
variation=None, item=item,
price=Decimal("23"), variation=None,
attendee_name_parts={"full_name": "Peter", "_scheme": "full"}, price=Decimal("23"),
secret="foobar", attendee_name_parts={"full_name": "Peter", "_scheme": "full"},
pseudonymization_id="BAZ", secret="foobar",
) pseudonymization_id="BAZ",
order.refresh_from_db() )
order.total = Decimal('46') order.refresh_from_db()
order.save() order.total = Decimal('46')
assert order.positions.count() == 2 order.save()
assert order.positions.count() == 2
resp = token_client.delete('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format( resp = token_client.delete('/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format(
organizer.slug, event.slug, op2.pk organizer.slug, event.slug, op2.pk
)) ))
assert resp.status_code == 204 assert resp.status_code == 204
assert order.positions.count() == 1 with scopes_disabled():
assert order.all_positions.count() == 3 assert order.positions.count() == 1
assert order.all_positions.count() == 3
order.refresh_from_db() order.refresh_from_db()
assert order.total == Decimal('23.25') assert order.total == Decimal('23.25')
@@ -822,7 +847,8 @@ def test_invoice_list(token_client, organizer, event, order, invoice):
organizer.slug, event.slug)) organizer.slug, event.slug))
assert [] == resp.data['results'] 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( resp = token_client.get('/api/v1/organizers/{}/events/{}/invoices/?is_cancellation=false'.format(
organizer.slug, event.slug)) organizer.slug, event.slug))
@@ -854,7 +880,8 @@ def test_invoice_detail(token_client, organizer, event, invoice):
@pytest.mark.django_db @pytest.mark.django_db
def test_invoice_regenerate(token_client, organizer, event, invoice): 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( resp = token_client.post('/api/v1/organizers/{}/events/{}/invoices/{}/regenerate/'.format(
organizer.slug, event.slug, invoice.number organizer.slug, event.slug, invoice.number
@@ -866,7 +893,8 @@ def test_invoice_regenerate(token_client, organizer, event, invoice):
@pytest.mark.django_db @pytest.mark.django_db
def test_invoice_reissue(token_client, organizer, event, invoice): 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( resp = token_client.post('/api/v1/organizers/{}/events/{}/invoices/{}/reissue/'.format(
organizer.slug, event.slug, invoice.number organizer.slug, event.slug, invoice.number
@@ -874,8 +902,9 @@ def test_invoice_reissue(token_client, organizer, event, invoice):
assert resp.status_code == 204 assert resp.status_code == 204
invoice.refresh_from_db() invoice.refresh_from_db()
assert "ACME Ltd" not in invoice.invoice_to assert "ACME Ltd" not in invoice.invoice_to
assert invoice.order.invoices.count() == 3 with scopes_disabled():
invoice = invoice.order.invoices.last() assert invoice.order.invoices.count() == 3
invoice = invoice.order.invoices.last()
assert "ACME Ltd" in invoice.invoice_to 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): def test_order_mark_paid_canceled_keep_fee(token_client, organizer, event, order):
order.status = Order.STATUS_PAID order.status = Order.STATUS_PAID
order.save() 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/mark_canceled/'.format( '/api/v1/organizers/{}/events/{}/orders/{}/mark_canceled/'.format(
organizer.slug, event.slug, order.code organizer.slug, event.slug, order.code
@@ -1186,7 +1216,8 @@ def test_order_extend_expired_quota_waiting_list(token_client, organizer, event,
order.save() order.save()
quota.size = 1 quota.size = 1
quota.save() 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") newdate = (now() + datetime.timedelta(days=20)).strftime("%Y-%m-%d")
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/extend/'.format( '/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 ), format='json', data=res
) )
assert resp.status_code == 201 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.email == "dummy@dummy.test"
assert o.locale == "en" assert o.locale == "en"
assert o.total == Decimal('23.25') 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 o.sales_channel == "web"
assert not o.testmode assert not o.testmode
p = o.payments.first() with scopes_disabled():
p = o.payments.first()
assert p.provider == "banktransfer" assert p.provider == "banktransfer"
assert p.amount == o.total assert p.amount == o.total
assert p.state == "created" assert p.state == "created"
fee = o.fees.first() with scopes_disabled():
fee = o.fees.first()
assert fee.fee_type == "payment" assert fee.fee_type == "payment"
assert fee.value == Decimal('0.25') assert fee.value == Decimal('0.25')
ia = o.invoice_address ia = o.invoice_address
assert ia.company == "Sample company" assert ia.company == "Sample company"
assert ia.name_parts == {"full_name": "Fo", "_scheme": "full"} assert ia.name_parts == {"full_name": "Fo", "_scheme": "full"}
assert ia.name_cached == "Fo" assert ia.name_cached == "Fo"
assert o.positions.count() == 1 with scopes_disabled():
pos = o.positions.first() assert o.positions.count() == 1
pos = o.positions.first()
assert pos.item == item assert pos.item == item
assert pos.price == Decimal("23.00") assert pos.price == Decimal("23.00")
assert pos.attendee_name_parts == {"full_name": "Peter", "_scheme": "full"} 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.question == question
assert answ.answer == "S" assert answ.answer == "S"
@@ -1395,9 +1431,10 @@ def test_order_create_invoice_address_optional(token_client, organizer, event, i
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
with pytest.raises(InvoiceAddress.DoesNotExist): o = Order.objects.get(code=resp.data['code'])
o.invoice_address with pytest.raises(InvoiceAddress.DoesNotExist):
o.invoice_address
@pytest.mark.django_db @pytest.mark.django_db
@@ -1412,7 +1449,8 @@ def test_order_create_sales_channel_optional(token_client, organizer, event, ite
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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" 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 ), format='json', data=res
) )
assert resp.status_code == 201 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 assert o.testmode
@@ -1460,8 +1499,9 @@ def test_order_create_attendee_name_optional(token_client, organizer, event, ite
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
assert o.positions.first().attendee_name_parts == {} o = Order.objects.get(code=resp.data['code'])
assert o.positions.first().attendee_name_parts == {}
@pytest.mark.django_db @pytest.mark.django_db
@@ -1484,8 +1524,10 @@ def test_order_create_legacy_attendee_name(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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 @pytest.mark.django_db
@@ -1508,8 +1550,9 @@ def test_order_create_legacy_invoice_name(token_client, organizer, event, item,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
assert o.invoice_address.name_parts == {"_legacy": "Peter"} o = Order.objects.get(code=resp.data['code'])
assert o.invoice_address.name_parts == {"_legacy": "Peter"}
@pytest.mark.django_db @pytest.mark.django_db
@@ -1524,7 +1567,8 @@ def test_order_create_code_optional(token_client, organizer, event, item, quota,
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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" assert o.code == "ABCDE"
resp = token_client.post( resp = token_client.post(
@@ -1557,7 +1601,8 @@ def test_order_email_optional(token_client, organizer, event, item, quota, quest
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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 assert not o.email
@@ -1572,7 +1617,6 @@ def test_order_create_payment_info_optional(token_client, organizer, event, item
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code'])
res['payment_info'] = { res['payment_info'] = {
'foo': { 'foo': {
@@ -1586,9 +1630,10 @@ def test_order_create_payment_info_optional(token_client, organizer, event, item
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.provider == "banktransfer"
assert p.amount == o.total assert p.amount == o.total
assert json.loads(p.info) == res['payment_info'] 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
assert o.positions.first().secret o = Order.objects.get(code=resp.data['code'])
assert o.positions.first().secret
res['positions'][0]['secret'] = "aaa" res['positions'][0]['secret'] = "aaa"
resp = token_client.post( resp = token_client.post(
@@ -1615,8 +1661,9 @@ def test_order_create_position_secret_optional(token_client, organizer, event, i
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
assert o.positions.first().secret == "aaa" o = Order.objects.get(code=resp.data['code'])
assert o.positions.first().secret == "aaa"
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format( '/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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
fee = o.fees.first() o = Order.objects.get(code=resp.data['code'])
fee = o.fees.first()
assert fee.fee_type == "payment" assert fee.fee_type == "payment"
assert fee.value == Decimal('0.25') assert fee.value == Decimal('0.25')
assert fee.tax_rate == Decimal('19.00') assert fee.tax_rate == Decimal('19.00')
assert fee.tax_rule == taxrule assert fee.tax_rule == taxrule
ia = o.invoice_address ia = o.invoice_address
assert ia.company == "Sample company" assert ia.company == "Sample company"
pos = o.positions.first() with scopes_disabled():
pos = o.positions.first()
assert pos.item == item assert pos.item == item
assert pos.tax_rate == Decimal('19.00') assert pos.tax_rate == Decimal('19.00')
assert pos.tax_value == Decimal('3.67') 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.status_code == 400
assert resp.data == {'positions': [{'item': ['The specified item does not belong to this event.']}]} assert resp.data == {'positions': [{'item': ['The specified item does not belong to this event.']}]}
var2 = item2.variations.create(value="A") with scopes_disabled():
quota.variations.add(var2) var2 = item2.variations.create(value="A")
quota.variations.add(var2)
res['positions'][0]['item'] = item.pk res['positions'][0]['item'] = item.pk
res['positions'][0]['variation'] = var2.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.status_code == 400
assert resp.data == {'positions': [{'variation': ['You cannot specify a variation for this item.']}]} 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]['item'] = item.pk
res['positions'][0]['variation'] = var1.pk res['positions'][0]['variation'] = var1.pk
resp = token_client.post( 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.status_code == 400
assert resp.data == {'positions': [{'item': ['The product "Budget Ticket" is not assigned to a quota.']}]} 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format( '/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug organizer.slug, event.slug
@@ -1850,9 +1902,10 @@ def test_order_create_positionids_addons(token_client, organizer, event, item, q
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos1 = o.positions.first() o = Order.objects.get(code=resp.data['code'])
pos2 = o.positions.last() pos1 = o.positions.first()
pos2 = o.positions.last()
assert pos2.addon_to == pos1 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': [ assert resp.data == {'positions': [
{'answers': [{'non_field_errors': ['You need to specify options if the question is of a choice type.']}]}]} {'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():
res['positions'][0]['answers'][0]['options'] = [ question.options.create(answer="L")
question.options.first().pk, with scopes_disabled():
question.options.last().pk, res['positions'][0]['answers'][0]['options'] = [
] question.options.first().pk,
question.options.last().pk,
]
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format( '/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug 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.type = Question.TYPE_CHOICE_MULTIPLE
question.save() question.save()
res['positions'][0]['answers'][0]['options'] = [ with scopes_disabled():
question.options.first().pk, res['positions'][0]['answers'][0]['options'] = [
question.options.last().pk, question.options.first().pk,
] question.options.last().pk,
]
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format( '/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug organizer.slug, event.slug
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.question == question assert answ.question == question
assert answ.answer == "XL, L" 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "3.45" assert answ.answer == "3.45"
question.type = Question.TYPE_NUMBER 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "True" assert answ.answer == "True"
question.type = Question.TYPE_BOOLEAN 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "False" assert answ.answer == "False"
question.type = Question.TYPE_BOOLEAN 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "2018-05-14" assert answ.answer == "2018-05-14"
question.type = Question.TYPE_DATE 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "2018-05-14 13:00:00+00:00" assert answ.answer == "2018-05-14 13:00:00+00:00"
question.type = Question.TYPE_DATETIME 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 ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
pos = o.positions.first() o = Order.objects.get(code=resp.data['code'])
answ = pos.answers.first() pos = o.positions.first()
answ = pos.answers.first()
assert answ.answer == "13:00:00" assert answ.answer == "13:00:00"
question.type = Question.TYPE_TIME 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]['item'] = item.pk
res['positions'][0]['answers'][0]['question'] = question.pk res['positions'][0]['answers'][0]['question'] = question.pk
cr = CartPosition.objects.create( with scopes_disabled():
event=event, cart_id="uxLJBUMEcnxOLI2EuxLYN1hWJq9GKu4yWL9FEgs2m7M0vdFi@api", item=item, cr = CartPosition.objects.create(
price=23, event=event, cart_id="uxLJBUMEcnxOLI2EuxLYN1hWJq9GKu4yWL9FEgs2m7M0vdFi@api", item=item,
expires=now() + datetime.timedelta(hours=3) price=23,
) expires=now() + datetime.timedelta(hours=3)
)
quota.size = 1 quota.size = 1
quota.save() quota.save()
@@ -2337,7 +2401,8 @@ def test_order_create_quota_consume_cart(token_client, organizer, event, item, q
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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 @pytest.mark.django_db
@@ -2353,11 +2418,13 @@ def test_order_create_free(token_client, organizer, event, item, quota, question
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.total == Decimal('0.00')
assert o.status == Order.STATUS_PAID assert o.status == Order.STATUS_PAID
p = o.payments.first() with scopes_disabled():
p = o.payments.first()
assert p.provider == "free" assert p.provider == "free"
assert p.amount == o.total assert p.amount == o.total
assert p.state == "confirmed" assert p.state == "confirmed"
@@ -2437,10 +2504,11 @@ def test_order_create_paid_generate_invoice(token_client, organizer, event, item
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 assert resp.status_code == 201
o = Order.objects.get(code=resp.data['code']) with scopes_disabled():
assert o.invoices.count() == 1 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.provider == "banktransfer"
assert p.amount == o.total assert p.amount == o.total
assert p.state == "confirmed" assert p.state == "confirmed"
@@ -2472,7 +2540,8 @@ def test_refund_create(token_client, organizer, event, order):
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.provider == "manual"
assert r.amount == Decimal("23.00") assert r.amount == Decimal("23.00")
assert r.state == "created" assert r.state == "created"
@@ -2493,7 +2562,8 @@ def test_refund_create_mark_refunded(token_client, organizer, event, order):
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.provider == "manual"
assert r.amount == Decimal("23.00") assert r.amount == Decimal("23.00")
assert r.state == "created" assert r.state == "created"
@@ -2515,7 +2585,8 @@ def test_refund_optional_fields(token_client, organizer, event, order):
), format='json', data=res ), format='json', data=res
) )
assert resp.status_code == 201 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.provider == "manual"
assert r.amount == Decimal("23.00") assert r.amount == Decimal("23.00")
assert r.state == "created" 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 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 @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 str(order.invoice_address.country) == "FR"
assert not order.invoice_address.vat_id_validated assert not order.invoice_address.vat_id_validated
assert order.invoice_address.city == "Paris" assert order.invoice_address.city == "Paris"
assert order.all_logentries().get(action_type='pretix.event.order.comment') with scopes_disabled():
assert order.all_logentries().get(action_type='pretix.event.order.checkin_attention') assert order.all_logentries().get(action_type='pretix.event.order.comment')
assert order.all_logentries().get(action_type='pretix.event.order.contact.changed') assert order.all_logentries().get(action_type='pretix.event.order.checkin_attention')
assert order.all_logentries().get(action_type='pretix.event.order.locale.changed') assert order.all_logentries().get(action_type='pretix.event.order.contact.changed')
assert order.all_logentries().get(action_type='pretix.event.order.modified') 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 @pytest.mark.django_db
@@ -2847,7 +2920,8 @@ def test_order_create_invoice(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_order_regenerate_secrets(token_client, organizer, event, order): def test_order_regenerate_secrets(token_client, organizer, event, order):
s = order.secret s = order.secret
ps = order.positions.first().secret with scopes_disabled():
ps = order.positions.first().secret
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/regenerate_secrets/'.format( '/api/v1/organizers/{}/events/{}/orders/{}/regenerate_secrets/'.format(
organizer.slug, event.slug, order.code 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 assert resp.status_code == 200
order.refresh_from_db() order.refresh_from_db()
assert s != order.secret assert s != order.secret
assert ps != order.positions.first().secret with scopes_disabled():
assert ps != order.positions.first().secret
@pytest.mark.django_db @pytest.mark.django_db
@@ -2882,7 +2957,8 @@ def test_order_resend_link(token_client, organizer, event, order):
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation(token_client, organizer, event, order, item): 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk),
data={ data={
@@ -2901,8 +2977,9 @@ def test_orderposition_price_calculation(token_client, organizer, event, order,
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_item_with_tax(token_client, organizer, event, order, item, taxrule): 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) with scopes_disabled():
op = order.positions.first() item2 = event.items.create(name="Budget Ticket", default_price=23, tax_rule=taxrule)
op = order.positions.first()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk),
data={ data={
@@ -2922,9 +2999,10 @@ def test_orderposition_price_calculation_item_with_tax(token_client, organizer,
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_item_with_variation(token_client, organizer, event, order): def test_orderposition_price_calculation_item_with_variation(token_client, organizer, event, order):
item2 = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
var = item2.variations.create(default_price=12, value="XS") item2 = event.items.create(name="Budget Ticket", default_price=23)
op = order.positions.first() var = item2.variations.create(default_price=12, value="XS")
op = order.positions.first()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk),
data={ data={
@@ -2945,8 +3023,9 @@ def test_orderposition_price_calculation_item_with_variation(token_client, organ
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_subevent(token_client, organizer, event, order, subevent): def test_orderposition_price_calculation_subevent(token_client, organizer, event, order, subevent):
item2 = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
op = order.positions.first() item2 = event.items.create(name="Budget Ticket", default_price=23)
op = order.positions.first()
op.subevent = subevent op.subevent = subevent
op.save() op.save()
resp = token_client.post( resp = token_client.post(
@@ -2969,10 +3048,11 @@ def test_orderposition_price_calculation_subevent(token_client, organizer, event
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent): def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent):
item2 = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC)) item2 = event.items.create(name="Budget Ticket", default_price=23)
se2.subeventitem_set.create(item=item2, price=12) se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
op = order.positions.first() se2.subeventitem_set.create(item=item2, price=12)
op = order.positions.first()
op.subevent = subevent op.subevent = subevent
op.save() op.save()
resp = token_client.post( resp = token_client.post(
@@ -2995,12 +3075,13 @@ def test_orderposition_price_calculation_subevent_with_override(token_client, or
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_voucher_matching(token_client, organizer, event, order, subevent, item): def test_orderposition_price_calculation_voucher_matching(token_client, organizer, event, order, subevent, item):
item2 = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
q = event.quotas.create(name="Quota") item2 = event.items.create(name="Budget Ticket", default_price=23)
q.items.add(item) q = event.quotas.create(name="Quota")
q.items.add(item2) q.items.add(item)
voucher = event.vouchers.create(price_mode="set", value=15, quota=q) q.items.add(item2)
op = order.positions.first() voucher = event.vouchers.create(price_mode="set", value=15, quota=q)
op = order.positions.first()
op.voucher = voucher op.voucher = voucher
op.save() op.save()
resp = token_client.post( resp = token_client.post(
@@ -3022,11 +3103,12 @@ def test_orderposition_price_calculation_voucher_matching(token_client, organize
@pytest.mark.django_db @pytest.mark.django_db
def test_orderposition_price_calculation_voucher_not_matching(token_client, organizer, event, order, subevent, item): 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) with scopes_disabled():
q = event.quotas.create(name="Quota") item2 = event.items.create(name="Budget Ticket", default_price=23)
q.items.add(item) q = event.quotas.create(name="Quota")
voucher = event.vouchers.create(price_mode="set", value=15, quota=q) q.items.add(item)
op = order.positions.first() voucher = event.vouchers.create(price_mode="set", value=15, quota=q)
op = order.positions.first()
op.voucher = voucher op.voucher = voucher
op.save() op.save()
resp = token_client.post( 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): def test_orderposition_price_calculation_net_price(token_client, organizer, event, order, subevent, item, taxrule):
taxrule.price_includes_tax = False taxrule.price_includes_tax = False
taxrule.save() taxrule.save()
item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) with scopes_disabled():
op = order.positions.first() item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule)
op = order.positions.first()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk),
data={ 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.vat_id_validated = True
order.invoice_address.country = Country('AT') order.invoice_address.country = Country('AT')
order.invoice_address.save() order.invoice_address.save()
item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule) with scopes_disabled():
op = order.positions.first() item2 = event.items.create(name="Budget Ticket", default_price=10, tax_rule=taxrule)
op = order.positions.first()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk), '/api/v1/organizers/{}/events/{}/orderpositions/{}/price_calc/'.format(organizer.slug, event.slug, op.pk),
data={ data={

View File

@@ -4,6 +4,7 @@ from unittest import mock
import pytest import pytest
from django_countries.fields import Country from django_countries.fields import Country
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import InvoiceAddress, Order, OrderPosition 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 resp.status_code == 201
assert not subevent.active assert not subevent.active
assert subevent.meta_values.filter( with scopes_disabled():
property__name=meta_prop.name, value="Workshop" assert subevent.meta_values.filter(
).exists() property__name=meta_prop.name, value="Workshop"
).exists()
resp = token_client.post( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/subevents/'.format(organizer.slug, event.slug), '/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 resp.status_code == 201
assert item.default_price == Decimal('23.00') 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( resp = token_client.post(
'/api/v1/organizers/{}/events/{}/subevents/'.format(organizer.slug, event.slug), '/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' format='json'
) )
assert resp.status_code == 200 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_from == datetime(2018, 12, 27, 10, 0, tzinfo=UTC)
assert subevent.date_to == datetime(2018, 12, 28, 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' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
assert organizer.events.get(slug=event.slug).subevents.get(id=resp.data['id']).meta_values.filter( with scopes_disabled():
property__name=meta_prop.name, value="Conference" assert organizer.events.get(slug=event.slug).subevents.get(id=resp.data['id']).meta_values.filter(
).exists() property__name=meta_prop.name, value="Conference"
).exists()
resp = token_client.patch( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
assert not subevent.meta_values.filter( with scopes_disabled():
property__name=meta_prop.name assert not subevent.meta_values.filter(
).exists() property__name=meta_prop.name
).exists()
resp = token_client.patch( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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') assert subevent.item_price_overrides[item.pk] == Decimal('99.99')
resp = token_client.patch( resp = token_client.patch(
@@ -355,7 +362,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
format='json' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 assert resp.status_code == 200
assert subevent.variations.get(id=variations[0].pk).default_price == Decimal('12.00') with scopes_disabled():
assert subevent.var_price_overrides[variations[0].pk] == Decimal('99.99') 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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' format='json'
) )
assert resp.status_code == 200 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( resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk), '/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, resp = token_client.delete('/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug,
subevent.pk)) subevent.pk))
assert resp.status_code == 204 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 @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.status_code == 403
assert resp.content.decode() == '{"detail":"The sub-event can not be deleted as it has already been used in ' \ 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."}' '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()

View File

@@ -5,6 +5,7 @@ from decimal import Decimal
import pytest import pytest
from django.utils import timezone from django.utils import timezone
from django.utils.timezone import now from django.utils.timezone import now
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import Event, Voucher 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 = copy.copy(item)
i2.pk = None i2.pk = None
i2.save() 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)) resp = token_client.get('/api/v1/organizers/{}/events/{}/vouchers/'.format(organizer.slug, event.slug))
assert resp.status_code == 200 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'] assert [] == resp.data['results']
var = item.variations.create(value='VIP') with scopes_disabled():
voucher.variation = var var = item.variations.create(value='VIP')
voucher.save() voucher.variation = var
voucher.save()
res['variation'] = var.pk res['variation'] = var.pk
resp = token_client.get( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?variation={}'.format(organizer.slug, event.slug, var.pk) '/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( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) '/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results'] 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( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, '/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
se2.pk)) se2.pk))
@@ -237,7 +241,8 @@ def create_voucher(token_client, organizer, event, data, expected_failure=False)
assert resp.status_code == 400 assert resp.status_code == 400
else: else:
assert resp.status_code == 201 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 @pytest.mark.django_db
@@ -324,7 +329,8 @@ def test_create_non_blocking_item_voucher(token_client, organizer, event, item):
@pytest.mark.django_db @pytest.mark.django_db
def test_create_non_blocking_variation_voucher(token_client, organizer, event, item): 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( v = create_voucher(
token_client, organizer, event, token_client, organizer, event,
data={ data={
@@ -394,7 +400,8 @@ def test_create_blocking_item_voucher_quota_full_invalid(token_client, organizer
@pytest.mark.django_db @pytest.mark.django_db
def test_create_blocking_variation_voucher_quota_free(token_client, organizer, event, item, quota): 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) quota.variations.add(variation)
v = create_voucher( v = create_voucher(
token_client, organizer, event, token_client, organizer, event,
@@ -421,7 +428,8 @@ def test_create_short_code(token_client, organizer, event, item):
@pytest.mark.django_db @pytest.mark.django_db
def test_create_blocking_variation_voucher_quota_full(token_client, organizer, event, item, quota): 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.variations.add(variation)
quota.size = 0 quota.size = 0
quota.save() quota.save()
@@ -463,7 +471,8 @@ def test_create_blocking_quota_voucher_quota_full(token_client, organizer, event
@pytest.mark.django_db @pytest.mark.django_db
def test_create_duplicate_code(token_client, organizer, event, quota): 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( create_voucher(
token_client, organizer, event, token_client, organizer, event,
data={ data={
@@ -501,11 +510,12 @@ def test_subevent_required_for_blocking(token_client, organizer, event, item, su
@pytest.mark.django_db @pytest.mark.django_db
def test_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent): def test_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent):
se2 = event.subevents.create(name="Bar", date_from=now()) with scopes_disabled():
quota.subevent = subevent se2 = event.subevents.create(name="Bar", date_from=now())
quota.save() quota.subevent = subevent
q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) quota.save()
q2.items.add(item) q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2)
q2.items.add(item)
v = create_voucher( v = create_voucher(
token_client, organizer, event, token_client, organizer, event,
@@ -521,12 +531,13 @@ def test_subevent_blocking_quota_free(token_client, organizer, event, item, quot
@pytest.mark.django_db @pytest.mark.django_db
def test_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent): def test_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent):
se2 = event.subevents.create(name="Bar", date_from=now()) with scopes_disabled():
quota.subevent = subevent se2 = event.subevents.create(name="Bar", date_from=now())
quota.size = 0 quota.subevent = subevent
quota.save() quota.size = 0
q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) quota.save()
q2.items.add(item) q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2)
q2.items.add(item)
create_voucher( create_voucher(
token_client, organizer, event, token_client, organizer, event,
@@ -553,15 +564,16 @@ def change_voucher(token_client, organizer, event, voucher, data, expected_failu
@pytest.mark.django_db @pytest.mark.django_db
def test_change_to_item_of_other_event(token_client, organizer, event, item): def test_change_to_item_of_other_event(token_client, organizer, event, item):
e2 = Event.objects.create( with scopes_disabled():
organizer=organizer, e2 = Event.objects.create(
name='Dummy2', organizer=organizer,
slug='dummy2', name='Dummy2',
date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC), slug='dummy2',
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf' 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) ticket2 = e2.items.create(name='Late-bird ticket', default_price=23)
v = event.vouchers.create(item=item)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -575,7 +587,8 @@ def test_change_to_item_of_other_event(token_client, organizer, event, item):
@pytest.mark.django_db @pytest.mark.django_db
def test_change_non_blocking_voucher(token_client, organizer, event, item, quota): 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -589,7 +602,8 @@ def test_change_non_blocking_voucher(token_client, organizer, event, item, quota
@pytest.mark.django_db @pytest.mark.django_db
def test_change_voucher_reduce_max_usages(token_client, organizer, event, item, quota): 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ 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): def test_change_blocking_voucher_unchanged_quota_full(token_client, organizer, event, item, quota):
quota.size = 0 quota.size = 0
quota.save() 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ 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): def test_change_voucher_to_blocking_quota_full(token_client, organizer, event, item, quota):
quota.size = 0 quota.size = 0
quota.save() quota.save()
v = event.vouchers.create(item=item) with scopes_disabled():
v = event.vouchers.create(item=item)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -632,7 +648,8 @@ def test_change_voucher_to_blocking_quota_full(token_client, organizer, event, i
@pytest.mark.django_db @pytest.mark.django_db
def test_change_voucher_to_blocking_quota_free(token_client, organizer, event, item, quota): 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ 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): def test_change_voucher_validity_to_valid_quota_full(token_client, organizer, event, item, quota):
quota.size = 0 quota.size = 0
quota.save() quota.save()
v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3), with scopes_disabled():
block_quota=True) v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3),
block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -660,8 +678,9 @@ def test_change_voucher_validity_to_valid_quota_full(token_client, organizer, ev
@pytest.mark.django_db @pytest.mark.django_db
def test_change_voucher_validity_to_valid_quota_free(token_client, organizer, event, item, quota): 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), with scopes_disabled():
block_quota=True) v = event.vouchers.create(item=item, valid_until=now() - datetime.timedelta(days=3),
block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -673,9 +692,10 @@ def test_change_voucher_validity_to_valid_quota_free(token_client, organizer, ev
@pytest.mark.django_db @pytest.mark.django_db
def test_change_item_of_blocking_voucher_quota_free(token_client, organizer, event, item, quota): 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) with scopes_disabled():
quota.items.add(ticket2) ticket2 = event.items.create(name='Late-bird ticket', default_price=23)
v = event.vouchers.create(item=item, block_quota=True) quota.items.add(ticket2)
v = event.vouchers.create(item=item, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -687,10 +707,11 @@ def test_change_item_of_blocking_voucher_quota_free(token_client, organizer, eve
@pytest.mark.django_db @pytest.mark.django_db
def test_change_item_of_blocking_voucher_quota_full(token_client, organizer, event, item, quota): 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) with scopes_disabled():
quota2 = event.quotas.create(name='Late', size=0) ticket2 = event.items.create(name='Late-bird ticket', default_price=23)
quota2.items.add(ticket2) quota2 = event.quotas.create(name='Late', size=0)
v = event.vouchers.create(item=item, block_quota=True) quota2.items.add(ticket2)
v = event.vouchers.create(item=item, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -702,14 +723,15 @@ def test_change_item_of_blocking_voucher_quota_full(token_client, organizer, eve
@pytest.mark.django_db @pytest.mark.django_db
def test_change_variation_of_blocking_voucher_quota_free(token_client, organizer, event): def test_change_variation_of_blocking_voucher_quota_free(token_client, organizer, event):
shirt = event.items.create(name='Shirt', default_price=23) with scopes_disabled():
vs = shirt.variations.create(value='S') shirt = event.items.create(name='Shirt', default_price=23)
vm = shirt.variations.create(value='M') vs = shirt.variations.create(value='S')
qs = event.quotas.create(name='S', size=2) vm = shirt.variations.create(value='M')
qs.variations.add(vs) qs = event.quotas.create(name='S', size=2)
qm = event.quotas.create(name='M', size=2) qs.variations.add(vs)
qm.variations.add(vm) qm = event.quotas.create(name='M', size=2)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) qm.variations.add(vm)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -721,13 +743,14 @@ def test_change_variation_of_blocking_voucher_quota_free(token_client, organizer
@pytest.mark.django_db @pytest.mark.django_db
def test_change_variation_of_blocking_voucher_without_quota_change(token_client, organizer, event): def test_change_variation_of_blocking_voucher_without_quota_change(token_client, organizer, event):
shirt = event.items.create(name='Shirt', default_price=23) with scopes_disabled():
vs = shirt.variations.create(value='S') shirt = event.items.create(name='Shirt', default_price=23)
vm = shirt.variations.create(value='M') vs = shirt.variations.create(value='S')
q = event.quotas.create(name='S', size=0) vm = shirt.variations.create(value='M')
q.variations.add(vs) q = event.quotas.create(name='S', size=0)
q.variations.add(vm) q.variations.add(vs)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) q.variations.add(vm)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -739,14 +762,15 @@ def test_change_variation_of_blocking_voucher_without_quota_change(token_client,
@pytest.mark.django_db @pytest.mark.django_db
def test_change_variation_of_blocking_voucher_quota_full(token_client, organizer, event): def test_change_variation_of_blocking_voucher_quota_full(token_client, organizer, event):
shirt = event.items.create(name='Shirt', default_price=23) with scopes_disabled():
vs = shirt.variations.create(value='S') shirt = event.items.create(name='Shirt', default_price=23)
vm = shirt.variations.create(value='M') vs = shirt.variations.create(value='S')
qs = event.quotas.create(name='S', size=2) vm = shirt.variations.create(value='M')
qs.variations.add(vs) qs = event.quotas.create(name='S', size=2)
qm = event.quotas.create(name='M', size=0) qs.variations.add(vs)
qm.variations.add(vm) qm = event.quotas.create(name='M', size=0)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True) qm.variations.add(vm)
v = event.vouchers.create(item=shirt, variation=vs, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -758,9 +782,10 @@ def test_change_variation_of_blocking_voucher_quota_full(token_client, organizer
@pytest.mark.django_db @pytest.mark.django_db
def test_change_quota_of_blocking_voucher_quota_free(token_client, organizer, event): def test_change_quota_of_blocking_voucher_quota_free(token_client, organizer, event):
qs = event.quotas.create(name='S', size=2) with scopes_disabled():
qm = event.quotas.create(name='M', size=2) qs = event.quotas.create(name='S', size=2)
v = event.vouchers.create(quota=qs, block_quota=True) qm = event.quotas.create(name='M', size=2)
v = event.vouchers.create(quota=qs, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -772,9 +797,10 @@ def test_change_quota_of_blocking_voucher_quota_free(token_client, organizer, ev
@pytest.mark.django_db @pytest.mark.django_db
def test_change_quota_of_blocking_voucher_quota_full(token_client, organizer, event): def test_change_quota_of_blocking_voucher_quota_full(token_client, organizer, event):
qs = event.quotas.create(name='S', size=2) with scopes_disabled():
qm = event.quotas.create(name='M', size=0) qs = event.quotas.create(name='S', size=2)
v = event.vouchers.create(quota=qs, block_quota=True) qm = event.quotas.create(name='M', size=0)
v = event.vouchers.create(quota=qs, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -786,11 +812,12 @@ def test_change_quota_of_blocking_voucher_quota_full(token_client, organizer, ev
@pytest.mark.django_db @pytest.mark.django_db
def test_change_item_of_blocking_voucher_without_quota_change(token_client, organizer, event, item, quota): def test_change_item_of_blocking_voucher_without_quota_change(token_client, organizer, event, item, quota):
quota.size = 0 with scopes_disabled():
quota.save() quota.size = 0
ticket2 = event.items.create(name='Standard Ticket', default_price=23) quota.save()
quota.items.add(ticket2) ticket2 = event.items.create(name='Standard Ticket', default_price=23)
v = event.vouchers.create(item=item, block_quota=True) quota.items.add(ticket2)
v = event.vouchers.create(item=item, block_quota=True)
change_voucher( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -802,8 +829,9 @@ def test_change_item_of_blocking_voucher_without_quota_change(token_client, orga
@pytest.mark.django_db @pytest.mark.django_db
def test_change_code_to_duplicate(token_client, organizer, event, item, quota): def test_change_code_to_duplicate(token_client, organizer, event, item, quota):
v1 = event.vouchers.create(quota=quota) with scopes_disabled():
v2 = event.vouchers.create(quota=quota) v1 = event.vouchers.create(quota=quota)
v2 = event.vouchers.create(quota=quota)
change_voucher( change_voucher(
token_client, organizer, event, v1, token_client, organizer, event, v1,
data={ data={
@@ -815,13 +843,14 @@ def test_change_code_to_duplicate(token_client, organizer, event, item, quota):
@pytest.mark.django_db @pytest.mark.django_db
def test_change_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent): def test_change_subevent_blocking_quota_free(token_client, organizer, event, item, quota, subevent):
quota.subevent = subevent with scopes_disabled():
quota.save() quota.subevent = subevent
se2 = event.subevents.create(name="Bar", date_from=now()) quota.save()
q2 = event.quotas.create(event=event, name='Tickets', size=5, subevent=se2) se2 = event.subevents.create(name="Bar", date_from=now())
q2.items.add(item) 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -833,13 +862,14 @@ def test_change_subevent_blocking_quota_free(token_client, organizer, event, ite
@pytest.mark.django_db @pytest.mark.django_db
def test_change_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent): def test_change_subevent_blocking_quota_full(token_client, organizer, event, item, quota, subevent):
quota.subevent = subevent with scopes_disabled():
quota.save() quota.subevent = subevent
se2 = event.subevents.create(name="Bar", date_from=now()) quota.save()
q2 = event.quotas.create(event=event, name='Tickets', size=0, subevent=se2) se2 = event.subevents.create(name="Bar", date_from=now())
q2.items.add(item) 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -851,27 +881,32 @@ def test_change_subevent_blocking_quota_full(token_client, organizer, event, ite
@pytest.mark.django_db @pytest.mark.django_db
def test_delete_voucher(token_client, organizer, event, quota): 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( resp = token_client.delete(
'/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk), '/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk),
) )
assert resp.status_code == 204 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 @pytest.mark.django_db
def test_delete_voucher_redeemed(token_client, organizer, event, quota): 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( resp = token_client.delete(
'/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk), '/api/v1/organizers/{}/events/{}/vouchers/{}/'.format(organizer.slug, event.slug, v.pk),
) )
assert resp.status_code == 403 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 @pytest.mark.django_db
def test_redeemed_is_not_writable(token_client, organizer, event, item): 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( change_voucher(
token_client, organizer, event, v, token_client, organizer, event, v,
data={ data={
@@ -919,13 +954,14 @@ def test_create_multiple_vouchers(token_client, organizer, event, item):
], format='json' ], format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
assert Voucher.objects.count() == 2 with scopes_disabled():
assert resp.data[0]['code'] == 'ABCDEFGHI' assert Voucher.objects.count() == 2
v1 = Voucher.objects.get(code='ABCDEFGHI') assert resp.data[0]['code'] == 'ABCDEFGHI'
assert not v1.block_quota v1 = Voucher.objects.get(code='ABCDEFGHI')
assert resp.data[1]['code'] == 'JKLMNOPQR' assert not v1.block_quota
v2 = Voucher.objects.get(code='JKLMNOPQR') assert resp.data[1]['code'] == 'JKLMNOPQR'
assert v2.block_quota v2 = Voucher.objects.get(code='JKLMNOPQR')
assert v2.block_quota
@pytest.mark.django_db @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.status_code == 400
assert resp.data == [{}, {'code': ['Ensure this field has at least 5 characters.']}] 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 @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.status_code == 400
assert resp.data == [{}, {'code': ['Duplicate voucher code in request.']}] assert resp.data == [{}, {'code': ['Duplicate voucher code in request.']}]
assert Voucher.objects.count() == 0 with scopes_disabled():
assert Voucher.objects.count() == 0

View File

@@ -3,6 +3,7 @@ import datetime
from unittest import mock from unittest import mock
import pytest import pytest
from django_scopes import scopes_disabled
from pytz import UTC from pytz import UTC
from pretix.base.models import WaitingListEntry from pretix.base.models import WaitingListEntry
@@ -44,8 +45,9 @@ TEST_WLE_RES = {
@pytest.mark.django_db @pytest.mark.django_db
def test_wle_list(token_client, organizer, event, wle, item, subevent): def test_wle_list(token_client, organizer, event, wle, item, subevent):
var = item.variations.create(value="Children") with scopes_disabled():
var2 = item.variations.create(value="Children") var = item.variations.create(value="Children")
var2 = item.variations.create(value="Children")
res = dict(TEST_WLE_RES) res = dict(TEST_WLE_RES)
wle.variation = var wle.variation = var
wle.save() 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)) '/api/v1/organizers/{}/events/{}/waitinglistentries/?has_voucher=true'.format(organizer.slug, event.slug))
assert [] == resp.data['results'] 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.voucher = v
wle.save() wle.save()
res['voucher'] = v.pk res['voucher'] = v.pk
@@ -112,7 +115,8 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent):
resp = token_client.get( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk)) '/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results'] 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( resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, '/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
se2.pk)) 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), '/api/v1/organizers/{}/events/{}/waitinglistentries/{}/'.format(organizer.slug, event.slug, wle.pk),
) )
assert resp.status_code == 204 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 @pytest.mark.django_db
def test_delete_wle_assigned(token_client, organizer, event, wle, item): 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.voucher = v
wle.save() wle.save()
resp = token_client.delete( resp = token_client.delete(
'/api/v1/organizers/{}/events/{}/waitinglistentries/{}/'.format(organizer.slug, event.slug, wle.pk), '/api/v1/organizers/{}/events/{}/waitinglistentries/{}/'.format(organizer.slug, event.slug, wle.pk),
) )
assert resp.status_code == 403 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): 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: if expected_failure:
assert resp.status_code == 400 assert resp.status_code == 400
else: else:
print(resp.data)
assert resp.status_code == 201 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 @pytest.mark.django_db
@@ -205,7 +212,8 @@ def test_wle_require_fields(token_client, organizer, event, item, quota):
}, },
expected_failure=True expected_failure=True
) )
v = item.variations.create(value="S") with scopes_disabled():
v = item.variations.create(value="S")
create_wle( create_wle(
token_client, organizer, event, token_client, organizer, event,
data={ data={
@@ -300,7 +308,8 @@ def test_wle_change_email(token_client, organizer, event, item, wle, quota):
@pytest.mark.django_db @pytest.mark.django_db
def test_wle_change_assigned(token_client, organizer, event, item, wle, quota): 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.voucher = v
wle.save() wle.save()
change_wle( change_wle(
@@ -315,8 +324,9 @@ def test_wle_change_assigned(token_client, organizer, event, item, wle, quota):
@pytest.mark.django_db @pytest.mark.django_db
def test_wle_change_to_available_item(token_client, organizer, event, item, wle, quota): def test_wle_change_to_available_item(token_client, organizer, event, item, wle, quota):
i = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
q = event.quotas.create(name="Budget Ticket", size=1) i = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="Budget Ticket", size=1)
q.items.add(i) q.items.add(i)
change_wle( change_wle(
token_client, organizer, event, 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 @pytest.mark.django_db
def test_wle_change_to_unavailable_item(token_client, organizer, event, item, wle, quota): def test_wle_change_to_unavailable_item(token_client, organizer, event, item, wle, quota):
i = event.items.create(name="Budget Ticket", default_price=23) with scopes_disabled():
v = i.variations.create(value="S") i = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="Budget Ticket", size=0) v = i.variations.create(value="S")
q = event.quotas.create(name="Budget Ticket", size=0)
q.items.add(i) q.items.add(i)
q.variations.add(v) q.variations.add(v)
change_wle( change_wle(
@@ -349,9 +360,10 @@ def test_wle_change_to_unavailable_item(token_client, organizer, event, item, wl
@pytest.mark.django_db @pytest.mark.django_db
def test_wle_change_to_unavailable_item_missing_var(token_client, organizer, event, item, wle, quota): 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) with scopes_disabled():
v = i.variations.create(value="S") i = event.items.create(name="Budget Ticket", default_price=23)
q = event.quotas.create(name="Budget Ticket", size=0) v = i.variations.create(value="S")
q = event.quotas.create(name="Budget Ticket", size=0)
q.items.add(i) q.items.add(i)
q.variations.add(v) q.variations.add(v)
change_wle( change_wle(

View File

@@ -1,6 +1,7 @@
import copy import copy
import pytest import pytest
from django_scopes import scopes_disabled
from pretix.api.models import WebHook from pretix.api.models import WebHook
@@ -64,12 +65,13 @@ def test_hook_create(token_client, organizer, event):
format='json' format='json'
) )
assert resp.status_code == 201 assert resp.status_code == 201
cl = WebHook.objects.get(pk=resp.data['id']) with scopes_disabled():
assert cl.target_url == "https://google.com" cl = WebHook.objects.get(pk=resp.data['id'])
assert cl.limit_events.count() == 1 assert cl.target_url == "https://google.com"
assert set(cl.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', assert cl.limit_events.count() == 1
'pretix.event.order.paid'} assert set(cl.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed',
assert not cl.all_events 'pretix.event.order.paid'}
assert not cl.all_events
@pytest.mark.django_db @pytest.mark.django_db
@@ -136,9 +138,10 @@ def test_hook_patch_url(token_client, organizer, event, webhook):
assert resp.status_code == 200 assert resp.status_code == 200
webhook.refresh_from_db() webhook.refresh_from_db()
assert webhook.target_url == "https://pretix.eu" assert webhook.target_url == "https://pretix.eu"
assert webhook.limit_events.count() == 1 with scopes_disabled():
assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', assert webhook.limit_events.count() == 1
'pretix.event.order.paid'} assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed',
'pretix.event.order.paid'}
assert webhook.enabled assert webhook.enabled
@@ -153,9 +156,10 @@ def test_hook_patch_types(token_client, organizer, event, webhook):
) )
assert resp.status_code == 200 assert resp.status_code == 200
webhook.refresh_from_db() webhook.refresh_from_db()
assert webhook.limit_events.count() == 1 with scopes_disabled():
assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed', assert webhook.limit_events.count() == 1
'pretix.event.order.canceled'} assert set(webhook.listeners.values_list('action_type', flat=True)) == {'pretix.event.order.placed',
'pretix.event.order.canceled'}
assert webhook.enabled assert webhook.enabled

View File

@@ -1,4 +1,5 @@
import pytest import pytest
from django_scopes import scopes_disabled
from xdist.dsession import DSession from xdist.dsession import DSession
CRASHED_ITEMS = set() CRASHED_ITEMS = set()
@@ -31,3 +32,9 @@ def pytest_configure(config):
self.sched.check_schedule(node) self.sched.check_schedule(node)
DSession.handle_crashitem = _handle_crashitem DSession.handle_crashitem = _handle_crashitem
@pytest.hookimpl(hookwrapper=True)
def pytest_fixture_setup(fixturedef, request):
with scopes_disabled():
yield