Upgrade to Django 2.1 (#710)

* Upgrade to Django 2.0

* more models

* i18n foo

* Update setup.py

* Fix Sentry exception PRETIXEU-JC

* Enforce slug uniqueness

* Import sorting

* Upgrade to Django 2.1

* Travis config

* Try to fix PostgreSQL failure

* Smaller test matrix

* staticfiles→static

* Include request in all authenticate() calls
This commit is contained in:
Raphael Michel
2018-08-06 12:48:46 +02:00
committed by GitHub
parent 0637490216
commit afd766999c
131 changed files with 491 additions and 263 deletions
+4 -3
View File
@@ -13,6 +13,7 @@ def test_no_auth(client):
def test_session_auth_no_teams(client, user):
client.login(email=user.email, password='dummy')
resp = client.get('/api/v1/organizers/')
print(resp.data)
assert resp.status_code == 200
assert len(resp.data['results']) == 0
@@ -20,7 +21,7 @@ def test_session_auth_no_teams(client, user):
@pytest.mark.django_db
def test_session_auth_with_teams(client, user, team):
team.members.add(user)
Organizer.objects.create(name='Other dummy', slug='dummy')
Organizer.objects.create(name='Other dummy', slug='dummy2')
client.login(email=user.email, password='dummy')
resp = client.get('/api/v1/organizers/')
assert resp.status_code == 200
@@ -36,7 +37,7 @@ def test_token_invalid(client):
@pytest.mark.django_db
def test_token_auth_valid(client, team):
Organizer.objects.create(name='Other dummy', slug='dummy')
Organizer.objects.create(name='Other dummy', slug='dummy2')
t = team.tokens.create(name='Foo')
client.credentials(HTTP_AUTHORIZATION='Token ' + t.token)
resp = client.get('/api/v1/organizers/')
@@ -46,7 +47,7 @@ def test_token_auth_valid(client, team):
@pytest.mark.django_db
def test_token_auth_inactive(client, team):
Organizer.objects.create(name='Other dummy', slug='dummy')
Organizer.objects.create(name='Other dummy', slug='dummy2')
t = team.tokens.create(name='Foo', active=False)
client.credentials(HTTP_AUTHORIZATION='Token ' + t.token)
resp = client.get('/api/v1/organizers/')
+2 -1
View File
@@ -151,8 +151,9 @@ def test_list_list(token_client, organizer, event, clist, item, subevent):
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, subevent.pk + 1))
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
assert [] == resp.data['results']
+5 -2
View File
@@ -238,6 +238,7 @@ TEST_ITEM_RES = {
@pytest.mark.django_db
def test_item_list(token_client, organizer, event, team, item):
cat = event.categories.create(name="foo")
res = dict(TEST_ITEM_RES)
res["id"] = item.pk
resp = token_client.get('/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug))
@@ -252,7 +253,8 @@ def test_item_list(token_client, organizer, event, team, item):
assert resp.status_code == 200
assert [] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/items/?category=1'.format(organizer.slug, event.slug))
resp = token_client.get('/api/v1/organizers/{}/events/{}/items/?category={}'.format(organizer.slug, event.slug,
cat.pk))
assert resp.status_code == 200
assert [] == resp.data['results']
@@ -1074,8 +1076,9 @@ def test_quota_list(token_client, organizer, event, quota, item, subevent):
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk + 1))
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
assert [] == resp.data['results']
+3 -2
View File
@@ -535,6 +535,7 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
i2.pk = None
i2.save()
var = item.variations.create(value="Children")
var2 = item.variations.create(value="Children")
res = dict(TEST_ORDERPOSITION_RES)
op = order.positions.first()
op.variation = var
@@ -564,14 +565,14 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?item={}'.format(organizer.slug, event.slug, item.pk + 1))
'/api/v1/organizers/{}/events/{}/orderpositions/?item={}'.format(organizer.slug, event.slug, i2.pk))
assert [] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?variation={}'.format(organizer.slug, event.slug, var.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?variation={}'.format(organizer.slug, event.slug, var.pk + 1))
'/api/v1/organizers/{}/events/{}/orderpositions/?variation={}'.format(organizer.slug, event.slug, var2.pk))
assert [] == resp.data['results']
resp = token_client.get(
+13 -4
View File
@@ -1,3 +1,4 @@
import copy
import datetime
from decimal import Decimal
@@ -51,6 +52,13 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
res['item'] = item.pk
res['id'] = voucher.pk
res['code'] = voucher.code
q2 = copy.copy(quota)
q2.pk = None
q2.save()
i2 = copy.copy(item)
i2.pk = None
i2.save()
var2 = i2.variations.create(value="foo")
resp = token_client.get('/api/v1/organizers/{}/events/{}/vouchers/'.format(organizer.slug, event.slug))
assert resp.status_code == 200
@@ -124,7 +132,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
)
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?item={}'.format(organizer.slug, event.slug, item.pk + 1)
'/api/v1/organizers/{}/events/{}/vouchers/?item={}'.format(organizer.slug, event.slug, i2.pk)
)
assert [] == resp.data['results']
@@ -137,7 +145,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
)
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?variation={}'.format(organizer.slug, event.slug, var.pk + 1)
'/api/v1/organizers/{}/events/{}/vouchers/?variation={}'.format(organizer.slug, event.slug, var2.pk)
)
assert [] == resp.data['results']
@@ -153,7 +161,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
)
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?quota={}'.format(organizer.slug, event.slug, quota.pk + 1)
'/api/v1/organizers/{}/events/{}/vouchers/?quota={}'.format(organizer.slug, event.slug, q2.pk)
)
assert [] == resp.data['results']
@@ -200,9 +208,10 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
subevent.pk + 1))
se2.pk))
assert [] == resp.data['results']
+9 -3
View File
@@ -1,3 +1,4 @@
import copy
import datetime
from unittest import mock
@@ -43,9 +44,13 @@ TEST_WLE_RES = {
@pytest.mark.django_db
def test_wle_list(token_client, organizer, event, wle, item, subevent):
var = item.variations.create(value="Children")
var2 = item.variations.create(value="Children")
res = dict(TEST_WLE_RES)
wle.variation = var
wle.save()
i2 = copy.copy(item)
i2.pk = None
i2.save()
res["id"] = wle.pk
res["item"] = item.pk
res["variation"] = var.pk
@@ -58,14 +63,14 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent):
'/api/v1/organizers/{}/events/{}/waitinglistentries/?item={}'.format(organizer.slug, event.slug, item.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?item={}'.format(organizer.slug, event.slug, item.pk + 1))
'/api/v1/organizers/{}/events/{}/waitinglistentries/?item={}'.format(organizer.slug, event.slug, i2.pk))
assert [] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?variation={}'.format(organizer.slug, event.slug, var.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?variation={}'.format(organizer.slug, event.slug, var.pk + 1))
'/api/v1/organizers/{}/events/{}/waitinglistentries/?variation={}'.format(organizer.slug, event.slug, var2.pk))
assert [] == resp.data['results']
resp = token_client.get(
@@ -106,9 +111,10 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent):
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
subevent.pk + 1))
se2.pk))
assert [] == resp.data['results']
+1 -1
View File
@@ -1144,7 +1144,7 @@ class EventTest(TestCase):
cl1.limit_products.add(i1)
event2 = Event.objects.create(
organizer=self.organizer, name='Download', slug='ab1234',
organizer=self.organizer, name='Download', slug='ab54321',
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc)
)
event2.copy_data_from(event1)
+1 -1
View File
@@ -147,7 +147,7 @@ def test_event_permissions_multiple_teams(event, user):
team2 = Team.objects.create(organizer=event.organizer, can_change_vouchers=True)
team3 = Team.objects.create(organizer=event.organizer, can_change_event_settings=True)
event2 = Event.objects.create(
organizer=event.organizer, name='Dummy', slug='dummy',
organizer=event.organizer, name='Dummy', slug='dummy2',
date_from=now()
)
team1.members.add(user)
+6 -6
View File
@@ -417,7 +417,7 @@ class EventsTest(SoupTest):
'foundation-organizer': self.orga2.pk,
'foundation-locales': ('en', 'de')
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
def test_create_invalid_default_language(self):
doc = self.post_doc('/control/events/add', {
@@ -442,7 +442,7 @@ class EventsTest(SoupTest):
'basics-presale_start': '2016-11-01 10:00:00',
'basics-presale_end': '2016-11-30 18:00:00',
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
def test_create_duplicate_slug(self):
doc = self.post_doc('/control/events/add', {
@@ -471,7 +471,7 @@ class EventsTest(SoupTest):
'basics-presale_end_0': '2016-11-30',
'basics-presale_end_1': '18:00:00',
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
def test_create_event_success(self):
doc = self.get_doc('/control/events/add')
@@ -642,7 +642,7 @@ class EventsTest(SoupTest):
'basics-presale_end_0': '2016-11-30',
'basics-presale_end_1': '18:00:00',
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
def test_create_event_currency_symbol(self):
doc = self.post_doc('/control/events/add', {
@@ -669,7 +669,7 @@ class EventsTest(SoupTest):
'basics-presale_end_0': '2016-11-30',
'basics-presale_end_1': '18:00:00',
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
def test_create_event_non_iso_currency(self):
doc = self.post_doc('/control/events/add', {
@@ -696,7 +696,7 @@ class EventsTest(SoupTest):
'basics-presale_end_0': '2016-11-30',
'basics-presale_end_1': '18:00:00',
})
assert doc.select(".alert-danger")
assert doc.select(".has-error")
class SubEventsTest(SoupTest):
+1 -1
View File
@@ -42,7 +42,7 @@ class VoucherFormTest(SoupTest):
form_data.update(data)
doc = self.post_doc('/control/event/%s/%s/vouchers/add' % (self.orga.slug, self.event.slug), form_data)
if expected_failure:
assert doc.select(".alert-danger")
assert doc.select(".alert-danger, .has-error")
assert count_before == self.event.vouchers.count()
else:
assert doc.select(".alert-success")
+4 -4
View File
@@ -1,5 +1,5 @@
from django import urls
from django.conf import settings
from django.core import urlresolvers
from pretix.helpers.urls import build_absolute_uri
@@ -11,7 +11,7 @@ def test_site_url_domain():
def test_site_url_subpath():
settings.SITE_URL = 'https://example.com/presale'
old_prefix = urlresolvers.get_script_prefix()
urlresolvers.set_script_prefix('/presale/')
old_prefix = urls.get_script_prefix()
urls.set_script_prefix('/presale/')
assert build_absolute_uri('control:auth.login') == 'https://example.com/presale/control/login'
urlresolvers.set_script_prefix(old_prefix)
urls.set_script_prefix(old_prefix)
@@ -0,0 +1,47 @@
import pytest
from django.conf import settings
from django.utils.timezone import now
from pretix.base.models import Event, Organizer
@pytest.fixture
def event():
o = Organizer.objects.create(name='MRMCD', slug='mrmcd')
event = Event.objects.create(
organizer=o, name='MRMCD2015', slug='2015',
date_from=now(),
)
settings.SITE_URL = 'http://example.com'
return event
@pytest.mark.django_db
def test_require_plugin(event, client):
event.plugins = 'pretix.plugins.paypal'
event.live = True
event.save()
r = client.get('/mrmcd/2015/paypal/abort/', follow=False)
assert r.status_code == 302
event.plugins = ''
event.save()
r = client.get('/mrmcd/2015/paypal/abort/', follow=False)
assert r.status_code == 404
@pytest.mark.django_db
def test_require_live(event, client):
event.plugins = 'pretix.plugins.paypal'
event.live = True
event.save()
r = client.get('/mrmcd/2015/paypal/abort/', follow=False)
assert r.status_code == 302
r = client.get('/mrmcd/2015/paypal/webhook/', follow=False)
assert r.status_code == 405
event.live = False
event.save()
r = client.get('/mrmcd/2015/paypal/abort/', follow=False)
assert r.status_code == 403
r = client.get('/mrmcd/2015/paypal/webhook/', follow=False)
assert r.status_code == 405
+1 -1
View File
@@ -1,7 +1,7 @@
import pytest
from django.conf import settings
from django.core.urlresolvers import NoReverseMatch
from django.template import Context, Template, TemplateSyntaxError
from django.urls import NoReverseMatch
from django.utils.timezone import now
from pretix.base.models import Event, Organizer
+2 -2
View File
@@ -49,9 +49,9 @@ class CheckoutTestCase(TestCase):
self.workshopcat = ItemCategory.objects.create(name="Workshops", is_addon=True, event=self.event)
self.workshopquota = Quota.objects.create(event=self.event, name='Workshop 1', size=5)
self.workshop1 = Item.objects.create(event=self.event, name='Workshop 1',
category=self.workshopcat, default_price=12)
category=self.workshopcat, default_price=Decimal('12.00'))
self.workshop2 = Item.objects.create(event=self.event, name='Workshop 2',
category=self.workshopcat, default_price=12)
category=self.workshopcat, default_price=Decimal('12.00'))
self.workshop2a = ItemVariation.objects.create(item=self.workshop2, value='A')
self.workshop2b = ItemVariation.objects.create(item=self.workshop2, value='B')
self.workshopquota.items.add(self.workshop1)