forked from Github-Mirrors/canaille
187 lines
5.4 KiB
Python
187 lines
5.4 KiB
Python
![]() |
import datetime
|
||
|
|
||
|
import wtforms
|
||
|
from babel.dates import LOCALTZ
|
||
|
from canaille.app.forms import DateTimeUTCField
|
||
|
from flask import current_app
|
||
|
from werkzeug.datastructures import ImmutableMultiDict
|
||
|
|
||
|
|
||
|
def test_datetime_utc_field_no_timezone_is_local_timezone(testclient):
|
||
|
del current_app.config["TIMEZONE"]
|
||
|
|
||
|
offset = LOCALTZ.utcoffset(datetime.datetime.utcnow())
|
||
|
|
||
|
class TestForm(wtforms.Form):
|
||
|
dt = DateTimeUTCField()
|
||
|
|
||
|
form = TestForm()
|
||
|
form.validate()
|
||
|
assert form.dt.data is None
|
||
|
|
||
|
utc_date = datetime.datetime(2023, 6, 1, 12, tzinfo=datetime.timezone.utc)
|
||
|
locale_date = datetime.datetime(2023, 6, 1, 12) + offset
|
||
|
rendered_locale_date = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
rendered_locale_date_form = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
||
|
request_form = ImmutableMultiDict({"dt": rendered_locale_date_form})
|
||
|
form = TestForm(request_form)
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date_form}">'
|
||
|
)
|
||
|
|
||
|
form = TestForm(data={"dt": utc_date})
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|
||
|
|
||
|
class Foobar:
|
||
|
dt = utc_date
|
||
|
|
||
|
form = TestForm(obj=Foobar())
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_datetime_utc_field_utc(testclient):
|
||
|
current_app.config["TIMEZONE"] = "UTC"
|
||
|
|
||
|
class TestForm(wtforms.Form):
|
||
|
dt = DateTimeUTCField()
|
||
|
|
||
|
form = TestForm()
|
||
|
form.validate()
|
||
|
assert form.dt.data is None
|
||
|
|
||
|
date = datetime.datetime(2023, 6, 1, 12, tzinfo=datetime.timezone.utc)
|
||
|
rendered_date = date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
rendered_date_form = date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
||
|
request_form = ImmutableMultiDict({"dt": rendered_date_form})
|
||
|
form = TestForm(request_form)
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_date_form}">'
|
||
|
)
|
||
|
|
||
|
form = TestForm(data={"dt": date})
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_date}">'
|
||
|
)
|
||
|
|
||
|
class Foobar:
|
||
|
dt = date
|
||
|
|
||
|
form = TestForm(obj=Foobar())
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_date}">'
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_datetime_utc_field_japan_timezone(testclient):
|
||
|
current_app.config["TIMEZONE"] = "Japan"
|
||
|
|
||
|
class TestForm(wtforms.Form):
|
||
|
dt = DateTimeUTCField()
|
||
|
|
||
|
form = TestForm()
|
||
|
form.validate()
|
||
|
assert form.dt.data is None
|
||
|
|
||
|
utc_date = datetime.datetime(2023, 6, 1, 12, tzinfo=datetime.timezone.utc)
|
||
|
locale_date = datetime.datetime(2023, 6, 1, 21)
|
||
|
rendered_locale_date = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
rendered_locale_date_form = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
||
|
request_form = ImmutableMultiDict({"dt": rendered_locale_date_form})
|
||
|
form = TestForm(request_form)
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date_form}">'
|
||
|
)
|
||
|
|
||
|
form = TestForm(data={"dt": utc_date})
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|
||
|
|
||
|
class Foobar:
|
||
|
dt = utc_date
|
||
|
|
||
|
form = TestForm(obj=Foobar())
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_datetime_utc_field_invalid_timezone(testclient):
|
||
|
current_app.config["TIMEZONE"] = "invalid"
|
||
|
|
||
|
offset = LOCALTZ.utcoffset(datetime.datetime.utcnow())
|
||
|
|
||
|
class TestForm(wtforms.Form):
|
||
|
dt = DateTimeUTCField()
|
||
|
|
||
|
form = TestForm()
|
||
|
form.validate()
|
||
|
assert form.dt.data is None
|
||
|
|
||
|
utc_date = datetime.datetime(2023, 6, 1, 12, tzinfo=datetime.timezone.utc)
|
||
|
locale_date = datetime.datetime(2023, 6, 1, 12) + offset
|
||
|
rendered_locale_date = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
rendered_locale_date_form = locale_date.strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
||
|
request_form = ImmutableMultiDict({"dt": rendered_locale_date_form})
|
||
|
form = TestForm(request_form)
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date_form}">'
|
||
|
)
|
||
|
|
||
|
form = TestForm(data={"dt": utc_date})
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|
||
|
|
||
|
class Foobar:
|
||
|
dt = utc_date
|
||
|
|
||
|
form = TestForm(obj=Foobar())
|
||
|
assert form.validate()
|
||
|
assert form.dt.data == utc_date
|
||
|
assert (
|
||
|
form.dt()
|
||
|
== f'<input id="dt" name="dt" type="datetime-local" value="{rendered_locale_date}">'
|
||
|
)
|