def check_form(self): """ Checks the form submitted when the user clicks on the 'send by mail' button. """ form = self.request.form user = self.get_user() self.check_pdf_accessibility() fields = ["name_recipient", "email_recipient", "title", "text"] if not user: fields.extend(["name", "email"]) # All fields are mandatory for field in fields: if not form.get(field): self.errors.append(field) # We check that emails are real emails. email_validator = validation.validatorFor("isEmail") email_fields = ["email_recipient"] if not user: email_fields.append("email") for field in email_fields: value = form.get(field) if not value: continue if not email_validator(value) == 1: self.errors.append("invalid_" + field)
def test_registration(self): from Products.validation import validation v = validation.validatorFor('isDataGridFilled') self.failUnlessEqual(v((0, 1)), 1) self.failUnlessEqual(v([0, 1]), 1) self.failIfEqual(v([1]), 1) self.failIfEqual(v(0), 1)
def _validateEmail(value): validator_function = validation.validatorFor('isEmail') if validator_function(str(value)) != 1: raise Invalid(_(u'The email entered is not valid')) return True
def test_isValidId_plone(self): from Products.validation.validators import IdValidator try: from Products.CMFPlone.utils import check_id except ImportError: return v = validation.validatorFor('isValidId') obj = Dummy('foo') obj2 = Dummy('foo2') parent = Dummy('parent') parent.add(obj) parent.add(obj2) self.assertEqual(v('good', obj), 1) self.assertEqual(v('foo', obj), 1) # This error message would be translated usually, but we do not care. self.assertEqual( v('foo', obj2), u'There is already an item named ${name} in this folder.') # Plone seems to allow spaces. self.assertEqual(v('a b', obj), 1) # Some ids are forbidden in Plone. We get an i18n message back. # Problem: on Plone 5.1, utils.check_id simply looks for a # check_id script/attribute on the context. This will fail. # So only test this in Plone 5.2+, not on 5.1. import pkg_resources version = pkg_resources.get_distribution('Products.CMFPlone').version if version.startswith('5.1'): return self.assertEqual(v('layout', obj), '${name} is reserved.')
def test_FormulaValidator(self): login(self.portal, TEST_USER_NAME) v = validationService.validatorFor('formulavalidator') calcs = self.portal.bika_setup.bika_calculations calc1 = calcs['calculation-1'] interim_fields = [ {'keyword': 'TV', 'title': 'Titration Volume', 'unit': '', 'default': ''}, {'keyword': 'TF', 'title': 'Titration Factor', 'unit': '', 'default': ''}] self.portal.REQUEST.form['InterimFields'] = interim_fields formula = "[TV] * [TF] * [Wrong]" self.failUnlessEqual( v(formula, instance=calc1, field=calc1.schema.get( 'Formula'), REQUEST=self.portal.REQUEST), "Validation failed: Keyword 'Wrong' is invalid") formula = "[TV] * [TF]" self.assertEqual( True, v(formula, instance=calc1, field=calc1.schema.get('Formula'), REQUEST=self.portal.REQUEST))
def validate_email(value): ''' Validate email using Products.validation >>> validate_email('*****@*****.**') == 1 True >>> validate_email('*****@*****.**') == 1 True >>> validate_email('*****@*****.**') == 1 True >>> validate_email('*****@*****.**') == 1 True >>> try: ... validate_email('@bar.com') ... except Invalid: ... print 'Invalid email' Invalid email ''' v = validation.validatorFor('isEmail') if v(str(value)) == 1: return True else: raise Invalid(_(u"The informed email is invalid."))
def ttest_isNotTooLong(self): v = validation.validatorFor('isNotTooLong') self.assertEqual(v('', maxlength=20), 1) self.assertEqual(v('1234567890', maxlength=20), 1) self.assertEqual(v('1234567890', maxlength=10), 1) self.assertEqual(v('1234567890', maxlength=0), 1) self.assertNotEqual(v('1234567890', maxlength=9), 1) self.assertNotEqual(v('1234567890', maxlength=1), 1)
def test_phone_registration(self): from Products.validation import validation v = validation.validatorFor('isBrPhone') self.failUnlessEqual(v('(11)38982121'), 1) self.failIfEqual(v('113898-212121'), 1) self.failUnlessEqual(v('11987772121'), 1) self.failIfEqual(v('11887772121'), 1) self.failIfEqual(v('21987772121'), 1)
def test_isUnixLikeName(self): v = validationService.validatorFor('isUnixLikeName') self.assertEqual(v('abcd'), 1) self.assertEqual(v('a_123456'), 1) self.assertNotEqual(v('123'), 1) self.assertNotEqual(v('ab.c'), 1) self.assertNotEqual(v('ab,c'), 1) self.assertNotEqual(v('aaaaaaaab'), 1) # too long
def test_isUSPhoneNumber(self): v = validation.validatorFor('isUSPhoneNumber') self.failUnlessEqual(v('(212) 555-1212', ignore=r'[\s\(\)\-]'), 1) self.failUnlessEqual(v('2125551212', ignore=r'[\s\(\)\-]'), 1) self.failUnlessEqual(v('(212) 555-1212'), 1)
def test_isURL(self): v = validation.validatorFor('isURL') self.failUnlessEqual(v('http://foo.bar:8080/manage'), 1) self.failUnlessEqual(v('https://foo.bar:8080/manage'), 1) self.failUnlessEqual(v('irc://[email protected]:6667/#plone'), 1) self.failUnlessEqual(v('fish://*****:*****@myserver/~/'), 1) self.failUnlessEqual(v('http://\n'), u"Validation failed(isURL): 'http://\n' is not a valid url.") self.failIfEqual(v('../foo/bar'), 1)
def test_isMailto(self): v = validation.validatorFor('isMailto') self.failUnlessEqual(v('mailto:[email protected]'), 1) self.failIfEqual(v('*****@*****.**'), 1) self.failIfEqual(v('mailto:@foo.bar'), 1) self.failIfEqual(v('@foo.bar'), 1) self.failIfEqual(v('mailto:'), 1) self.failIfEqual(v('me'), 1)
def test_isUnixLikeName(self): v = validation.validatorFor('isUnixLikeName') self.failUnlessEqual(v('abcd'), 1) self.failUnless(v('a_123456'), 1) self.failIfEqual(v('123'), 1) self.failIfEqual(v('ab.c'), 1) self.failIfEqual(v('ab,c'), 1) self.failIfEqual(v('aaaaaaaab'), 1) # too long
def test_isMailto(self): v = validation.validatorFor('isMailto') self.failUnlessEqual(v('mailto:[email protected]'), 1) self.failIfEqual(v('*****@*****.**'), 1) self.failIfEqual(v('mailto:@foo.bar'), 1) self.failIfEqual(v('@foo.bar'), 1) self.failIfEqual(v('mailto:'), 1) self.failUnlessEqual(v('me'), u"Validation failed(isMailto): 'me' is not a valid email address.")
def test_isNotTooLong(self): v = validation.validatorFor('isNotTooLong') self.failUnlessEqual(v('', maxlength=20), 1) self.failUnlessEqual(v('1234567890', maxlength=20), 1) self.failUnlessEqual(v('1234567890', maxlength=10), 1) self.failUnlessEqual(v('1234567890', maxlength=0), 1) self.failIfEqual(v('1234567890', maxlength=9), 1) self.failIfEqual(v('1234567890', maxlength=1), 1)
def test_isUnixLikeName(self): v = validation.validatorFor('isUnixLikeName') self.failUnlessEqual(v('abcd'), 1) self.failUnless(v('a_123456'), 1) self.failIfEqual(v('123'), 1) self.failIfEqual(v('ab.c'), 1) self.failUnlessEqual(v('ab,c'), u"Validation failed(isUnixLikeName): 'ab,c' this name is not a valid identifier") self.failIfEqual(v('aaaaaaaab'), 1) # too long
def test_isNotTooLong(self): v = validation.validatorFor("isNotTooLong") self.failUnlessEqual(v("", maxlength=20), 1) self.failUnlessEqual(v("1234567890", maxlength=20), 1) self.failUnlessEqual(v("1234567890", maxlength=10), 1) self.failUnlessEqual(v("1234567890", maxlength=0), 1) self.failIfEqual(v("1234567890", maxlength=9), 1) self.failIfEqual(v("1234567890", maxlength=1), 1)
def validateQuestion(self, value): """Return a list of validators""" validator = self.getValidation() if validator: v = validation.validatorFor(validator) return v(value) else: return True
def test_isUSPhoneNumber(self): v = validationService.validatorFor('isUSPhoneNumber') self.assertEqual(v('(212) 555-1212', ignore=r'[\s\(\)\-]'), 1) self.assertEqual(v('2125551212', ignore=r'[\s\(\)\-]'), 1) self.assertEqual(v('(212) 555-1212'), 1)
def test_inExNumericRange(self): v = validation.validatorFor('inExNumericRange') self.failUnlessEqual(v(10, minval=1, maxval=20), 1) self.failUnlessEqual(v('10', minval=1, maxval=20), 1) self.failUnlessEqual(v('1', minval=1, maxval=20), 1) self.failUnlessEqual(v('20', minval=1, maxval=20), 1) self.failIfEqual(v(0, minval=1, maxval=5), 1) self.failIfEqual(v(6, minval=1, maxval=5), 1) self.failIfEqual(v(4, minval=5, maxval=3), 1)
def ttest_inExNumericRange(self): v = validation.validatorFor('inExNumericRange') self.assertEqual(v(10, minval=1, maxval=20), 1) self.assertEqual(v('10', minval=1, maxval=20), 1) self.assertEqual(v('1', minval=1, maxval=20), 1) self.assertEqual(v('20', minval=1, maxval=20), 1) self.assertNotEqual(v(0, minval=1, maxval=5), 1) self.assertNotEqual(v(6, minval=1, maxval=5), 1) self.assertNotEqual(v(4, minval=5, maxval=3), 1)
def test_isMailto(self): v = validation.validatorFor('isMailto') self.assertEqual(v('mailto:[email protected]'), 1) self.assertEqual(v('mailto:[email protected]'), 1) self.assertNotEqual(v('*****@*****.**'), 1) self.assertNotEqual(v('mailto:@foo.bar'), 1) self.assertNotEqual(v('@foo.bar'), 1) self.assertNotEqual(v('mailto:'), 1) self.assertEqual(v('me'), u"Validation failed(isMailto): 'me' is not a valid email address.")
def test_inExNumericRange(self): v = validation.validatorFor("inExNumericRange") self.failUnlessEqual(v(10, minval=1, maxval=20), 1) self.failUnlessEqual(v("10", minval=1, maxval=20), 1) self.failUnlessEqual(v("1", minval=1, maxval=20), 1) self.failUnlessEqual(v("20", minval=1, maxval=20), 1) self.failIfEqual(v(0, minval=1, maxval=5), 1) self.failIfEqual(v(6, minval=1, maxval=5), 1) self.failIfEqual(v(4, minval=5, maxval=3), 1)
def test_isItalianNIN(self): v = validation.validatorFor('isItalianNIN') self.failUnlessEqual(v('FBBLCU80E24C814Q'), 1) # works also lowecase self.failUnlessEqual(v('fbblcu80e24c814q'), 1) # works also with mized case self.failUnlessEqual(v('FbbLCU80e24C814Q'), 1) self.failUnlessEqual(v('FbbLCU80z24C814Q'), u"Validation failed(isItalianNIN): 'FbbLCU80z24C814Q' is not a valid National Insurance Number.")
def test_isValidId_basic(self): from Products.validation.validators import IdValidator v = validation.validatorFor('isValidId') obj = Dummy('foo') # Use a specific checker. obj.check_id = obj.dummy_checker self.assertEqual(v('good', obj), 1) self.assertEqual(v('a b', obj), 'bad id')
def test_UncertaintyValidator(self): login(self.portal, TEST_USER_NAME) services = self.portal.bika_setup.bika_analysisservices serv1 = services['analysisservice-1'] v = validationService.validatorFor('uncertainties_validator') field = serv1.schema['Uncertainties'] key = serv1.id + field.getName() uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': '200%'}] self.portal.REQUEST['Uncertainties'] = uncertainties res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100") uncertainties = [{'intercept_min': 'a', 'intercept_max': '200', 'errorvalue': '10%'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Min values must be numeric") uncertainties = [{'intercept_min': '100.01', 'intercept_max': 'a', 'errorvalue': '10%'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Max values must be numeric") uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': 'a%'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Error values must be numeric") uncertainties = [{'intercept_min': '200', 'intercept_max': '100', 'errorvalue': '10%'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Max values must be greater than Min values") uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5%'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100") uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5'}] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Error value must be 0 or greater")
def update_address(self, name, data): """Update address of cart and return message if there are one :param name: Name of address, such as billing and shipping. :type name: str :param data: Form data. :type data: dict :rtype: unicode or None """ message = None items = data data = {} for key in items: text = '{}_'.format(name) if key.startswith(text): data[key[len(text):]] = items.get(key) if not data.get('first_name'): message = _(u'First name is missing.') elif not data.get('last_name'): message = _(u'Last name is missing.') elif not data.get('email') or validation.validatorFor('isEmail')(data.get('email')) != 1: message = _(u'Invalid e-mail address.') elif not data.get('street'): message = _(u'Street address is missing.') elif not data.get('post'): message = _(u'Post code is missing.') elif not data.get('city'): message = _(u'City is missing.') elif not data.get('phone'): message = _(u'Phone number is missing.') else: address = self.get_address(name) if address is not None: for key in data: value = data.get(key) if address.get(key) != value: address[key] = value else: address = data self.update_cart(name, address) return message
def test_isCAP(self): v = validation.validatorFor('isCAP') self.failUnlessEqual(v('44021'), 1) self.failUnlessEqual(v('00100'), 1) self.failUnlessEqual(v('010001'), u"Validation failed(isCAP): '010001' is not a valid CAP.") self.failUnlessEqual(v('100'), u"Validation failed(isCAP): '100' is not a valid CAP.") self.failUnlessEqual(v('44b50'), u"Validation failed(isCAP): '44b50' is not a valid CAP.") self.failUnlessEqual(v('44 21'), u"Validation failed(isCAP): '44 21' is not a valid CAP.")
def update(self): form = self.request.form url = self.context.restrictedTraverse('@@plone_context_state').current_base_url() stock = IStock(self.context) if form.get('form.buttons.QuickAdd') is not None: value = form.get('quick-add') validate = validation.validatorFor('isInt') maximum = self.add()['max'] if validate(value) != 1: message = _(u'add_less_than_number', default=u'Add less than ${number}.', mapping={'number': maximum}) IStatusMessage(self.request).addStatusMessage(message, type='warn') else: value = int(value) message = _(u'successfully_added_number', default=u'Successfully added ${number} pc(s).', mapping={ 'number': stock.add_stock(value)}) IStatusMessage(self.request).addStatusMessage(message, type='info') return self.request.response.redirect(url) elif form.get('form.buttons.QuickSubtract') is not None: value = form.get('quick-subtract') validate = validation.validatorFor('isInt') maximum = self.subtract()['max'] if validate(value) != 1: message = _(u'subtract_less_than_number', default=u'Subtract less than ${number}.', mapping={'number': maximum}) IStatusMessage(self.request).addStatusMessage(message, type='warn') else: value = int(value) message = _(u'successfully_subtracted_number', default=u'Successfully subtracted ${number} pc(s).', mapping={ 'number': stock.sub_stock(value)}) IStatusMessage(self.request).addStatusMessage(message, type='info') return self.request.response.redirect(url) elif form.get('form.buttons.AddNewStock') is not None: url = '{}/++add++collective.cart.stock.Stock'.format(self.context.absolute_url()) return self.request.response.redirect(url)
def test_isPrintable(self): v = validation.validatorFor('isPrintable') self.assertEqual(v('text'), 1) self.assertEqual( v('\\u203'), u"Validation failed(isPrintable): '\\u203' contains unprintable characters" ) if six.PY3: int_type = "<class 'int'>" else: int_type = "<type 'int'>" self.assertEqual( v(10), u"Validation failed(isPrintable): 10 of type {0}, expected 'string'".format(int_type) )
def sendWaitForConfirmationEmail(self, signupSheet, slotTitleLabel, person): url = signupSheet.absolute_url() lang = ILanguage(signupSheet).get_language() if len(lang) == 0: lang = 'de' extraInfoStr = '' for (fieldStr, fieldTrans) in self.extra_fields(): value = getattr(self, fieldStr, '') if len(value) > 0: extraInfoStr += u'{0}: {1}\n'.format( translate(fieldTrans, target_language=lang), value) # mail to person who signed up to waiting list contactInfo = signupSheet.getContactInfo() toEmail = self.email fromEmail = signupSheet.getContactInfo() subject = signupSheet.getEmailWaitForConfirmationSubject() if len(subject) == 0: subject = u'{0} - {1}'.format( signupSheet.Title(), translate(_('Wait For Confirmation'), target_language=lang)) else: subject = replaceCustomMailPlaceholders(subject, person.Title(), signupSheet.Title(), url, slotTitleLabel, extraInfoStr) content = signupSheet.getEmailWaitForConfirmationContent() if len(content) > 0: message = replaceCustomMailPlaceholders(content, person.Title(), signupSheet.Title(), url, slotTitleLabel, extraInfoStr) else: # default message if no content has been specified message = translate( _('Hello'), target_language=lang) + ' ' + person.Title() + ',\n\n' message += translate(_('You signed up for following slot:'), target_language=lang) + '\n' # noqa: E501 message += slotTitleLabel + '\n' message += translate(_( 'You will receive another email as soon as your registration has been confirmed (or rejected).' ), target_language=lang) + '\n\n' # noqa: E501 if len(extraInfoStr) > 0: message += translate(_(u'Additional information'), target_language=lang) + '\n' # noqa: E501 message += extraInfoStr + '\n\n' if len(contactInfo) > 0: message += translate( _('If you have any questions please contact:'), target_language=lang ) + ' ' + contactInfo + '\n\n' # noqa: E501 message += url + '\n\n' mailHost = self.context.MailHost mailHost.secureSend(message, toEmail, fromEmail, subject, charset='utf-8') # mail to contact person of the signup sheet isEmail = validation.validatorFor('isEmail') if signupSheet.getNotifyContactInfo( ) and len(contactInfo) > 0 and isEmail(contactInfo): toEmail = contactInfo fromEmail = signupSheet.getContactInfo() subject = u'{0} - {1}'.format( signupSheet.Title(), translate(_('Wait For Confirmation'), target_language=lang)) message = translate(_('Hello'), target_language=lang) + ',\n\n' message += translate( _('A new signup is waiting for confirmation'), target_language=lang) + ' (' + person.absolute_url( ) + '):\n' # noqa: E501 message += slotTitleLabel + '\n' message += translate( _(u'Name'), target_language=lang) + ': ' + person.Title() + '\n' message += translate( _(u'E-Mail'), target_language=lang) + ': ' + self.email + '\n\n' if len(extraInfoStr) > 0: message += translate(_(u'Additional information'), target_language=lang) + '\n' # noqa: E501 message += extraInfoStr + '\n\n' message += '\nURL: ' + person.absolute_url() + '\n\n' mailHost = self.context.MailHost mailHost.secureSend(message, toEmail, fromEmail, subject, charset='utf-8')
def test_isSSN(self): v = validationService.validatorFor('isSSN') self.assertEqual(v('111223333'), 1) self.assertEqual(v('111-22-3333', ignore=r'-'), 1)
def test_inNumericRange(self): v = validationService.validatorFor('inNumericRange') self.assertEqual(v(10, 1, 20), 1) self.assertEqual(v('10', 1, 20), 1) self.assertNotEqual(v(0, 4, 5), 1)
def sendWaitingListConfirmationEmail(person): isEmail = validation.validatorFor('isEmail') timeSlot = person.aq_parent day = timeSlot.aq_parent signupSheet = day.aq_parent lang = ILanguage(signupSheet).get_language() if len(lang) == 0: lang = 'de' extraInfoStr = person.getExtraInfoAsString() contactInfo = signupSheet.contactInfo fromEmail = signupSheet.contactInfo if isEmail(person.email) != 1: return url = signupSheet.absolute_url() toEmail = person.email subject = signupSheet.emailWaitinglistSubject if subject is None or len(subject) == 0: subject = signupSheet.Title() + ' - ' \ + translate(_('Waiting List Confirmation'), target_language=lang) else: subject = replaceCustomMailPlaceholders( subject, person.Title(), signupSheet.Title(), url, timeSlot.getLabel(), extraInfoStr) content = signupSheet.emailWaitinglistContent if content is not None and len(content) > 0: message = replaceCustomMailPlaceholders( content, person.Title(), signupSheet.Title(), url, timeSlot.getLabel(), extraInfoStr) else: # default message if no content has been specified message = translate(_('Hello'), target_language=lang) + ' ' + person.Title() + ',\n\n' message += translate(_('This message is to confirm that you have been added to the waiting list for:'), target_language=lang) + '\n' # noqa: E501 message += timeSlot.getLabel() + '\n\n' if len(extraInfoStr) > 0: message += translate(_(u'Additional information'), target_language=lang) + '\n' message += extraInfoStr + '\n\n' if len(contactInfo) > 0: message += translate(_('If you have any questions please contact:'), target_language=lang) + ' ' + contactInfo + '\n\n' message += url + '\n\n' api.portal.send_email(recipient=toEmail, sender=fromEmail, subject=subject, body=message) # mail to contact person of the signup sheet if signupSheet.notifyContactInfo and len(contactInfo) > 0 and isEmail(contactInfo): toEmail = contactInfo subject = signupSheet.Title() + ' - ' \ + translate(_('Waiting List Notification'), target_language=lang) message = translate(_('Hello'), target_language=lang) + ',\n\n' message += translate(_('A new signup has been added to the waiting list for:'), target_language=lang) + '\n' message += timeSlot.getLabel() + '\n\n' message += translate(_(u'Name'), target_language=lang) + ': ' + person.Title() + '\n' message += translate(_(u'E-Mail'), target_language=lang) + ': ' + person.email + '\n\n' if len(extraInfoStr) > 0: message += translate(_(u'Additional information'), target_language=lang) + '\n' message += extraInfoStr + '\n\n' message += '\nURL: ' + person.absolute_url() + '\n\n' api.portal.send_email(recipient=toEmail, sender=fromEmail, subject=subject, body=message)
def test_isEmail(self): v = validation.validatorFor('isEmail') self.failUnlessEqual(v('*****@*****.**'), 1) self.failUnlessEqual(v('*****@*****.**'), 1) self.failIfEqual(v('@there.com'), 1)
def test_isDecimal(self): v = validation.validatorFor('isDecimal') self.assertEqual(v('1.5'), 1) self.assertEqual(v('1,5'), 1) self.assertEqual(v('NaN'), u"Validation failed(isDecimal): 'NaN' is not a decimal number.")
def test_isURL(self): v = validationService.validatorFor('isURL') self.assertEqual(v('http://foo.bar:8080/manage'), 1) self.assertNotEqual(v('http://\n'), 1) self.assertNotEqual(v('../foo/bar'), 1)
i18n_domain='FacultyStaffDirectory', ), schemata="Professional Information", searchable=True ), atapi.LinesField( name='websites', widget=atapi.LinesField._properties['widget']( label=_(u"FacultyStaffDirectory_label_websites", default=u"Web Sites"), description=_(u"FacultyStaffDirectory_description_websites", default=u"One per line. Example: http://www.example.com/"), i18n_domain='FacultyStaffDirectory', ), schemata="Professional Information", validators = SequenceValidator('isURLs', validation.validatorFor('isURL')) ), atapi.StringField( name='id', widget=atapi.StringWidget( label=_(u"FacultyStaffDirectory_label_id", default=u"Access Account ID"), i18n_domain='FacultyStaffDirectory', description=_(u"FacultyStaffDirectory_description_id", default=u"Example: abc123"), ), required=True, user_property=True, schemata="Basic Information", write_permission=CHANGE_PERSON_IDS, ),
focus_handler="triggerOnFocusStyles", class_no=None, class_changed="changed-title-field", class_not_changed="not-changed-title-field"), 'link': BlockColumn("Link", column_on_class="hidden-field", columns=['link', 'uid'], read_only=True), 'uid': HiddenColumn("UID", visible=False) }, }) isURL = validation.validatorFor('isURL') class ReferenceDataGridField(DataGridField, ReferenceField): _properties = ReferenceField._properties.copy() _properties.update(DataGridField._properties.copy()) _properties.update({ 'columns': ('title', 'link', 'uid'), 'widget': ReferenceDataGridWidget, 'multiValued': True, }) security = ClassSecurityInfo() security.declarePrivate('isRemoteURL')
"""Constructor validator - a validator (or ValidatorChain) to run against each item in the sequence. For reasonable results, make sure your chain cites the bad input in its error message. Otherwise, the user won't know what the error message applies to. """ self.name = name self.title = kw.get('title', name) self.description = description self.validator = validator def __call__(self, values, *args, **kwargs): errors = [self.validator(v) for v in values] errors = [x for x in errors if x not in (True, 1)] # Filter out non-errors. if errors: return '\n\n'.join(errors) else: # Not sure why this needs to be True, but returning 1 (like # RegexValidator) throws an Unsubscriptable Object exception. [Ed: # It's because that's what the IValidator interface proclaims. The # stock validators are just nonconformant.] return True classImplements(SequenceValidator, IValidator) # Change some error messages to improve grammar validation.validatorFor('isURL').errmsg = _(u'is not a valid URL.'),
def secureSend(self, message, mto=None, mfrom=None, subject=None, encode=None): isEmail = validation.validatorFor('isEmail') if (isEmail(mto) == 1): return else: raise SMTPRecipientsRefused
def test_isUnchecked(self): v = validation.validatorFor('isUnchecked') self.failUnlessEqual(v('0'), 1) self.failIfEqual(v('1'), 1)
def test_pm_IsValidCertifiedSignaturesValidatorFailIfUsingDuplicatedEntries( self): '''Test the 'isCertifiedSignaturesValidator' validator. It fails if 2 entries use exactly same signatureNumber/date_from/date_to.''' v = validation.validatorFor('isValidCertifiedSignatures') # test first without dates, row 3 is wrong certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, { 'signatureNumber': '2', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, { 'signatureNumber': '2', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, ] duplicated_entries_error_msg = translate( 'error_certified_signatures_duplicated_entries', mapping={'row_number': 3}, domain='PloneMeeting', context=self.portal.REQUEST) self.assertEquals(v(certified), duplicated_entries_error_msg) # test with dates, row 2 is wrong certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '2015/01/01', 'date_to': '2015/02/02', }, { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '2015/01/01', 'date_to': '2015/02/02', }, { 'signatureNumber': '2', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, ] duplicated_entries_error_msg2 = translate( 'error_certified_signatures_duplicated_entries', mapping={'row_number': 2}, domain='PloneMeeting', context=self.portal.REQUEST) self.assertEquals(v(certified), duplicated_entries_error_msg2)
def test_isCommaSeparatedEmails(self): v = validation.validatorFor('pfgv_isCommaSeparatedEmails') self.failUnlessEqual(v('[email protected],[email protected]'), 1) self.failUnlessEqual(v('[email protected], [email protected]'), 1) self.failIfEqual(v('[email protected]; [email protected]'), 1)
def test_inNumericRange(self): v = validation.validatorFor('inNumericRange') self.assertEqual(v(10, 1, 20), 1) self.assertEqual(v('10', 1, 20), 1) self.assertEqual(v(0, 4, 5), u"Validation failed(inNumericRange): '0' out of range(4, 5)")
def test_isSSN(self): v = validation.validatorFor('isSSN') self.failUnlessEqual(v('111223333'), 1) self.failUnlessEqual(v('111-22-3333', ignore=r'-'), 1)
def test_isEmail(self): v = validationService.validatorFor('isEmail') self.assertEqual(v('*****@*****.**'), 1) self.assertNotEqual(v('@foo.bar'), 1) self.assertNotEqual(v('me'), 1)
def test_isValidId(self): v = validation.validatorFor("isValidId") self.failUnlessEqual(v("a b", object()), u"Spaces are not allowed in ids")
def isEmail(input): validator = validation.validatorFor('isEmail') return validator(str(input)) == 1
def test_pm_IsValidCertifiedSignaturesValidatorFailsIfWrongDateFormat( self): '''Test the 'isCertifiedSignaturesValidator' validator. It fails if signatures use wrong format for dates.''' v = validation.validatorFor('isValidCertifiedSignatures') # check date format # wrong date certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '2015/02/00', 'date_to': '2015/02/15', }, ] invalid_dates_error_msg = translate( 'error_certified_signatures_invalid_dates', mapping={'row_number': 1}, domain='PloneMeeting', context=self.portal.REQUEST) self.assertEquals(v(certified), invalid_dates_error_msg) # wrong date format, not respecting YYYY/MM/DD certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '2015/15/01', 'date_to': '2015/20/01', }, ] self.assertEquals(v(certified), invalid_dates_error_msg) # date_from must be <= date_to certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '2015/01/15', 'date_to': '2015/01/10', }, ] self.assertEquals(v(certified), invalid_dates_error_msg) # row number is displayed in the error message, check that it works # here, row 2 is wrong certified = [ { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, { 'signatureNumber': '1', 'name': '', 'function': '', 'date_from': 'wrong_date', 'date_to': '2015/01/01', }, { 'signatureNumber': '2', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, ] invalid_dates_error_msg2 = translate( 'error_certified_signatures_invalid_dates', mapping={'row_number': 2}, domain='PloneMeeting', context=self.portal.REQUEST) self.assertEquals(v(certified), invalid_dates_error_msg2)
def test_pm_IsValidCertifiedSignaturesValidatorWorking(self): '''Test the 'isCertifiedSignaturesValidator' validator. Here we are testing that working cases are actually working...""" It fails if : - signatures are not ordered by signature number; - both date_from/date_to are not provided together (if provided); - date format is wrong (respect YYYY/DD/MM, valid DateTime, date_from <= date_to).''' v = validation.validatorFor('isValidCertifiedSignatures') # if nothing is defined, validation is successful self.failIf(v([])) # nothing is required, except signatureNumber # here is a working sample certified = [ { 'signatureNumber': '1', 'name': 'Name1a', 'function': 'Function1a', 'date_from': '2015/01/01', 'date_to': '2015/02/02', }, { 'signatureNumber': '1', 'name': 'Name1b', 'function': 'Function1b', 'date_from': '2015/02/15', 'date_to': '2015/02/15', }, { 'signatureNumber': '1', 'name': 'Name1', 'function': 'Function1', 'date_from': '', 'date_to': '', }, { 'signatureNumber': '2', 'name': 'Name2a', 'function': 'Function2a', 'date_from': '2015/01/01', 'date_to': '2015/01/15', }, { 'signatureNumber': '2', 'name': 'Name2', 'function': 'Function2', 'date_from': '', 'date_to': '', }, ] self.failIf(v(certified)) # every signatures are not mandatorily redefined # this is the case especially while overriding for example signature 2 # on a MeetingGroup and keep signature 1 from the MeetingConfig # fails if signatureNumber are not ordered certified = [ { 'signatureNumber': '2', 'name': '', 'function': '', 'date_from': '', 'date_to': '', }, ] self.failIf(v(certified))
def test_isPrintable(self): v = validationService.validatorFor('isPrintable') self.assertEqual(v('text'), 1) self.assertNotEqual(v('\u203'), 1) self.assertNotEqual(v(10), 1)
def isEmail(value): if validation.validatorFor('isEmail')(value) == 1: return True else: return False
def isEmailValid(self): isEmail = validation.validatorFor('isEmail') return isEmail(self.email) == 1
def test_UncertaintyValidator(self): login(self.portal, TEST_USER_NAME) services = self.portal.bika_setup.bika_analysisservices serv1 = services['analysisservice-1'] v = validationService.validatorFor('uncertainties_validator') field = serv1.schema['Uncertainties'] key = serv1.id + field.getName() uncertainties = [{ 'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': '200%' }] self.portal.REQUEST['Uncertainties'] = uncertainties res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual( res, "Validation failed: Error percentage must be between 0 and 100") uncertainties = [{ 'intercept_min': 'a', 'intercept_max': '200', 'errorvalue': '10%' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Min values must be numeric") uncertainties = [{ 'intercept_min': '100.01', 'intercept_max': 'a', 'errorvalue': '10%' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual(res, "Validation failed: Max values must be numeric") uncertainties = [{ 'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': 'a%' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual( res, "Validation failed: Error values must be numeric") uncertainties = [{ 'intercept_min': '200', 'intercept_max': '100', 'errorvalue': '10%' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual( res, "Validation failed: Max values must be greater than Min values") uncertainties = [{ 'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5%' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual( res, "Validation failed: Error percentage must be between 0 and 100") uncertainties = [{ 'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5' }] self.portal.REQUEST['Uncertainties'] = uncertainties if key in self.portal.REQUEST: self.portal.REQUEST[key] = False res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST) self.failUnlessEqual( res, "Validation failed: Error value must be 0 or greater")
def validateQuestion(self, value): """Return a list of validators""" validator = self.getValidation() v = validation.validatorFor(validator) return v(value)
def isUrlList(data): verify=validation.validatorFor("isURL") for url in (x.strip() for x in data.split()): if verify(url)!=True: return False return True
def test_isEmail(self): v = validation.validatorFor('isEmail') self.assertEqual(v('*****@*****.**'), 1) self.assertEqual(v('*****@*****.**'), 1) self.assertNotEqual(v('@foo.bar'), 1) self.assertEqual(v('me'), u"Validation failed(isEmail): 'me' is not a valid email address.")