================= Fixed Bugs (test) ================= All necessary components are set up in the testclass to make sure that we test the real configuration. Let's test the Widget: >>> import datetime >>> import z3c.form >>> import zope.schema ISSUE 1 ------- * status: SOLVED * reported by: Fabian Reinhard | seantis gmbh * assigned to: Rok Garbas | garbas.si After some testing I have seen that some validations are missing, therefore I get an error when adding values like '99' into the year field: "ValueError: year=99 is before 1900; the datetime strftime() methods require year >= 1900" >>> import zope.interface >>> class ITest(zope.interface.Interface): ... date = zope.schema.Date(title=u'Date',required=False) ... datetime = zope.schema.Datetime(title=u'Datetime', required=False) >>> from z3c.form import form, field, button, interfaces >>> class TestForm(form.EditForm): ... fields = field.Fields(ITest) >>> from collective.z3cform.datetimewidget.tests import TestRequest >>> request = TestRequest(form={ ... 'form.widgets.date-day': u'14', ... 'form.widgets.date-month': u'2', ... 'form.widgets.date-year': u'99', ... 'form.widgets.datetime-day': u'1', ... 'form.widgets.datetime-month': u'10', ... 'form.widgets.datetime-year': u'99', ... 'form.widgets.datetime-hour': u'6', ... 'form.widgets.datetime-min': u'35', ... 'form.buttons.apply': u'Apply'}) >>> test_form = TestForm(self.root, request) >>> from zope.browserpage import viewpagetemplatefile >>> from z3c.form import tests >>> import os >>> test_form.template = viewpagetemplatefile.BoundPageTemplate( ... viewpagetemplatefile.ViewPageTemplateFile( ... 'simple_edit.pt', os.path.dirname(tests.__file__)), test_form) >>> from zope.interface import alsoProvides >>> alsoProvides(self.root, ITest) >>> test_form.mode = interfaces.DISPLAY_MODE >>> test_form.update() >>> print test_form.render() #doctest: <...
Sat Feb 14 00:00:00 0099
...>> field = zope.schema.Datetime() >>> widget = self.setupWidget(field) >>> widget.update() >>> widget.extract() is z3c.form.interfaces.NOVALUE True Create our fake request with missing values to check our handling. >>> widget.request = self.testrequest( ... form={'bar-day': '', ... 'bar-month': '1', ... 'bar-year': '', ... 'bar-hour': '01', ... 'bar-min': '00', ... 'bar-empty-marker': '1', ... } ... ) >>> widget.update() >>> widget.value ('', '1', '', '01', '00') Generate our JS and check the results. >>> jquerytools_dateinput_js = widget.show_jquerytools_dateinput_js() Make sure our JS date syntax error isn't present with this incomplete date. >>> 'value: new Date(, 1, )' not in jquerytools_dateinput_js True >>> 'value: new Date("/1/")' not in jquerytools_dateinput_js True We default to specifying no value at all on our widget (thus defaulting to today's date). >>> 'value: new Date(' not in jquerytools_dateinput_js True But make sure we still show a default value if we have a complete date. >>> widget.request = self.testrequest( ... form={'bar-day': '31', ... 'bar-month': '12', ... 'bar-year': '2011', ... 'bar-hour': '01', ... 'bar-min': '00', ... 'bar-empty-marker': '1', ... } ... ) >>> widget.update() >>> widget.value ('2011', '12', '31', '01', '00') Note that our date should get included like this as a string to avoid date offset issues as Javascript expects Date objects defined as Date(2011, 12, 31) to have the starting month index as 0 (so range of 0 to 11). Providing the date as a string avoids maniuplating the date to suit. >>> 'value: new Date("2011/12/31")' in widget.show_jquerytools_dateinput_js() True ISSUE 2 (github) ---------------- * status: SOLVED * reported by: Róman Joost | romanofski * assigned to: Róman Joost | romanofski The datetime widgets default month is January. The widgets default value is influenced by this default value and may cause a traceback. >>> field = zope.schema.Datetime() >>> widget = self.setupWidget(field) >>> widget.update() >>> widget.request = self.testrequest( ... form={'bar-day': '', ... 'bar-month': '1', ... 'bar-year': '', ... 'bar-hour': '00', ... 'bar-min': '00', ... 'bar-empty-marker': '1', ... } ... ) >>> widget.update() >>> widget.formatted_value '' The required field will not validate the widget value: >>> from z3c.form import validator >>> from z3c.form import interfaces >>> field.required True >>> simple = validator.SimpleFieldValidator( ... None, None, None, field, widget) >>> value = interfaces.IDataConverter(widget).toFieldValue(widget.extract()) >>> simple.validate(value) Traceback (most recent call last): RequiredMissing The date widget will have the same issue: >>> field = zope.schema.Date() >>> widget = self.setupWidget(field) >>> widget.update() >>> widget.request = self.testrequest( ... form={'bar-day': '', ... 'bar-month': '1', ... 'bar-year': '', ... 'bar-empty-marker': '1', ... } ... ) >>> widget.update() >>> widget.formatted_value '' The required field will not validate the widget value: >>> field.required True >>> simple = validator.SimpleFieldValidator( ... None, None, None, field, widget) >>> value = interfaces.IDataConverter(widget).toFieldValue(widget.extract()) >>> simple.validate(value) Traceback (most recent call last): RequiredMissing