mirror of
https://github.com/pretix/pretix.git
synced 2026-08-27 13:24:41 +00:00
Bump Django to 4.1.* (#2989)
This commit is contained in:
@@ -32,13 +32,12 @@
|
||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import pytest
|
||||
from django.test import utils
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from pretix.base.models import Device, Event, Organizer, Team, User
|
||||
@@ -67,7 +66,7 @@ def meta_prop(organizer):
|
||||
def event(organizer, meta_prop):
|
||||
e = Event.objects.create(
|
||||
organizer=organizer, name='Dummy', slug='dummy',
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf',
|
||||
is_public=True
|
||||
)
|
||||
@@ -82,7 +81,7 @@ def event(organizer, meta_prop):
|
||||
def event2(organizer, meta_prop):
|
||||
e = Event.objects.create(
|
||||
organizer=organizer, name='Dummy2', slug='dummy2',
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||
)
|
||||
e.meta_values.create(property=meta_prop, value="Conference")
|
||||
@@ -94,7 +93,7 @@ def event2(organizer, meta_prop):
|
||||
def event3(organizer, meta_prop):
|
||||
e = Event.objects.create(
|
||||
organizer=organizer, name='Dummy3', slug='dummy3',
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||
)
|
||||
e.meta_values.create(property=meta_prop, value="Conference")
|
||||
@@ -173,7 +172,7 @@ def device_client(client, device):
|
||||
def subevent(event, meta_prop):
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
se = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
||||
|
||||
se.meta_values.create(property=meta_prop, value="Workshop")
|
||||
return se
|
||||
@@ -184,7 +183,7 @@ def subevent(event, meta_prop):
|
||||
def subevent2(event2, meta_prop):
|
||||
event2.has_subevents = True
|
||||
event2.save()
|
||||
se = event2.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se = event2.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
||||
|
||||
se.meta_values.create(property=meta_prop, value="Workshop")
|
||||
return se
|
||||
|
||||
+14
-15
@@ -28,7 +28,6 @@ import pytest
|
||||
from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.base.models import Question, SeatingPlan
|
||||
@@ -95,15 +94,15 @@ TEST_CARTPOSITION_RES = {
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_cp_list(token_client, organizer, event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
cr = CartPosition.objects.create(
|
||||
event=event, cart_id="aaa", item=item,
|
||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
)
|
||||
res = dict(TEST_CARTPOSITION_RES)
|
||||
res["id"] = cr.pk
|
||||
@@ -116,15 +115,15 @@ def test_cp_list(token_client, organizer, event, item, taxrule, question):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_cp_list_api(token_client, organizer, event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
cr = CartPosition.objects.create(
|
||||
event=event, cart_id="aaa@api", item=item,
|
||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
)
|
||||
res = dict(TEST_CARTPOSITION_RES)
|
||||
res["id"] = cr.pk
|
||||
@@ -137,15 +136,15 @@ def test_cp_list_api(token_client, organizer, event, item, taxrule, question):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_cp_detail(token_client, organizer, event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
cr = CartPosition.objects.create(
|
||||
event=event, cart_id="aaa@api", item=item,
|
||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
)
|
||||
res = dict(TEST_CARTPOSITION_RES)
|
||||
res["id"] = cr.pk
|
||||
@@ -158,21 +157,21 @@ def test_cp_detail(token_client, organizer, event, item, taxrule, question):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_cp_delete(token_client, organizer, event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
cr = CartPosition.objects.create(
|
||||
event=event, cart_id="aaa@api", item=item,
|
||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
)
|
||||
CartPosition.objects.create(
|
||||
event=event, cart_id="aaa@api", item=item, addon_to=cr,
|
||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
)
|
||||
res = dict(TEST_CARTPOSITION_RES)
|
||||
res["id"] = cr.pk
|
||||
|
||||
@@ -31,7 +31,6 @@ from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.api.serializers.item import QuestionSerializer
|
||||
@@ -57,15 +56,15 @@ def other_item(event):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, other_item, taxrule):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=46, locale='en'
|
||||
)
|
||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||
@@ -258,7 +257,7 @@ def test_list_list(token_client, organizer, event, clist, item, subevent, django
|
||||
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent_match={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||
assert [res] == resp.data['results']
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
||||
assert [] == resp.data['results']
|
||||
@@ -577,7 +576,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
|
||||
@pytest.mark.django_db
|
||||
def test_list_all_items_positions_by_subevent(token_client, organizer, event, clist, clist_all, item, other_item, order, subevent):
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
pfirst = order.positions.get(positionid=1)
|
||||
pfirst.subevent = se2
|
||||
pfirst.save()
|
||||
|
||||
@@ -29,7 +29,6 @@ from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.api.serializers.item import QuestionSerializer
|
||||
@@ -59,15 +58,15 @@ def other_item(event):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, other_item, taxrule):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=46, locale='en'
|
||||
)
|
||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||
@@ -106,15 +105,15 @@ def order(event, item, other_item, taxrule):
|
||||
|
||||
@pytest.fixture
|
||||
def order2(event2, item_on_event2):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='BAR', event=event2, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PAID, secret="ylptCPNOxTyA",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=46, locale='en'
|
||||
)
|
||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django_scopes import scopes_disabled
|
||||
from freezegun import freeze_time
|
||||
|
||||
tz = pytz.timezone("Asia/Tokyo")
|
||||
tz = ZoneInfo("Asia/Tokyo")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -40,22 +40,22 @@ def test_choose_between_events(device_client, device):
|
||||
with scopes_disabled():
|
||||
e1 = device.organizer.events.create(
|
||||
name="Event", slug="e1", live=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
||||
)
|
||||
cl1 = e1.checkin_lists.create(name="Same name")
|
||||
e2 = device.organizer.events.create(
|
||||
name="Event", slug="e2", live=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
||||
)
|
||||
e2.checkin_lists.create(name="Other name")
|
||||
cl2 = e2.checkin_lists.create(name="Same name")
|
||||
e2.checkin_lists.create(name="Yet another name")
|
||||
tomorrow = device.organizer.events.create(
|
||||
name="Event", slug="tomorrow", live=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 11, 15, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 11, 16, 0)),
|
||||
date_from=datetime(2020, 1, 11, 15, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 11, 16, 0, tzinfo=tz),
|
||||
)
|
||||
cl3 = tomorrow.checkin_lists.create(name="Just any name")
|
||||
for e in device.organizer.events.all():
|
||||
@@ -117,7 +117,7 @@ def test_choose_between_events(device_client, device):
|
||||
assert resp.data['event']['slug'] == 'e2'
|
||||
|
||||
# check for overlapping events
|
||||
e2.date_admission = tz.localize(datetime(2020, 1, 10, 14, 45))
|
||||
e2.date_admission = datetime(2020, 1, 10, 14, 45, tzinfo=tz)
|
||||
e2.save()
|
||||
with freeze_time("2020-01-10T14:45:00+09:00"):
|
||||
resp = device_client.get('/api/v1/device/eventselection?current_event=e1')
|
||||
@@ -131,28 +131,28 @@ def test_choose_between_subevents(device_client, device):
|
||||
with scopes_disabled():
|
||||
e = device.organizer.events.create(
|
||||
name="Event", slug="e1", live=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
||||
has_subevents=True,
|
||||
)
|
||||
e.settings.timezone = "Asia/Tokyo"
|
||||
se1 = e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
||||
)
|
||||
cl1 = e.checkin_lists.create(name="Same name", subevent=se1)
|
||||
se2 = e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
||||
)
|
||||
cl2 = e.checkin_lists.create(name="Same name", subevent=se2)
|
||||
cl3 = e.checkin_lists.create(name="Other name")
|
||||
e.checkin_lists.create(name="Yet another name", subevent=se2)
|
||||
se_tomorrow = e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 11, 15, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 11, 16, 0)),
|
||||
date_from=datetime(2020, 1, 11, 15, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 11, 16, 0, tzinfo=tz),
|
||||
)
|
||||
with freeze_time("2020-01-10T14:30:00+09:00"):
|
||||
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
||||
@@ -217,7 +217,7 @@ def test_choose_between_subevents(device_client, device):
|
||||
assert resp.data['subevent'] == se2.pk
|
||||
|
||||
# check for overlapping events
|
||||
se2.date_admission = tz.localize(datetime(2020, 1, 10, 14, 45))
|
||||
se2.date_admission = datetime(2020, 1, 10, 14, 45, tzinfo=tz)
|
||||
se2.save()
|
||||
with freeze_time("2020-01-10T14:45:00+09:00"):
|
||||
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
||||
@@ -234,25 +234,25 @@ def test_require_gate(device_client, device):
|
||||
device.save()
|
||||
e = device.organizer.events.create(
|
||||
name="Event", slug="e1", live=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
||||
has_subevents=True,
|
||||
)
|
||||
e.settings.timezone = "Asia/Tokyo"
|
||||
se0 = e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 9, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 10, 0)),
|
||||
date_from=datetime(2020, 1, 10, 9, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 10, 0, tzinfo=tz),
|
||||
)
|
||||
e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
||||
)
|
||||
cl1 = e.checkin_lists.create(name="Same name", subevent=se0)
|
||||
se2 = e.subevents.create(
|
||||
name="Event", active=True,
|
||||
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
||||
)
|
||||
e.checkin_lists.create(name="Same name", subevent=se2)
|
||||
cl3 = e.checkin_lists.create(name="Other name", subevent=se2)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
|
||||
import copy
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from decimal import Decimal
|
||||
from unittest import mock
|
||||
|
||||
@@ -43,7 +43,6 @@ from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -63,15 +62,15 @@ def variations(item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||
|
||||
@@ -24,7 +24,6 @@ import json
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.api.models import ApiCall
|
||||
from pretix.base.models import Order
|
||||
@@ -159,8 +158,8 @@ def order(event):
|
||||
return Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ import freezegun
|
||||
import pytest
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import InvoiceAddress, Order, OrderPosition
|
||||
from pretix.base.models.orders import OrderFee
|
||||
@@ -75,7 +74,7 @@ def quota(event, item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
event.plugins += ",pretix.plugins.stripe"
|
||||
event.save()
|
||||
|
||||
@@ -84,8 +83,8 @@ def order(event, item, taxrule, question):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
p1 = o.payments.create(
|
||||
@@ -140,7 +139,7 @@ def order(event, item, taxrule, question):
|
||||
|
||||
@pytest.fixture
|
||||
def invoice(order):
|
||||
testtime = datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
import os
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from decimal import Decimal
|
||||
from unittest import mock
|
||||
|
||||
@@ -42,7 +42,6 @@ from django.conf import settings
|
||||
from django.core.files.base import ContentFile
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.base.channels import get_all_sales_channels
|
||||
@@ -73,15 +72,15 @@ def category3(event, item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||
@@ -108,7 +107,7 @@ def order_position(item, order, taxrule, variations):
|
||||
|
||||
@pytest.fixture
|
||||
def cart_position(event, item, variations):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
@@ -1786,7 +1785,7 @@ def test_quota_list(token_client, organizer, event, quota, item, subevent):
|
||||
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||
assert [res] == resp.data['results']
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
@@ -19,10 +19,9 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django_scopes import scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
|
||||
@@ -54,8 +53,8 @@ def customer(organizer):
|
||||
def membership(organizer, customer, membershiptype):
|
||||
return customer.memberships.create(
|
||||
membership_type=membershiptype,
|
||||
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=pytz.UTC),
|
||||
date_end=datetime(2021, 4, 8, 23, 59, 59, 999999, tzinfo=pytz.UTC),
|
||||
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=timezone.utc),
|
||||
date_end=datetime(2021, 4, 8, 23, 59, 59, 999999, tzinfo=timezone.utc),
|
||||
attendee_name_parts={
|
||||
"_scheme": "given_family",
|
||||
'given_name': 'John',
|
||||
|
||||
@@ -30,7 +30,6 @@ from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -90,7 +89,7 @@ def seat(event, organizer, item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
event.plugins += ",pretix.plugins.stripe"
|
||||
event.save()
|
||||
|
||||
@@ -99,8 +98,8 @@ def order(event, item, taxrule, question):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
p1 = o.payments.create(
|
||||
@@ -720,7 +719,7 @@ def test_orderposition_price_calculation_subevent(token_client, organizer, event
|
||||
def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent):
|
||||
with scopes_disabled():
|
||||
item2 = event.items.create(name="Budget Ticket", default_price=23)
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
se2.subeventitem_set.create(item=item2, price=12)
|
||||
op = order.positions.first()
|
||||
op.subevent = subevent
|
||||
@@ -1262,7 +1261,7 @@ def test_position_update_change_item_variation_mismatch(token_client, organizer,
|
||||
@pytest.mark.django_db
|
||||
def test_position_update_change_subevent(token_client, organizer, event, order, quota, item, subevent):
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||
q2.items.add(item)
|
||||
op = order.positions.first()
|
||||
@@ -1284,7 +1283,7 @@ def test_position_update_change_subevent(token_client, organizer, event, order,
|
||||
@pytest.mark.django_db
|
||||
def test_position_update_change_subevent_quota_empty(token_client, organizer, event, order, quota, item, subevent):
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
q2 = se2.quotas.create(name="foo", size=0, event=event)
|
||||
q2.items.add(item)
|
||||
op = order.positions.first()
|
||||
@@ -1365,7 +1364,7 @@ def test_position_update_change_subevent_keep_seat(token_client, organizer, even
|
||||
with scopes_disabled():
|
||||
seat.subevent = subevent
|
||||
seat.save()
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
seat2 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||
q2.items.add(item)
|
||||
@@ -1392,7 +1391,7 @@ def test_position_update_change_subevent_missing_seat(token_client, organizer, e
|
||||
with scopes_disabled():
|
||||
seat.subevent = subevent
|
||||
seat.save()
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||
q2.items.add(item)
|
||||
op = order.positions.first()
|
||||
|
||||
@@ -31,7 +31,6 @@ from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from tests.const import SAMPLE_PNG
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -101,7 +100,7 @@ def quota(event, item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
event.plugins += ",pretix.plugins.stripe"
|
||||
event.save()
|
||||
|
||||
@@ -110,8 +109,8 @@ def order(event, item, taxrule, question):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
p1 = o.payments.create(
|
||||
|
||||
@@ -30,7 +30,6 @@ from django.core import mail as djmail
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
from stripe.error import APIConnectionError
|
||||
from tests.plugins.stripe.test_provider import MockedCharge
|
||||
|
||||
@@ -77,7 +76,7 @@ def quota(event, item):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule, question):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
event.plugins += ",pretix.plugins.stripe"
|
||||
event.save()
|
||||
|
||||
@@ -86,8 +85,8 @@ def order(event, item, taxrule, question):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
p1 = o.payments.create(
|
||||
@@ -947,8 +946,8 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
|
||||
|
||||
with scopes_disabled():
|
||||
cl = event.checkin_lists.create(name="Default")
|
||||
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl)
|
||||
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl, successful=False)
|
||||
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl)
|
||||
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, successful=False)
|
||||
res['checkins'] = [{ # successful only
|
||||
'id': c.pk,
|
||||
'datetime': '2017-12-26T10:00:00Z',
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
import datetime
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import utc
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.plugins.sendmail.models import Rule
|
||||
@@ -31,7 +30,7 @@ from pretix.plugins.sendmail.models import Rule
|
||||
@pytest.fixture
|
||||
def rule(event):
|
||||
return event.sendmail_rules.create(subject='test', template='foo',
|
||||
send_date=datetime.datetime(2021, 7, 8, tzinfo=utc))
|
||||
send_date=datetime.datetime(2021, 7, 8, tzinfo=datetime.timezone.utc))
|
||||
|
||||
|
||||
TEST_RULE_RES = {
|
||||
@@ -131,7 +130,7 @@ def test_sendmail_rule_create_minimal(token_client, organizer, event):
|
||||
'send_date': '2018-03-17T13:31Z',
|
||||
}
|
||||
)
|
||||
assert r.send_date == datetime.datetime(2018, 3, 17, 13, 31, tzinfo=utc)
|
||||
assert r.send_date == datetime.datetime(2018, 3, 17, 13, 31, tzinfo=datetime.timezone.utc)
|
||||
|
||||
|
||||
@scopes_disabled()
|
||||
|
||||
@@ -34,13 +34,12 @@
|
||||
|
||||
import copy
|
||||
import uuid
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import Order, OrderPosition
|
||||
|
||||
@@ -56,8 +55,8 @@ def order(event, item):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
|
||||
@@ -19,14 +19,13 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from decimal import Decimal
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import (
|
||||
InvoiceAddress, Order, OrderPosition, SeatingPlan, SubEvent,
|
||||
@@ -52,15 +51,15 @@ def variations2(item2):
|
||||
|
||||
@pytest.fixture
|
||||
def order(event, item, taxrule):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
||||
total=23, locale='en'
|
||||
)
|
||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||
@@ -344,8 +343,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
|
||||
assert resp.status_code == 200
|
||||
with scopes_disabled():
|
||||
subevent = event.subevents.get(id=subevent.id)
|
||||
assert subevent.date_from == datetime(2018, 12, 27, 10, 0, tzinfo=UTC)
|
||||
assert subevent.date_to == datetime(2018, 12, 28, 10, 0, tzinfo=UTC)
|
||||
assert subevent.date_from == datetime(2018, 12, 27, 10, 0, tzinfo=timezone.utc)
|
||||
assert subevent.date_to == datetime(2018, 12, 28, 10, 0, tzinfo=timezone.utc)
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk),
|
||||
|
||||
@@ -37,10 +37,8 @@ import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
from django.utils import timezone
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import Event, SeatingPlan, Voucher
|
||||
|
||||
@@ -234,7 +232,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
|
||||
assert [res] == resp.data['results']
|
||||
|
||||
voucher.redeemed = 0
|
||||
voucher.valid_until = (timezone.now() - datetime.timedelta(days=1)).replace(microsecond=0)
|
||||
voucher.valid_until = (now() - datetime.timedelta(days=1)).replace(microsecond=0)
|
||||
voucher.save()
|
||||
res['valid_until'] = voucher.valid_until.isoformat().replace('+00:00', 'Z')
|
||||
res['redeemed'] = 0
|
||||
@@ -251,7 +249,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
|
||||
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||
assert [res] == resp.data['results']
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
|
||||
se2.pk))
|
||||
@@ -613,7 +611,7 @@ def test_change_to_item_of_other_event(token_client, organizer, event, item):
|
||||
organizer=organizer,
|
||||
name='Dummy2',
|
||||
slug='dummy2',
|
||||
date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||
date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||
)
|
||||
ticket2 = e2.items.create(name='Late-bird ticket', default_price=23)
|
||||
@@ -1256,8 +1254,8 @@ def test_set_seat_subevent(token_client, organizer, event, seatingplan, seat1, i
|
||||
with scopes_disabled():
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||
v = event.vouchers.create(item=item)
|
||||
@@ -1279,8 +1277,8 @@ def test_set_seat_subevent_required(token_client, organizer, event, seatingplan,
|
||||
with scopes_disabled():
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||
event.vouchers.create(item=item, seat=seat1)
|
||||
@@ -1299,8 +1297,8 @@ def test_set_seat_subevent_invalid(token_client, organizer, event, seatingplan,
|
||||
with scopes_disabled():
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||
event.seats.create(seat_number="B1", product=item, seat_guid="B1", subevent=se2)
|
||||
event.vouchers.create(item=item, seat=seat1, subevent=se2)
|
||||
|
||||
@@ -25,7 +25,6 @@ from unittest import mock
|
||||
|
||||
import pytest
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import WaitingListEntry
|
||||
|
||||
@@ -44,7 +43,7 @@ def quota(event, item):
|
||||
|
||||
@pytest.fixture
|
||||
def wle(event, item):
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
@@ -140,7 +139,7 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent):
|
||||
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||
assert [res] == resp.data['results']
|
||||
with scopes_disabled():
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
|
||||
se2.pk))
|
||||
|
||||
@@ -135,7 +135,7 @@ def test_checkin_blocked_position(position, clist):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_checkin_valid_from(event, position, clist):
|
||||
position.valid_from = event.timezone.localize(datetime(2020, 1, 1, 12, 0, 0))
|
||||
position.valid_from = datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone)
|
||||
position.save()
|
||||
with freeze_time("2020-01-01 10:45:00"):
|
||||
with pytest.raises(CheckInError) as excinfo:
|
||||
@@ -153,7 +153,7 @@ def test_checkin_valid_from(event, position, clist):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_checkin_valid_until(event, position, clist):
|
||||
position.valid_until = event.timezone.localize(datetime(2020, 1, 1, 9, 0, 0))
|
||||
position.valid_until = datetime(2020, 1, 1, 9, 0, 0, tzinfo=event.timezone)
|
||||
position.save()
|
||||
with freeze_time("2020-01-01 10:45:00"):
|
||||
with pytest.raises(CheckInError) as excinfo:
|
||||
@@ -712,7 +712,7 @@ def test_rules_scan_days(event, position, clist):
|
||||
def test_rules_time_isafter_tolerance(event, position, clist):
|
||||
# Ticket is valid starting 10 minutes before admission time
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
event.date_admission = event.timezone.localize(datetime(2020, 1, 1, 12, 0, 0))
|
||||
event.date_admission = datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone)
|
||||
event.save()
|
||||
clist.rules = {"isAfter": [{"var": "now"}, {"buildTime": ["date_admission"]}, 10]}
|
||||
clist.save()
|
||||
@@ -732,7 +732,7 @@ def test_rules_time_isafter_tolerance(event, position, clist):
|
||||
def test_rules_time_isafter_no_tolerance(event, position, clist):
|
||||
# Ticket is valid only after admission time
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
event.date_from = event.timezone.localize(datetime(2020, 1, 1, 12, 0, 0))
|
||||
event.date_from = datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone)
|
||||
# also tests that date_admission falls back to date_from
|
||||
event.save()
|
||||
clist.rules = {"isAfter": [{"var": "now"}, {"buildTime": ["date_admission"]}]}
|
||||
@@ -753,7 +753,7 @@ def test_rules_time_isafter_no_tolerance(event, position, clist):
|
||||
def test_rules_time_isbefore_with_tolerance(event, position, clist):
|
||||
# Ticket is valid until 10 minutes after end time
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
event.date_to = event.timezone.localize(datetime(2020, 1, 1, 12, 0, 0))
|
||||
event.date_to = datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone)
|
||||
event.save()
|
||||
clist.rules = {"isBefore": [{"var": "now"}, {"buildTime": ["date_to"]}, 10]}
|
||||
clist.save()
|
||||
@@ -809,7 +809,7 @@ def test_rules_isafter_subevent(position, clist, event):
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
se1 = event.subevents.create(name="Foo", date_from=event.timezone.localize(datetime(2020, 2, 1, 12, 0, 0)))
|
||||
se1 = event.subevents.create(name="Foo", date_from=datetime(2020, 2, 1, 12, 0, 0, tzinfo=event.timezone))
|
||||
position.subevent = se1
|
||||
position.save()
|
||||
clist.rules = {"isAfter": [{"var": "now"}, {"buildTime": ["date_admission"]}]}
|
||||
@@ -949,7 +949,7 @@ def test_position_queries(django_assert_num_queries, position, clist):
|
||||
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
def test_auto_checkout_at_correct_time(event, position, clist):
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2020, 1, 2, 3, 0))
|
||||
clist.exit_all_at = datetime(2020, 1, 2, 3, 0, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time("2020-01-01 10:00:00+01:00"):
|
||||
perform_checkin(position, clist, {})
|
||||
@@ -962,12 +962,12 @@ def test_auto_checkout_at_correct_time(event, position, clist):
|
||||
assert position.checkins.count() == 2
|
||||
assert position.checkins.first().type == Checkin.TYPE_EXIT
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at == event.timezone.localize(datetime(2020, 1, 3, 3, 0))
|
||||
assert clist.exit_all_at == datetime(2020, 1, 3, 3, 0, tzinfo=event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
def test_auto_check_out_only_if_checked_in(event, position, clist):
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2020, 1, 2, 3, 0))
|
||||
clist.exit_all_at = datetime(2020, 1, 2, 3, 0, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time("2020-01-02 03:05:00+01:00"):
|
||||
process_exit_all(sender=None)
|
||||
@@ -985,7 +985,7 @@ def test_auto_check_out_only_if_checked_in(event, position, clist):
|
||||
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
def test_auto_check_out_only_if_checked_in_before_exit_all_at(event, position, clist):
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2020, 1, 2, 3, 0))
|
||||
clist.exit_all_at = datetime(2020, 1, 2, 3, 0, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time("2020-01-02 04:05:00+01:00"):
|
||||
perform_checkin(position, clist, {})
|
||||
@@ -999,37 +999,37 @@ def test_auto_check_out_dst(event, position, clist):
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
|
||||
# Survive across a shift that doesn't affect the time in question
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2021, 3, 28, 1, 0))
|
||||
clist.exit_all_at = datetime(2021, 3, 28, 1, 0, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 3, 29, 1, 0))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 3, 29, 1, 0, tzinfo=event.timezone)
|
||||
|
||||
# Survive across a shift that makes the time in question ambigous
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2021, 10, 30, 2, 30))
|
||||
clist.exit_all_at = datetime(2021, 10, 30, 2, 30, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 10, 31, 2, 30))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 10, 31, 2, 30, tzinfo=event.timezone)
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 11, 1, 2, 30))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 11, 1, 2, 30, tzinfo=event.timezone)
|
||||
|
||||
# Doesn't survive across a shift that makes the time in question non-existant
|
||||
clist.exit_all_at = event.timezone.localize(datetime(2021, 3, 27, 2, 30))
|
||||
# Moves back after a shift that makes the time in question non-existant
|
||||
clist.exit_all_at = datetime(2021, 3, 27, 2, 30, tzinfo=event.timezone)
|
||||
clist.save()
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 3, 28, 2, 30))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 3, 28, 3, 30, tzinfo=event.timezone)
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 3, 29, 2, 30))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 3, 29, 2, 30, tzinfo=event.timezone)
|
||||
with freeze_time(clist.exit_all_at + timedelta(minutes=5)):
|
||||
process_exit_all(sender=None)
|
||||
clist.refresh_from_db()
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == event.timezone.localize(datetime(2021, 3, 30, 2, 30))
|
||||
assert clist.exit_all_at.astimezone(event.timezone) == datetime(2021, 3, 30, 2, 30, tzinfo=event.timezone)
|
||||
|
||||
@@ -19,10 +19,9 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime, time, timedelta
|
||||
from datetime import datetime, time, timedelta, timezone
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.core import mail as djmail
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
@@ -39,7 +38,7 @@ def event():
|
||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer'
|
||||
)
|
||||
o.settings.timezone = "Europe/Berlin"
|
||||
@@ -70,7 +69,7 @@ def test_event_run_sets_new_time(event, user):
|
||||
|
||||
run_scheduled_exports(None)
|
||||
s.refresh_from_db()
|
||||
assert s.schedule_next_run == event.timezone.localize(datetime(2023, 1, 19, 2, 30, 0))
|
||||
assert s.schedule_next_run == datetime(2023, 1, 19, 2, 30, 0, tzinfo=event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -79,13 +78,13 @@ def test_event_not_run_when_failed_5_times(event, user):
|
||||
s = ScheduledEventExport(event=event, owner=user)
|
||||
s.schedule_rrule = "DTSTART:20230118T000000\nRRULE:FREQ=DAILY;INTERVAL=1;WKST=MO"
|
||||
s.schedule_rrule_time = time(2, 30, 0)
|
||||
s.schedule_next_run = event.timezone.localize(datetime(2023, 1, 18, 2, 30, 0))
|
||||
s.schedule_next_run = datetime(2023, 1, 18, 2, 30, 0, tzinfo=event.timezone)
|
||||
s.error_counter = 5
|
||||
s.save()
|
||||
|
||||
run_scheduled_exports(None)
|
||||
s.refresh_from_db()
|
||||
assert s.schedule_next_run == event.timezone.localize(datetime(2023, 1, 18, 2, 30, 0))
|
||||
assert s.schedule_next_run == datetime(2023, 1, 18, 2, 30, 0, tzinfo=event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -200,7 +199,7 @@ def test_organizer_run_sets_new_time(event, user):
|
||||
|
||||
run_scheduled_exports(None)
|
||||
s.refresh_from_db()
|
||||
assert s.schedule_next_run == event.timezone.localize(datetime(2023, 1, 19, 2, 30, 0))
|
||||
assert s.schedule_next_run == datetime(2023, 1, 19, 2, 30, 0, tzinfo=event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -209,13 +208,13 @@ def test_organizer_not_run_when_failed_5_times(event, user):
|
||||
s = ScheduledOrganizerExport(organizer=event.organizer, owner=user)
|
||||
s.schedule_rrule = "DTSTART:20230118T000000\nRRULE:FREQ=DAILY;INTERVAL=1;WKST=MO"
|
||||
s.schedule_rrule_time = time(2, 30, 0)
|
||||
s.schedule_next_run = event.timezone.localize(datetime(2023, 1, 18, 2, 30, 0))
|
||||
s.schedule_next_run = datetime(2023, 1, 18, 2, 30, 0, tzinfo=event.timezone)
|
||||
s.error_counter = 5
|
||||
s.save()
|
||||
|
||||
run_scheduled_exports(None)
|
||||
s.refresh_from_db()
|
||||
assert s.schedule_next_run == event.timezone.localize(datetime(2023, 1, 18, 2, 30, 0))
|
||||
assert s.schedule_next_run == datetime(2023, 1, 18, 2, 30, 0, tzinfo=event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -304,7 +303,7 @@ def test_organizer_limited_to_events(event, user, team):
|
||||
|
||||
event2 = Event.objects.create(
|
||||
organizer=event.organizer, name='Dummy', slug='dummy2',
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer'
|
||||
)
|
||||
team.all_events = False
|
||||
@@ -344,7 +343,7 @@ def test_organizer_ok(event, user, team):
|
||||
|
||||
Event.objects.create(
|
||||
organizer=event.organizer, name='Dummy', slug='dummy2',
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
||||
plugins='pretix.plugins.banktransfer'
|
||||
)
|
||||
|
||||
|
||||
@@ -20,17 +20,17 @@
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
|
||||
from pretix.base.models import Item
|
||||
|
||||
tz = pytz.timezone("Europe/Berlin")
|
||||
tz = ZoneInfo("Europe/Berlin")
|
||||
|
||||
|
||||
def dt(*args, is_dst=None, **kwargs):
|
||||
return tz.localize(datetime(*args, **kwargs), is_dst=is_dst)
|
||||
def dt(*args, **kwargs):
|
||||
return datetime(*args, **kwargs, tzinfo=tz)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("minutes,hours,days,months,start,expected_end", [
|
||||
@@ -62,7 +62,7 @@ def dt(*args, is_dst=None, **kwargs):
|
||||
(30, 2, 1, 0, dt(2023, 3, 25, 10, 30, 0), dt(2023, 3, 26, 3, 29, 59)),
|
||||
|
||||
# Day + hour with ambiguous end time during DST change
|
||||
(30, 2, 1, 0, dt(2023, 10, 28, 10, 30, 0), dt(2023, 10, 29, 2, 29, 59, is_dst=True)),
|
||||
(30, 2, 1, 0, dt(2023, 10, 28, 10, 30, 0), dt(2023, 10, 29, 2, 29, 59, fold=1)),
|
||||
|
||||
# Month with short month following
|
||||
(0, 0, 0, 1, dt(2023, 1, 31, 10, 30, 0), dt(2023, 2, 28, 23, 59, 59)),
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
#
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.timezone import now
|
||||
@@ -42,7 +42,7 @@ from pretix.base.services.orders import (
|
||||
)
|
||||
from pretix.plugins.banktransfer.payment import BankTransfer
|
||||
|
||||
TZ = pytz.timezone('Europe/Berlin')
|
||||
TZ = ZoneInfo('Europe/Berlin')
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
@@ -51,9 +51,9 @@ def event():
|
||||
o.settings.customer_accounts = True
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0)),
|
||||
date_to=TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||
presale_end=TZ.localize(datetime(2221, 4, 28, 10, 0, 0, 0)),
|
||||
date_from=datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ),
|
||||
date_to=datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
||||
presale_end=datetime(2221, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
||||
plugins='pretix.plugins.banktransfer'
|
||||
)
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
@@ -75,8 +75,8 @@ def membership_type(event):
|
||||
def membership(event, membership_type, customer):
|
||||
return customer.memberships.create(
|
||||
membership_type=membership_type,
|
||||
date_start=TZ.localize(datetime(2021, 4, 1, 0, 0, 0, 0)),
|
||||
date_end=TZ.localize(datetime(2021, 4, 30, 23, 59, 59, 999999)),
|
||||
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=TZ),
|
||||
date_end=datetime(2021, 4, 30, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ def subevent(event):
|
||||
event.has_subevents = True
|
||||
return event.subevents.create(
|
||||
name='Foo',
|
||||
date_from=TZ.localize(datetime(2021, 4, 29, 10, 0, 0, 0)),
|
||||
date_from=datetime(2021, 4, 29, 10, 0, 0, 0, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -115,8 +115,8 @@ def subevent(event):
|
||||
def test_validity_membership_duration_like_event(event, granting_ticket, membership_type):
|
||||
granting_ticket.grant_membership_duration_like_event = True
|
||||
assert membership_validity(granting_ticket, None, event) == (
|
||||
TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||
datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -124,8 +124,8 @@ def test_validity_membership_duration_like_event(event, granting_ticket, members
|
||||
def test_validity_membership_duration_like_subevent_without_end(event, granting_ticket, subevent, membership_type):
|
||||
granting_ticket.grant_membership_duration_like_event = True
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 4, 29, 10, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 4, 29, 23, 59, 59, 999999)),
|
||||
datetime(2021, 4, 29, 10, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 4, 29, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -135,8 +135,8 @@ def test_validity_membership_duration_days(event, granting_ticket, membership_ty
|
||||
granting_ticket.grant_membership_duration_days = 3
|
||||
with freeze_time("2021-04-10T11:00:00+02:00"):
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 4, 10, 0, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 4, 12, 23, 59, 59, 999999)),
|
||||
datetime(2021, 4, 10, 0, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 4, 12, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -146,13 +146,13 @@ def test_validity_membership_duration_months(event, granting_ticket, membership_
|
||||
granting_ticket.grant_membership_duration_months = 1
|
||||
with freeze_time("2021-02-01T11:00:00+01:00"):
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 2, 1, 0, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 2, 28, 23, 59, 59, 999999)),
|
||||
datetime(2021, 2, 1, 0, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 2, 28, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
with freeze_time("2021-02-28T11:00:00+01:00"):
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 2, 28, 0, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 3, 27, 23, 59, 59, 999999)),
|
||||
datetime(2021, 2, 28, 0, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 3, 27, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -163,13 +163,13 @@ def test_validity_membership_duration_months_plus_days(event, granting_ticket, m
|
||||
granting_ticket.grant_membership_duration_days = 2
|
||||
with freeze_time("2021-02-01T11:00:00+01:00"):
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 2, 1, 0, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 3, 2, 23, 59, 59, 999999)),
|
||||
datetime(2021, 2, 1, 0, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 3, 2, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
with freeze_time("2021-02-28T11:00:00+01:00"):
|
||||
assert membership_validity(granting_ticket, subevent, event) == (
|
||||
TZ.localize(datetime(2021, 2, 28, 0, 0, 0, 0)),
|
||||
TZ.localize(datetime(2021, 3, 29, 23, 59, 59, 999999)),
|
||||
datetime(2021, 2, 28, 0, 0, 0, 0, tzinfo=TZ),
|
||||
datetime(2021, 3, 29, 23, 59, 59, 999999, tzinfo=TZ),
|
||||
)
|
||||
|
||||
|
||||
@@ -420,7 +420,7 @@ def test_validate_membership_max_usages(event, customer, membership, requiring_t
|
||||
def test_validate_membership_parallel(event, customer, membership, subevent, requiring_ticket, membership_type):
|
||||
se2 = event.subevents.create(
|
||||
name='Foo',
|
||||
date_from=TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||
date_from=datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
||||
)
|
||||
|
||||
membership_type.allow_parallel_usage = False
|
||||
@@ -585,5 +585,5 @@ def test_grant_when_paid_and_changed(event, customer, granting_ticket):
|
||||
m = customer.memberships.get()
|
||||
assert m.granted_in == order.positions.first()
|
||||
assert m.membership_type == granting_ticket.grant_membership_type
|
||||
assert m.date_start == TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0))
|
||||
assert m.date_end == TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0))
|
||||
assert m.date_start == datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ)
|
||||
assert m.date_end == datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ)
|
||||
|
||||
@@ -39,7 +39,6 @@ from datetime import date, timedelta
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from dateutil.tz import tzoffset
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -1204,13 +1203,13 @@ class OrderTestCase(BaseQuotaTestCase):
|
||||
@classscope(attr='o')
|
||||
def test_payment_term_last_relative(self):
|
||||
self.event.settings.set('payment_term_last', date(2017, 5, 3))
|
||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 3, 23, 59, 59, tzinfo=pytz.UTC)
|
||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC)
|
||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 3, 23, 59, 59, tzinfo=datetime.timezone.utc)
|
||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
self.event.save()
|
||||
self.event.settings.set('payment_term_last', RelativeDateWrapper(
|
||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||
))
|
||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 1, 23, 59, 59, tzinfo=pytz.UTC)
|
||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 1, 23, 59, 59, tzinfo=datetime.timezone.utc)
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_payment_term_last_subevent(self):
|
||||
@@ -1235,14 +1234,14 @@ class OrderTestCase(BaseQuotaTestCase):
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_ticket_download_date_relative(self):
|
||||
self.event.settings.set('ticket_download_date', datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC))
|
||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC)
|
||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC)
|
||||
self.event.settings.set('ticket_download_date', datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=datetime.timezone.utc))
|
||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=datetime.timezone.utc)
|
||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
self.event.save()
|
||||
self.event.settings.set('ticket_download_date', RelativeDateWrapper(
|
||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||
))
|
||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 1, 12, 0, 0, tzinfo=pytz.UTC)
|
||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 1, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_ticket_download_date_subevent(self):
|
||||
@@ -2150,7 +2149,7 @@ class EventTest(TestCase):
|
||||
|
||||
@classscope(attr='organizer')
|
||||
def test_presale_has_ended(self):
|
||||
event = Event(
|
||||
event = Event.objects.create(
|
||||
organizer=self.organizer, name='Download', slug='download',
|
||||
date_from=now()
|
||||
)
|
||||
@@ -2907,15 +2906,15 @@ class ScheduledExportTestCase(TestCase):
|
||||
|
||||
with freeze_time("2023-01-18 15:08:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 1, 19, 6, 30, 0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 1, 19, 6, 30, 0, tzinfo=self.event.timezone)
|
||||
|
||||
with freeze_time("2023-01-19 06:28:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 1, 19, 6, 30, 0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 1, 19, 6, 30, 0, tzinfo=self.event.timezone)
|
||||
|
||||
with freeze_time("2023-01-19 06:30:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 1, 24, 6, 30, 0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 1, 24, 6, 30, 0, tzinfo=self.event.timezone)
|
||||
|
||||
with freeze_time("2024-01-18 15:08:00+01:00"):
|
||||
s.compute_next_run()
|
||||
@@ -2928,10 +2927,10 @@ class ScheduledExportTestCase(TestCase):
|
||||
s.schedule_rrule_time = datetime.time(2, 30, 0)
|
||||
with freeze_time("2023-03-25 18:00:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 3, 26, 3, 30, 0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 3, 26, 3, 30, 0, tzinfo=self.event.timezone)
|
||||
with freeze_time("2023-03-26 18:00:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 3, 27, 2, 30, 0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 3, 27, 2, 30, 0, tzinfo=self.event.timezone)
|
||||
with freeze_time("2023-10-28 18:00:00+01:00"):
|
||||
s.compute_next_run()
|
||||
assert s.schedule_next_run == self.event.timezone.localize(datetime.datetime(2023, 10, 29, 2, 30, 0, fold=0))
|
||||
assert s.schedule_next_run == datetime.datetime(2023, 10, 29, 2, 30, 0, fold=0, tzinfo=self.event.timezone)
|
||||
|
||||
@@ -747,7 +747,7 @@ def test_import_subevent_by_date(user, event, item):
|
||||
event.has_subevents = True
|
||||
event.save()
|
||||
event.settings.timezone = 'Europe/Berlin'
|
||||
s = event.subevents.create(name='Test', date_from=event.timezone.localize(datetime.datetime(2021, 6, 28, 11, 0, 0, 0)), active=True)
|
||||
s = event.subevents.create(name='Test', date_from=datetime.datetime(2021, 6, 28, 11, 0, 0, 0, tzinfo=event.timezone), active=True)
|
||||
settings['item'] = 'static:{}'.format(item.pk)
|
||||
settings['subevent'] = 'csv:J'
|
||||
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.core import mail as djmail
|
||||
from django.db.models import F, Sum
|
||||
from django.test import TestCase
|
||||
@@ -256,9 +256,9 @@ def test_expiry_last_relative_subevents(event):
|
||||
@pytest.mark.django_db
|
||||
def test_expiry_dst(event):
|
||||
event.settings.set('timezone', 'Europe/Berlin')
|
||||
tz = pytz.timezone('Europe/Berlin')
|
||||
utc = pytz.timezone('UTC')
|
||||
today = tz.localize(datetime(2016, 10, 29, 12, 0, 0)).astimezone(utc)
|
||||
tz = ZoneInfo('Europe/Berlin')
|
||||
utc = ZoneInfo('UTC')
|
||||
today = datetime(2016, 10, 29, 12, 0, 0, tzinfo=tz).astimezone(utc)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
@@ -3089,6 +3089,9 @@ def test_autocheckin(clist_autocheckin, event):
|
||||
clist_autocheckin.auto_checkin_sales_channels = []
|
||||
clist_autocheckin.save()
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
@@ -3129,6 +3132,9 @@ def test_saleschannel_testmode_restriction(event):
|
||||
locale='de', sales_channel='web')[0]
|
||||
assert not order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
@@ -3143,6 +3149,9 @@ def test_saleschannel_testmode_restriction(event):
|
||||
locale='de', sales_channel=FoobazSalesChannel.identifier)[0]
|
||||
assert not order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
event.testmode = True
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
@@ -3158,6 +3167,9 @@ def test_saleschannel_testmode_restriction(event):
|
||||
locale='de', sales_channel='web')[0]
|
||||
assert order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
|
||||
import datetime
|
||||
from decimal import Decimal
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from tests.testdummy.payment import DummyPaymentProvider
|
||||
@@ -112,18 +112,18 @@ def test_availability_date_not_available(event):
|
||||
@pytest.mark.django_db
|
||||
def test_availability_date_relative(event):
|
||||
event.settings.set('timezone', 'US/Pacific')
|
||||
tz = pytz.timezone('US/Pacific')
|
||||
event.date_from = tz.localize(datetime.datetime(2016, 12, 3, 12, 0, 0))
|
||||
tz = ZoneInfo('US/Pacific')
|
||||
event.date_from = datetime.datetime(2016, 12, 3, 12, 0, 0, tzinfo=tz)
|
||||
event.save()
|
||||
prov = DummyPaymentProvider(event)
|
||||
prov.settings.set('_availability_date', RelativeDateWrapper(
|
||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||
))
|
||||
|
||||
utc = pytz.timezone('UTC')
|
||||
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 11, 30, 23, 0, 0)).astimezone(utc))
|
||||
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 1, 23, 59, 0)).astimezone(utc))
|
||||
assert not prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 2, 0, 0, 1)).astimezone(utc))
|
||||
utc = datetime.timezone.utc
|
||||
assert prov._is_still_available(datetime.datetime(2016, 11, 30, 23, 0, 0, tzinfo=tz).astimezone(utc))
|
||||
assert prov._is_still_available(datetime.datetime(2016, 12, 1, 23, 59, 0, tzinfo=tz).astimezone(utc))
|
||||
assert not prov._is_still_available(datetime.datetime(2016, 12, 2, 0, 0, 1, tzinfo=tz).astimezone(utc))
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -132,11 +132,11 @@ def test_availability_date_timezones(event):
|
||||
prov = DummyPaymentProvider(event)
|
||||
prov.settings.set('_availability_date', '2016-12-01')
|
||||
|
||||
tz = pytz.timezone('US/Pacific')
|
||||
utc = pytz.timezone('UTC')
|
||||
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 11, 30, 23, 0, 0)).astimezone(utc))
|
||||
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 1, 23, 59, 0)).astimezone(utc))
|
||||
assert not prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 2, 0, 0, 1)).astimezone(utc))
|
||||
tz = ZoneInfo('US/Pacific')
|
||||
utc = ZoneInfo('UTC')
|
||||
assert prov._is_still_available(datetime.datetime(2016, 11, 30, 23, 0, 0, tzinfo=tz).astimezone(utc))
|
||||
assert prov._is_still_available(datetime.datetime(2016, 12, 1, 23, 59, 0, tzinfo=tz).astimezone(utc))
|
||||
assert not prov._is_still_available(datetime.datetime(2016, 12, 2, 0, 0, 1, tzinfo=tz).astimezone(utc))
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -20,16 +20,16 @@
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime, time
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django_scopes import scope
|
||||
|
||||
from pretix.base.models import Event, Organizer
|
||||
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
|
||||
|
||||
TOKYO = pytz.timezone('Asia/Tokyo')
|
||||
BERLIN = pytz.timezone('Europe/Berlin')
|
||||
TOKYO = ZoneInfo('Asia/Tokyo')
|
||||
BERLIN = ZoneInfo('Europe/Berlin')
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -37,8 +37,8 @@ def event():
|
||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
event = Event.objects.create(
|
||||
organizer=o, name='Dummy', slug='dummy',
|
||||
date_from=TOKYO.localize(datetime(2017, 12, 27, 5, 0, 0)),
|
||||
presale_start=TOKYO.localize(datetime(2017, 12, 1, 5, 0, 0)),
|
||||
date_from=datetime(2017, 12, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||
presale_start=datetime(2017, 12, 1, 5, 0, 0, tzinfo=TOKYO),
|
||||
plugins='pretix.plugins.banktransfer'
|
||||
|
||||
)
|
||||
@@ -57,7 +57,7 @@ def test_absolute_date(event):
|
||||
@pytest.mark.django_db
|
||||
def test_relative_date_without_time(event):
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.datetime(event).astimezone(TOKYO) == TOKYO.localize(datetime(2017, 12, 26, 5, 0, 0))
|
||||
assert rdw.datetime(event).astimezone(TOKYO) == datetime(2017, 12, 26, 5, 0, 0, tzinfo=TOKYO)
|
||||
assert rdw.to_string() == 'RELDATE/1/-/date_from/'
|
||||
|
||||
|
||||
@@ -65,64 +65,64 @@ def test_relative_date_without_time(event):
|
||||
def test_relative_date_other_base_point(event):
|
||||
with scope(organizer=event.organizer):
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
||||
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 11, 30, 5, 0, 0))
|
||||
assert rdw.datetime(event) == datetime(2017, 11, 30, 5, 0, 0, tzinfo=TOKYO)
|
||||
assert rdw.to_string() == 'RELDATE/1/-/presale_start/'
|
||||
|
||||
# presale_end is unset, defaults to date_from
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
||||
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 26, 5, 0, 0))
|
||||
assert rdw.datetime(event) == datetime(2017, 12, 26, 5, 0, 0, tzinfo=TOKYO)
|
||||
assert rdw.to_string() == 'RELDATE/1/-/presale_end/'
|
||||
|
||||
# subevent base
|
||||
se = event.subevents.create(name="SE1", date_from=TOKYO.localize(datetime(2017, 11, 27, 5, 0, 0)))
|
||||
se = event.subevents.create(name="SE1", date_from=datetime(2017, 11, 27, 5, 0, 0, tzinfo=TOKYO))
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0))
|
||||
assert rdw.datetime(se) == datetime(2017, 11, 26, 5, 0, 0, tzinfo=TOKYO)
|
||||
|
||||
# presale_start is unset on subevent, default to event
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
||||
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 30, 5, 0, 0))
|
||||
assert rdw.datetime(se) == datetime(2017, 11, 30, 5, 0, 0, tzinfo=TOKYO)
|
||||
|
||||
# presale_end is unset on all, default to date_from of subevent
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
||||
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0))
|
||||
assert rdw.datetime(se) == datetime(2017, 11, 26, 5, 0, 0, tzinfo=TOKYO)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_relative_date_in_minutes(event):
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=None, base_date_name='date_from', minutes_before=60))
|
||||
assert rdw.to_string() == 'RELDATE/minutes/60/date_from/'
|
||||
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 27, 4, 0, 0))
|
||||
assert rdw.datetime(event) == datetime(2017, 12, 27, 4, 0, 0, tzinfo=TOKYO)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_relative_date_with_time(event):
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(8, 5, 13), base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.to_string() == 'RELDATE/1/08:05:13/date_from/'
|
||||
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 26, 8, 5, 13))
|
||||
assert rdw.datetime(event) == datetime(2017, 12, 26, 8, 5, 13, tzinfo=TOKYO)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_relative_date_with_time_around_dst(event):
|
||||
event.settings.timezone = "Europe/Berlin"
|
||||
event.date_from = BERLIN.localize(datetime(2020, 3, 29, 18, 0, 0))
|
||||
event.date_from = datetime(2020, 3, 29, 18, 0, 0, tzinfo=BERLIN)
|
||||
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
||||
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 3, 28, 18, 0, 0))
|
||||
assert rdw.datetime(event) == datetime(2020, 3, 28, 18, 0, 0, tzinfo=BERLIN)
|
||||
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
||||
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 3, 29, 2, 30, 0))
|
||||
assert rdw.datetime(event) == datetime(2020, 3, 29, 2, 30, 0, tzinfo=BERLIN)
|
||||
|
||||
event.date_from = BERLIN.localize(datetime(2020, 10, 25, 18, 0, 0))
|
||||
event.date_from = datetime(2020, 10, 25, 18, 0, 0, tzinfo=BERLIN)
|
||||
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
||||
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 10, 24, 18, 0, 0))
|
||||
assert rdw.datetime(event) == datetime(2020, 10, 24, 18, 0, 0, tzinfo=BERLIN)
|
||||
|
||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
||||
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
||||
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 10, 25, 2, 30, 0))
|
||||
assert rdw.datetime(event) == datetime(2020, 10, 25, 2, 30, 0, tzinfo=BERLIN)
|
||||
|
||||
|
||||
def test_unserialize():
|
||||
|
||||
@@ -21,20 +21,20 @@
|
||||
#
|
||||
|
||||
from datetime import date, datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
|
||||
from pretix.base.timeframes import (
|
||||
REPORTING_DATE_TIMEFRAMES, resolve_timeframe_to_dates_inclusive,
|
||||
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
|
||||
)
|
||||
|
||||
tz = pytz.timezone("Europe/Berlin")
|
||||
tz = ZoneInfo("Europe/Berlin")
|
||||
|
||||
|
||||
def dt(*args):
|
||||
return tz.localize(datetime(*args))
|
||||
return datetime(*args, tzinfo=tz)
|
||||
|
||||
|
||||
ref_date = date(2023, 3, 28)
|
||||
|
||||
@@ -21,16 +21,16 @@
|
||||
#
|
||||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django_scopes import scope
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import Event, Organizer
|
||||
from pretix.base.timeline import timeline_for_event
|
||||
|
||||
tz = pytz.timezone('Europe/Berlin')
|
||||
tz = ZoneInfo('Europe/Berlin')
|
||||
|
||||
|
||||
def one(iterable):
|
||||
|
||||
@@ -499,7 +499,7 @@ class CheckinListFormTest(SoupTest):
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
cl.refresh_from_db()
|
||||
assert cl.exit_all_at == self.event1.timezone.localize(datetime(2020, 1, 2, 3, 0))
|
||||
assert cl.exit_all_at == datetime(2020, 1, 2, 3, 0, tzinfo=self.event1.timezone)
|
||||
|
||||
@freeze_time("2020-01-02 03:05:00+01:00")
|
||||
def test_update_exit_all_at_next_day(self):
|
||||
@@ -512,7 +512,7 @@ class CheckinListFormTest(SoupTest):
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
cl.refresh_from_db()
|
||||
assert cl.exit_all_at == self.event1.timezone.localize(datetime(2020, 1, 3, 3, 0))
|
||||
assert cl.exit_all_at == datetime(2020, 1, 3, 3, 0, tzinfo=self.event1.timezone)
|
||||
|
||||
def test_delete(self):
|
||||
with scopes_disabled():
|
||||
|
||||
@@ -37,14 +37,13 @@ import datetime
|
||||
import time
|
||||
from decimal import Decimal
|
||||
from smtplib import SMTPResponseException
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.test.utils import override_settings
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from pytz import timezone
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import Event, LogEntry, Order, Organizer, Team, User
|
||||
@@ -835,11 +834,11 @@ class EventsTest(SoupTest):
|
||||
assert ev.location == LazyI18nString({'de': 'Hamburg', 'en': 'Hamburg'})
|
||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||
|
||||
berlin_tz = timezone('Europe/Berlin')
|
||||
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
|
||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).exists()
|
||||
|
||||
@@ -954,11 +953,11 @@ class EventsTest(SoupTest):
|
||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||
assert ev.items.count() == 1
|
||||
|
||||
berlin_tz = timezone('Europe/Berlin')
|
||||
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
|
||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
||||
i = ev.items.get()
|
||||
@@ -1027,11 +1026,11 @@ class EventsTest(SoupTest):
|
||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||
assert ev.items.count() == 1
|
||||
|
||||
berlin_tz = timezone('Europe/Berlin')
|
||||
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
||||
|
||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
||||
|
||||
@@ -1079,7 +1078,7 @@ class EventsTest(SoupTest):
|
||||
assert ev.organizer == self.orga1
|
||||
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=pytz.utc)
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
assert ev.date_to is None
|
||||
assert ev.presale_start is None
|
||||
assert ev.presale_end is None
|
||||
@@ -1128,7 +1127,7 @@ class EventsTest(SoupTest):
|
||||
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
||||
team = Team.objects.filter(limit_events=ev, members=self.user).first()
|
||||
assert team == self.team2
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=pytz.utc)
|
||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
assert ev.date_to is None
|
||||
assert ev.presale_start is None
|
||||
assert ev.presale_end is None
|
||||
|
||||
@@ -57,8 +57,8 @@ def test_same_day_english():
|
||||
def test_same_day_spanish():
|
||||
with translation.override('es'):
|
||||
df = date(2003, 2, 1)
|
||||
assert daterange(df, df) == "1 de Febrero de 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">1 de Febrero de 2003</time>'
|
||||
assert daterange(df, df) == "1 de febrero de 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">1 de febrero de 2003</time>'
|
||||
|
||||
|
||||
def test_same_day_other_lang():
|
||||
@@ -88,8 +88,8 @@ def test_same_month_spanish():
|
||||
with translation.override('es'):
|
||||
df = date(2003, 2, 1)
|
||||
dt = date(2003, 2, 3)
|
||||
assert daterange(df, dt) == "1 - 3 de Febrero de 2003"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1</time> - <time datetime="2003-02-03">3 de Febrero de 2003</time>'
|
||||
assert daterange(df, dt) == "1 - 3 de febrero de 2003"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1</time> - <time datetime="2003-02-03">3 de febrero de 2003</time>'
|
||||
|
||||
|
||||
def test_same_year_german():
|
||||
@@ -112,8 +112,8 @@ def test_same_year_spanish():
|
||||
with translation.override('es'):
|
||||
df = date(2003, 2, 1)
|
||||
dt = date(2003, 4, 3)
|
||||
assert daterange(df, dt) == "1 de Febrero - 3 de Abril de 2003"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1 de Febrero</time> - <time datetime="2003-04-03">3 de Abril de 2003</time>'
|
||||
assert daterange(df, dt) == "1 de febrero - 3 de abril de 2003"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1 de febrero</time> - <time datetime="2003-04-03">3 de abril de 2003</time>'
|
||||
|
||||
|
||||
def test_different_dates_german():
|
||||
@@ -136,9 +136,9 @@ def test_different_dates_spanish():
|
||||
with translation.override('es'):
|
||||
df = date(2003, 2, 1)
|
||||
dt = date(2005, 4, 3)
|
||||
assert daterange(df, dt) == "1 de Febrero de 2003 – 3 de Abril de 2005"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1 de Febrero de 2003</time> – ' \
|
||||
'<time datetime="2005-04-03">3 de Abril de 2005</time>'
|
||||
assert daterange(df, dt) == "1 de febrero de 2003 – 3 de abril de 2005"
|
||||
assert daterange(df, dt, as_html=True) == '<time datetime="2003-02-01">1 de febrero de 2003</time> – ' \
|
||||
'<time datetime="2005-04-03">3 de abril de 2005</time>'
|
||||
|
||||
|
||||
def test_different_dates_other_lang():
|
||||
|
||||
@@ -21,13 +21,12 @@
|
||||
#
|
||||
import copy
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, Order, OrderPosition, Organizer, Quota, Team, User,
|
||||
@@ -91,7 +90,7 @@ RES_JOB = {
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_api_list(env, client):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
@@ -111,7 +110,7 @@ def test_api_list(env, client):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_api_detail(env, client):
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||
mock_now.return_value = testtime
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
#
|
||||
|
||||
import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.core import mail as djmail
|
||||
from django.utils.timezone import now, utc
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import InvoiceAddress, Order
|
||||
@@ -46,8 +46,8 @@ def test_sendmail_rule_create_single(event):
|
||||
|
||||
|
||||
dt_now = now()
|
||||
NZ = pytz.timezone('NZ')
|
||||
Berlin = pytz.timezone('Europe/Berlin')
|
||||
NZ = ZoneInfo('NZ')
|
||||
Berlin = ZoneInfo('Europe/Berlin')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -71,62 +71,62 @@ Berlin = pytz.timezone('Europe/Berlin')
|
||||
(dt_now + datetime.timedelta(days=1)).replace(hour=9, minute=0, second=0, microsecond=0)
|
||||
),
|
||||
( # "Relative, before event start"
|
||||
datetime.datetime(2021, 5, 17, 12, 14, 0, tzinfo=utc),
|
||||
datetime.datetime(2021, 5, 17, 12, 14, 0, tzinfo=datetime.timezone.utc),
|
||||
None,
|
||||
'UTC',
|
||||
Rule(date_is_absolute=False, send_offset_days=2, send_offset_time=datetime.time(hour=0)),
|
||||
datetime.datetime(2021, 5, 15, 0, tzinfo=utc)
|
||||
datetime.datetime(2021, 5, 15, 0, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
( # "Relative, after event end"
|
||||
datetime.datetime(2021, 5, 17, 18, tzinfo=utc),
|
||||
datetime.datetime(2021, 5, 18, 5, tzinfo=utc),
|
||||
datetime.datetime(2021, 5, 17, 18, tzinfo=datetime.timezone.utc),
|
||||
datetime.datetime(2021, 5, 18, 5, tzinfo=datetime.timezone.utc),
|
||||
'UTC',
|
||||
Rule(date_is_absolute=False, offset_to_event_end=True, offset_is_after=True, send_offset_days=1, send_offset_time=datetime.time(hour=10)),
|
||||
datetime.datetime(2021, 5, 19, 10, tzinfo=utc)
|
||||
datetime.datetime(2021, 5, 19, 10, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
( # "Relative, before event end"
|
||||
datetime.datetime(2021, 5, 17, 18, tzinfo=utc),
|
||||
datetime.datetime(2021, 5, 22, 5, tzinfo=utc),
|
||||
datetime.datetime(2021, 5, 17, 18, tzinfo=datetime.timezone.utc),
|
||||
datetime.datetime(2021, 5, 22, 5, tzinfo=datetime.timezone.utc),
|
||||
'UTC',
|
||||
Rule(date_is_absolute=False, offset_to_event_end=True, offset_is_after=False, send_offset_days=1, send_offset_time=datetime.time(hour=10)),
|
||||
datetime.datetime(2021, 5, 21, 10, tzinfo=utc)
|
||||
datetime.datetime(2021, 5, 21, 10, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
|
||||
# Tests for timezone quirks
|
||||
( # Test sending on leap day
|
||||
datetime.datetime(2020, 2, 27, 9, tzinfo=utc),
|
||||
datetime.datetime(2020, 2, 27, 9, tzinfo=datetime.timezone.utc),
|
||||
None,
|
||||
'UTC',
|
||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=2, send_offset_time=datetime.time(hour=9)),
|
||||
datetime.datetime(2020, 2, 29, 9, tzinfo=utc)
|
||||
datetime.datetime(2020, 2, 29, 9, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
( # Test timezone far off from UTC
|
||||
NZ.localize(datetime.datetime(2021, 5, 17, 22)),
|
||||
datetime.datetime(2021, 5, 17, 22, tzinfo=NZ),
|
||||
None,
|
||||
'NZ',
|
||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=1, send_offset_time=datetime.time(hour=9)),
|
||||
NZ.localize(datetime.datetime(2021, 5, 18, 9))
|
||||
datetime.datetime(2021, 5, 18, 9, tzinfo=NZ)
|
||||
),
|
||||
( # Test across DST change
|
||||
Berlin.localize(datetime.datetime(2021, 10, 29, 16, 30)),
|
||||
datetime.datetime(2021, 10, 29, 16, 30, tzinfo=Berlin),
|
||||
None,
|
||||
'Europe/Berlin',
|
||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=4, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||
Berlin.localize(datetime.datetime(2021, 11, 2, 2, 30))
|
||||
datetime.datetime(2021, 11, 2, 2, 30, tzinfo=Berlin)
|
||||
),
|
||||
( # Test ambiguous time at DST change
|
||||
Berlin.localize(datetime.datetime(2021, 10, 29, 18, 30)),
|
||||
datetime.datetime(2021, 10, 29, 18, 30, tzinfo=Berlin),
|
||||
None,
|
||||
'Europe/Berlin',
|
||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=2, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||
datetime.datetime(2021, 10, 31, 1, 30, tzinfo=utc)
|
||||
datetime.datetime(2021, 10, 31, 1, 30, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
( # Test non-existing time at DST change
|
||||
Berlin.localize(datetime.datetime(2021, 3, 29, 14, 30)),
|
||||
datetime.datetime(2021, 3, 29, 14, 30, tzinfo=Berlin),
|
||||
None,
|
||||
'Europe/Berlin',
|
||||
Rule(date_is_absolute=False, offset_is_after=False, send_offset_days=1, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||
datetime.datetime(2021, 3, 28, 1, 30, tzinfo=utc)
|
||||
datetime.datetime(2021, 3, 28, 1, 30, tzinfo=datetime.timezone.utc)
|
||||
),
|
||||
|
||||
])
|
||||
@@ -145,7 +145,7 @@ def test_sendmail_rule_send_time(event_from, event_to, event_tz, rule, expected,
|
||||
rule.save()
|
||||
m = ScheduledMail.objects.filter(rule=rule).get()
|
||||
|
||||
assert m.computed_datetime.astimezone(event.timezone) == expected
|
||||
assert m.computed_datetime.astimezone(event.timezone) == expected.astimezone(event.timezone)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -166,7 +166,7 @@ def test_sendmail_rule_recompute(event):
|
||||
sendmail_run_rules(None)
|
||||
|
||||
m = ScheduledMail.objects.filter(rule=rule).first()
|
||||
assert m.computed_datetime.astimezone(utc) == expected
|
||||
assert m.computed_datetime.astimezone(datetime.timezone.utc) == expected
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -23,7 +23,6 @@ import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
import pytz
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
|
||||
@@ -51,7 +50,7 @@ def event():
|
||||
order_paid = Order.objects.create(
|
||||
code='FOO', event=event, email='dummy@dummy.test', phone="+498912345678",
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=datetime.timezone.utc), expires=now() + datetime.timedelta(days=10),
|
||||
total=33, locale='en'
|
||||
)
|
||||
item_ticket = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
||||
@@ -150,7 +149,7 @@ def test_csv_order_by_inherited_name_parts(event): # noqa
|
||||
order2 = Order.objects.create(
|
||||
code='BAR', event=event, email='dummy@dummy.test', phone='+498912345678',
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=datetime.timezone.utc), expires=now() + datetime.timedelta(days=10),
|
||||
total=33, locale='en'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
|
||||
@@ -37,6 +37,7 @@ import datetime
|
||||
import re
|
||||
from decimal import Decimal
|
||||
from json import loads
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from django.conf import settings
|
||||
@@ -45,7 +46,6 @@ from django.core.exceptions import ValidationError
|
||||
from django.test import TestCase
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import timezone
|
||||
from tests.base import SoupTest
|
||||
from tests.testdummy.signals import FoobarSalesChannel
|
||||
|
||||
@@ -1393,11 +1393,11 @@ class EventIcalDownloadTest(EventTestMixin, SoupTest):
|
||||
fmt = '%Y%m%dT%H%M%S'
|
||||
self.assertIn('DTSTART;TZID=%s:%s' %
|
||||
(self.event.settings.timezone,
|
||||
self.event.date_from.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||
self.event.date_from.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
||||
ical, 'incorrect start time')
|
||||
self.assertIn('DTEND;TZID=%s:%s' %
|
||||
(self.event.settings.timezone,
|
||||
self.event.date_to.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||
self.event.date_to.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
||||
ical, 'incorrect end time')
|
||||
self.assertIn('TZID:%s' % self.event.settings.timezone, ical, 'missing VCALENDAR')
|
||||
|
||||
@@ -1416,7 +1416,7 @@ class EventIcalDownloadTest(EventTestMixin, SoupTest):
|
||||
fmt = '%Y%m%dT%H%M%S'
|
||||
self.assertIn('DTSTART;TZID=%s:%s' %
|
||||
(self.event.settings.timezone,
|
||||
self.event.date_from.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||
self.event.date_from.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
||||
ical, 'incorrect start time')
|
||||
self.assertNotIn('DTEND', ical, 'unexpected end time attribute')
|
||||
|
||||
|
||||
@@ -19,12 +19,11 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from pytz import UTC
|
||||
|
||||
from pretix.base.models import Event, Organizer
|
||||
|
||||
@@ -149,7 +148,7 @@ def test_calendar(env, client):
|
||||
env[0].settings.event_list_type = 'calendar'
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=False
|
||||
)
|
||||
r = client.get('/mrmcd/?style=calendar')
|
||||
@@ -169,7 +168,7 @@ def test_week_calendar(env, client):
|
||||
env[0].settings.event_list_type = 'calendar'
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=False
|
||||
)
|
||||
r = client.get('/mrmcd/?style=week')
|
||||
@@ -187,7 +186,7 @@ def test_attributes_in_calendar(env, client):
|
||||
env[0].settings.event_list_type = 'calendar'
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=True
|
||||
)
|
||||
prop = env[0].meta_properties.create(name='loc')
|
||||
@@ -203,7 +202,7 @@ def test_attributes_in_calendar(env, client):
|
||||
def test_ics(env, client):
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=False
|
||||
)
|
||||
r = client.get('/mrmcd/events/ical/')
|
||||
@@ -218,7 +217,7 @@ def test_ics(env, client):
|
||||
def test_ics_subevents(env, client):
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=True, has_subevents=True
|
||||
)
|
||||
with scopes_disabled():
|
||||
@@ -232,12 +231,12 @@ def test_ics_subevents(env, client):
|
||||
def test_ics_subevents_attributes(env, client):
|
||||
e0 = Event.objects.create(
|
||||
organizer=env[0], name='DS2017', slug='DS2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=True
|
||||
)
|
||||
e = Event.objects.create(
|
||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
||||
live=True, is_public=True, has_subevents=True
|
||||
)
|
||||
with scopes_disabled():
|
||||
|
||||
Reference in New Issue
Block a user