Skip to content

Commit 44e7e4a

Browse files
authored
Fix use of iconsistent timezones in tests (#791)
1 parent 55d8bce commit 44e7e4a

File tree

15 files changed

+68
-69
lines changed

15 files changed

+68
-69
lines changed

Diff for: collectives/api/event.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""API to get the event list in index page."""
22

33
import json
4-
from datetime import datetime, timedelta
4+
from datetime import timedelta
55

66
from flask import url_for, request, abort
77
from flask_login import current_user
@@ -15,7 +15,7 @@
1515
from collectives.models import Question, QuestionAnswer, Configuration
1616
from collectives.utils.url import slugify
1717
from collectives.utils.access import valid_user
18-
from collectives.utils.time import format_datetime_range, parse_api_date
18+
from collectives.utils.time import format_datetime_range, parse_api_date, current_time
1919

2020

2121
def photo_uri(event):
@@ -264,7 +264,7 @@ def events():
264264

265265
# Hide very old events to unauthenticated
266266
if not current_user.is_authenticated:
267-
min_date = datetime.now() - timedelta(
267+
min_date = current_time() - timedelta(
268268
days=Configuration.MAX_HISTORY_FOR_ANONYMOUS
269269
)
270270
query = query.filter(Event.end > min_date)

Diff for: collectives/forms/reservation.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
"""Module for equipment reservation forms"""
22

3-
from datetime import datetime
43
from wtforms import SubmitField, HiddenField
54

65
from flask_wtf.form import FlaskForm
76
from wtforms_alchemy import ModelForm
87

98
from collectives.models import Reservation
9+
from collectives.utils.time import current_time
1010

1111

1212
class ReservationForm(FlaskForm, ModelForm):
@@ -27,7 +27,7 @@ def __init__(self, *args, **kwargs):
2727
self.event = kwargs["event"]
2828
self.collect_date.data = self.event.start
2929
else:
30-
self.collect_date.data = datetime.now()
30+
self.collect_date.data = current_time()
3131

3232

3333
class LeaderReservationForm(ReservationForm):

Diff for: collectives/routes/auth/signup.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
"""Auth login to perform account creation and recover."""
22

3-
import datetime
4-
53
from flask import flash, render_template, redirect, url_for, request
64
from flask import current_app
75
from flask_login import current_user
@@ -60,7 +58,7 @@ def process_confirmation(token_uuid):
6058
and token.existing_user.type == UserType.UnverifiedLocal
6159
):
6260
token.existing_user.type = UserType.Local
63-
token.existing_user.legal_text_signature_date = datetime.datetime.now()
61+
token.existing_user.legal_text_signature_date = current_time()
6462
token.existing_user.legal_text_signed_version = (
6563
Configuration.CURRENT_LEGAL_TEXT_VERSION
6664
)

Diff for: collectives/routes/event.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# pylint: disable=too-many-lines
77
from typing import Tuple, List, Set
8-
from datetime import datetime, timedelta
8+
from datetime import timedelta
99

1010
import builtins
1111
from flask import flash, render_template, redirect, url_for, request, send_file
@@ -1220,7 +1220,7 @@ def preview(event_id):
12201220
if event is None:
12211221
abort(404)
12221222

1223-
min_date = datetime.now() - timedelta(days=Configuration.MAX_HISTORY_FOR_ANONYMOUS)
1223+
min_date = current_time() - timedelta(days=Configuration.MAX_HISTORY_FOR_ANONYMOUS)
12241224
if event.end < min_date:
12251225
abort(404)
12261226

Diff for: collectives/routes/profile.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
This modules contains the /profile Blueprint
44
"""
55

6-
from datetime import date, datetime
6+
from datetime import date
77
from os.path import exists
88
from io import BytesIO
99
import textwrap
@@ -29,6 +29,7 @@
2929
from collectives.utils.access import valid_user
3030
from collectives.utils.extranet import ExtranetError
3131
from collectives.utils.misc import sanitize_file_name
32+
from collectives.utils.time import current_time
3233

3334

3435
images = Images()
@@ -205,7 +206,7 @@ def confidentiality_agreement():
205206
request.method == "POST"
206207
and current_user.confidentiality_agreement_signature_date == None
207208
):
208-
current_user.confidentiality_agreement_signature_date = datetime.now()
209+
current_user.confidentiality_agreement_signature_date = current_time()
209210
db.session.add(current_user)
210211
db.session.commit()
211212
flash("Merci d'avoir signé la charte RGPD", "success")

Diff for: collectives/utils/extranet.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def check_license(self, license_number: str) -> LicenseInfo:
201201
if self.disabled():
202202
# Dev mode, every license is valid
203203
info.exists = True
204-
info.renewal_date = datetime.now()
204+
info.renewal_date = current_time()
205205
return info
206206

207207
try:

Diff for: collectives/utils/init.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"""Module to initialise DB"""
22

33
import sqlite3
4-
import datetime
54
import uuid
65
import sys
76

@@ -12,6 +11,7 @@
1211

1312
from collectives.models import ActivityType, EventType, User, Role, db, RoleIds
1413
from collectives.models import Configuration, ConfigurationTypeEnum, ConfigurationItem
14+
from collectives.utils.time import current_time
1515

1616

1717
def catch_db_errors(fct, app, *args, **kwargs):
@@ -133,10 +133,10 @@ def init_admin(app):
133133
user.license = str(uuid.uuid4())[:12]
134134
user.first_name = "Compte"
135135
user.last_name = "Administrateur"
136-
user.confidentiality_agreement_signature_date = datetime.datetime.now()
136+
user.confidentiality_agreement_signature_date = current_time()
137137
version = Configuration.CURRENT_LEGAL_TEXT_VERSION
138138
user.legal_text_signed_version = version
139-
user.legal_text_signature_date = datetime.datetime.now()
139+
user.legal_text_signature_date = current_time()
140140
user.password = app.config["ADMINPWD"]
141141
admin_role = Role(user=user, role_id=int(RoleIds.Administrator))
142142
user.roles.append(admin_role)

Diff for: collectives/utils/stats.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from collectives.models import RegistrationStatus, EventStatus, ActivityType
1717
from collectives.models import User, EventTag
1818
from collectives.utils.openpyxl import columns_best_fit
19+
from collectives.utils.time import current_time
1920

2021
# Pylint does not understand that func.count IS callable.
2122
# See https://github.com/pylint-dev/pylint/issues/1682
@@ -223,7 +224,7 @@ def __init__(self, **kwargs) -> None:
223224
self.start = datetime(int(kwargs["year"]), 9, 1, 0, 0, 0)
224225
self.end = datetime(int(kwargs["year"]) + 1, 8, 30, 23, 59)
225226

226-
self.creation_time = datetime.now()
227+
self.creation_time = current_time()
227228

228229
def nb_days(self) -> int:
229230
"""Returns number of days during the Engine interval.
@@ -482,7 +483,7 @@ def nb_unregistrations_inc_late_and_unjustified_absentees_per_week(self) -> dict
482483
]
483484
),
484485
Event.start < func.now(),
485-
Event.start >= datetime.now() - timedelta(weeks=52),
486+
Event.start >= current_time() - timedelta(weeks=52),
486487
)
487488
.group_by("event_week", Registration.status)
488489
)

Diff for: tests/events/test_event.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from collectives.models import db, EventStatus, ActivityType, Event, EventVisibility
1212
from collectives.models import RoleIds, Question, QuestionType, RegistrationStatus
13+
from collectives.utils.time import current_time
1314
from tests import utils
1415
from tests.fixtures.user import promote_user
1516

@@ -195,7 +196,7 @@ def test_event_creation(leader_client):
195196
response = leader_client.get("/collectives/add")
196197
assert response.status_code == 200
197198

198-
now = datetime.now()
199+
now = current_time()
199200
alpinisme = ActivityType.query.filter_by(name="Alpinisme").first()
200201
data = {
201202
"update_activity": "0",
@@ -294,7 +295,7 @@ def test_event_duplication(leader_client, paying_event):
294295
assert response.status_code == 200
295296

296297
data = utils.load_data_from_form(response.text, "form_edit_event")
297-
now = datetime.now()
298+
now = current_time()
298299
data["start"] = (now + timedelta(days=33)).strftime("%Y-%m-%d %X")
299300
data["end"] = (now + timedelta(days=33, hours=3)).strftime("%Y-%m-%d %X")
300301
response = leader_client.post("/collectives/add", data=data)
@@ -433,7 +434,7 @@ def test_update_attendance_upcoming_event(
433434
"""Test leader changing status of registrations for an event that starts soon"""
434435

435436
event = event1_with_reg_waiting_list
436-
event.start = datetime.now() + timedelta(hours=1)
437+
event.start = current_time() + timedelta(hours=1)
437438
db.session.commit()
438439

439440
waiting_reg = event.waiting_registrations()[0]

Diff for: tests/events/test_registrations.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""Event actions tests related to registrations"""
22

3-
from datetime import date, timedelta, datetime
3+
from datetime import date, timedelta
44
from collectives.models import db, RegistrationStatus, BadgeIds
5+
from collectives.utils.time import current_time
56

67

78
# pylint: disable=unused-argument
@@ -526,7 +527,7 @@ def test_register_for_valid_suspended_user(
526527
assert user.has_a_valid_badge([BadgeIds.Suspended])
527528
assert user.has_a_valid_suspended_badge()
528529
assert len(event.registrations) == 6
529-
assert not event.can_self_register(user, datetime.now())
530+
assert not event.can_self_register(user, current_time())
530531

531532
response = user_client.post(
532533
f"/collectives/{event.id}/self_register", follow_redirects=True

Diff for: tests/fixtures/event.py

+15-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Module to create fixture events."""
22

3-
from datetime import date, timedelta, datetime
3+
from datetime import date, timedelta
44
from functools import wraps
55

66
import pytest
@@ -9,6 +9,7 @@
99
from collectives.models import EventType, Event, EventTag, EventStatus, EventVisibility
1010
from collectives.models import Registration, RegistrationLevels, RegistrationStatus
1111
from collectives.models import Question, QuestionType, QuestionAnswer
12+
from collectives.utils.time import current_time
1213

1314
from tests.fixtures import payment
1415

@@ -298,13 +299,13 @@ def event_in_less_than_x_hours_with_reg(
298299
"""
299300

300301
prototype_event_in_less_than_x_hours.registration_open_time = (
301-
datetime.now() - timedelta(hours=10)
302+
current_time() - timedelta(hours=10)
302303
)
303304
prototype_event_in_less_than_x_hours.registration_close_time = (
304-
datetime.now() + timedelta(hours=2)
305+
current_time() + timedelta(hours=2)
305306
)
306-
prototype_event_in_less_than_x_hours.start = datetime.now() + timedelta(hours=3)
307-
prototype_event_in_less_than_x_hours.end = datetime.now() + timedelta(hours=4)
307+
prototype_event_in_less_than_x_hours.start = current_time() + timedelta(hours=3)
308+
prototype_event_in_less_than_x_hours.end = current_time() + timedelta(hours=4)
308309
prototype_event_in_less_than_x_hours.num_online_slots = 9
309310

310311
for user in [
@@ -321,7 +322,7 @@ def event_in_less_than_x_hours_with_reg(
321322
status=RegistrationStatus.Active,
322323
level=RegistrationLevels.Normal,
323324
is_self=True,
324-
registration_time=datetime.now() - timedelta(weeks=1),
325+
registration_time=current_time() - timedelta(weeks=1),
325326
)
326327
)
327328

@@ -336,13 +337,13 @@ def event_in_less_than_x_hours(prototype_event_in_less_than_x_hours):
336337
"""Fixture for an event starting in less than 48 hours (parameterized)."""
337338

338339
prototype_event_in_less_than_x_hours.registration_open_time = (
339-
datetime.now() - timedelta(hours=10)
340+
current_time() - timedelta(hours=10)
340341
)
341342
prototype_event_in_less_than_x_hours.registration_close_time = (
342-
datetime.now() + timedelta(hours=2)
343+
current_time() + timedelta(hours=2)
343344
)
344-
prototype_event_in_less_than_x_hours.start = datetime.now() + timedelta(hours=3)
345-
prototype_event_in_less_than_x_hours.end = datetime.now() + timedelta(hours=4)
345+
prototype_event_in_less_than_x_hours.start = current_time() + timedelta(hours=3)
346+
prototype_event_in_less_than_x_hours.end = current_time() + timedelta(hours=4)
346347

347348
prototype_event_in_less_than_x_hours.num_online_slots = 9
348349

@@ -364,13 +365,13 @@ def event_with_no_activity_type_in_less_than_x_hours_with_reg(
364365
"""
365366

366367
prototype_event_in_less_than_x_hours.registration_open_time = (
367-
datetime.now() - timedelta(hours=10)
368+
current_time() - timedelta(hours=10)
368369
)
369370
prototype_event_in_less_than_x_hours.registration_close_time = (
370-
datetime.now() + timedelta(hours=2)
371+
current_time() + timedelta(hours=2)
371372
)
372-
prototype_event_in_less_than_x_hours.start = datetime.now() + timedelta(hours=3)
373-
prototype_event_in_less_than_x_hours.end = datetime.now() + timedelta(hours=4)
373+
prototype_event_in_less_than_x_hours.start = current_time() + timedelta(hours=3)
374+
prototype_event_in_less_than_x_hours.end = current_time() + timedelta(hours=4)
374375
prototype_event_in_less_than_x_hours.num_online_slots = 9
375376

376377
prototype_event_in_less_than_x_hours.num_online_slots = 9

Diff for: tests/fixtures/payment.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
33
These are not pytest fixtures."""
44

5-
from datetime import datetime
6-
75
from collectives.models.payment import ItemPrice, PaymentItem
6+
from collectives.utils.time import current_time
87

98

109
def regular_price():
@@ -13,7 +12,7 @@ def regular_price():
1312
price.amount = 12.5
1413
price.title = "Normal"
1514
price.enabled = True
16-
price.update_time = datetime.now()
15+
price.update_time = current_time()
1716
return price
1817

1918

@@ -27,7 +26,7 @@ def leader_price(item):
2726
# pylint: disable=protected-access
2827
price._deprecated_leader_only = True # Test migration as well
2928
# pylint: enable=protected-access
30-
price.update_time = datetime.now()
29+
price.update_time = current_time()
3130
return price
3231

3332

@@ -37,7 +36,7 @@ def free_price():
3736
price.amount = 0
3837
price.title = "Gratuit"
3938
price.enabled = True
40-
price.update_time = datetime.now()
39+
price.update_time = current_time()
4140
return price
4241

4342

@@ -47,7 +46,7 @@ def disabled_price():
4746
price.amount = 0.01
4847
price.title = "Test"
4948
price.enabled = False
50-
price.update_time = datetime.now()
49+
price.update_time = current_time()
5150
return price
5251

5352

Diff for: tests/fixtures/user.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
"""Module to create fixture users."""
22

33
from functools import wraps
4-
from datetime import date, datetime, timedelta
4+
from datetime import date, timedelta
55

66
import pytest
77

88
from collectives.models import User, Gender, db, Role, RoleIds, ActivityType
99
from collectives.models import Badge, BadgeIds, UserType
10+
from collectives.utils.time import current_time
1011

1112
# pylint: disable=unused-argument,redefined-outer-name, unused-import
1213

@@ -74,7 +75,7 @@ def user(app):
7475
user.phone = f"0601020{identifier:03d}"
7576
user.emergency_contact_name = f"Emergency {identifier}"
7677
user.emergency_contact_phone = f"0699999{identifier:03}"
77-
user.legal_text_signature_date = datetime.now()
78+
user.legal_text_signature_date = current_time()
7879
user.legal_text_signed_version = 1
7980
user.gender = Gender(identifier % 2 + 1)
8081

@@ -274,7 +275,7 @@ def promote_user(
274275
activity_type = ActivityType.query.filter_by(name=activity_name).first()
275276
role.activity_id = activity_type.id
276277
if confidentiality_agreement_signature:
277-
user.confidentiality_agreement_signature_date = datetime.now()
278+
user.confidentiality_agreement_signature_date = current_time()
278279
db.session.add(role)
279280

280281

0 commit comments

Comments
 (0)