mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Fix tests.api
This commit is contained in:
@@ -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.')
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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={
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user