Compare commits

...
2 changed files with 105 additions and 3 deletions

No files matched your search

+12 -3
View File
@@ -35,10 +35,13 @@
import logging
from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.core.exceptions import (
PermissionDenied, ValidationError as DjangoValidationError,
)
from django.db import transaction
from django.utils.crypto import get_random_string
from django.utils.functional import cached_property
from django.utils.html import strip_tags
from django.utils.translation import gettext as _
from django_countries.serializers import CountryFieldMixin
from pytz import common_timezones
@@ -218,8 +221,6 @@ class EventSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
if self.instance is None:
raise ValidationError(_('Events cannot be created as \'live\'. Quotas and payment must be added to the '
'event before sales can go live.'))
else:
self.instance.clean_live()
return value
@cached_property
@@ -429,6 +430,14 @@ class EventSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
event.set_active_plugins(plugins)
event.save()
live = validated_data.get('live') or event.live
if live:
event.refresh_from_db()
try:
event.clean_live()
except DjangoValidationError as e:
raise ValidationError({'live': [strip_tags(m) for m in e.messages]})
return event
+93
View File
@@ -1070,6 +1070,99 @@ def test_event_update_live_free_product(token_client, organizer, event, free_ite
assert resp.status_code == 200
@pytest.mark.django_db
def test_event_update_live_required_meta_data_missing(token_client, organizer, event, free_quota):
organizer.meta_properties.create(name="required_prop", required=True)
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
{
"live": True
},
format='json'
)
assert resp.status_code == 400
assert list(resp.data.keys()) == ['live']
assert len(resp.data['live']) == 1
assert '<a' not in resp.data['live'][0]
assert 'required_prop' in resp.data['live'][0]
event.refresh_from_db()
assert not event.live
@pytest.mark.django_db
def test_event_update_live_required_meta_data_set_in_same_request(token_client, organizer, event, free_quota):
organizer.meta_properties.create(name="required_prop", required=True)
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
{
"live": True,
"meta_data": {
"type": "Conference",
"required_prop": "set",
}
},
format='json'
)
assert resp.status_code == 200
assert resp.data['live'] is True
event.refresh_from_db()
assert event.live
with scopes_disabled():
assert event.meta_values.filter(property__name="required_prop", value="set").exists()
@pytest.mark.django_db
def test_live_event_update_removing_required_meta_data(token_client, organizer, event, free_quota):
prop = organizer.meta_properties.create(name="required_prop", required=True)
with scopes_disabled():
event.meta_values.create(property=prop, value="set")
event.live = True
event.save()
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
{
"meta_data": {
"type": "Conference",
}
},
format='json'
)
assert resp.status_code == 400
assert list(resp.data.keys()) == ['live']
assert 'required_prop' in resp.data['live'][0]
event.refresh_from_db()
assert event.live
with scopes_disabled():
assert event.meta_values.filter(property__name="required_prop", value="set").exists()
@pytest.mark.django_db
def test_live_event_update_removing_required_meta_data_while_going_offline(token_client, organizer, event, free_quota):
prop = organizer.meta_properties.create(name="required_prop", required=True)
with scopes_disabled():
event.meta_values.create(property=prop, value="set")
event.live = True
event.save()
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug),
{
"live": False,
"meta_data": {
"type": "Conference",
}
},
format='json'
)
assert resp.status_code == 200
event.refresh_from_db()
assert not event.live
with scopes_disabled():
assert not event.meta_values.filter(property__name="required_prop").exists()
@pytest.mark.django_db
def test_event_update_plugins(token_client, organizer, event, free_item, free_quota):
resp = token_client.patch(