feat: add "complete" (sic) timezone support
at least for now, this is enough to let admin define the global default timezone for app, and override system local timezone. eventually should support per-user timezone..some day..
This commit is contained in:
parent
286c683c93
commit
7fcb331806
10 changed files with 274 additions and 93 deletions
|
|
@ -8,6 +8,7 @@ import colander
|
|||
import deform
|
||||
from pyramid import testing
|
||||
|
||||
from wuttjamaican.util import get_timezone_by_name
|
||||
from wuttaweb import grids
|
||||
from wuttaweb.forms import widgets as mod
|
||||
from wuttaweb.forms import schema
|
||||
|
|
@ -145,19 +146,36 @@ class TestWuttaDateTimeWidget(WebTestCase):
|
|||
def make_widget(self, **kwargs):
|
||||
return mod.WuttaDateTimeWidget(self.request, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
node = colander.SchemaNode(WuttaDateTime())
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
dt = datetime.datetime(2024, 12, 12, 13, 49, tzinfo=datetime.timezone.utc)
|
||||
def test_serialize_editable(self):
|
||||
tzlocal = get_timezone_by_name("America/New_York")
|
||||
with patch.object(self.app, "get_timezone", return_value=tzlocal):
|
||||
widget = self.make_widget()
|
||||
self.assertFalse(widget.readonly)
|
||||
node = colander.SchemaNode(WuttaDateTime(), widget=widget)
|
||||
field = self.make_field(node)
|
||||
|
||||
# editable widget has normal picker html
|
||||
result = widget.serialize(field, str(dt))
|
||||
self.assertIn("<wutta-datepicker", result)
|
||||
# nb. input data (from schema type) is always "local, zone-aware, isoformat"
|
||||
dt = datetime.datetime(2024, 12, 12, 13, 49, tzinfo=tzlocal)
|
||||
result = widget.serialize(field, dt.isoformat())
|
||||
self.assertIn("<wutta-datepicker", result)
|
||||
|
||||
# readonly is rendered per app convention
|
||||
result = widget.serialize(field, str(dt), readonly=True)
|
||||
self.assertEqual(result, "2024-12-12 13:49+0000")
|
||||
def test_serialize_readonly(self):
|
||||
tzlocal = get_timezone_by_name("America/New_York")
|
||||
with patch.object(self.app, "get_timezone", return_value=tzlocal):
|
||||
widget = self.make_widget(readonly=True)
|
||||
self.assertTrue(widget.readonly)
|
||||
node = colander.SchemaNode(WuttaDateTime(), widget=widget)
|
||||
field = self.make_field(node)
|
||||
|
||||
# null
|
||||
self.assertEqual(widget.serialize(field, colander.null), "")
|
||||
self.assertEqual(widget.serialize(field, None), "")
|
||||
self.assertEqual(widget.serialize(field, ""), "")
|
||||
|
||||
# input data (from schema type) is always "local, zone-aware, isoformat"
|
||||
dt = datetime.datetime(2024, 12, 12, 13, 49, tzinfo=tzlocal)
|
||||
result = widget.serialize(field, dt.isoformat())
|
||||
self.assertEqual(result, "2024-12-12 13:49-0500")
|
||||
|
||||
|
||||
class TestWuttaMoneyInputWidget(WebTestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue