diff --git a/app/models/contact.rb b/app/models/contact.rb index b6b1e979b..ea422041e 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -28,7 +28,12 @@ class Contact < ApplicationRecord .where('success = false and verified_at IS NOT NULL') } + NAME_REGEXP = /([\u00A1-\u00B3\u00B5-\u00BF\u0021-\u0026\u0028-\u002C\u003A-\u0040]| + [\u005B-\u005F\u007B-\u007E\u2040-\u206F\u20A0-\u20BF\u2100-\u218F])/x.freeze + validates :name, :email, presence: true + validates :name, format: { without: NAME_REGEXP, message: :invalid }, if: -> { priv? } + validates :street, :city, :zip, :country_code, presence: true, if: lambda { self.class.address_processing? } diff --git a/config/locales/contacts.en.yml b/config/locales/contacts.en.yml index 4b4d099d7..c3fe0d47c 100644 --- a/config/locales/contacts.en.yml +++ b/config/locales/contacts.en.yml @@ -14,6 +14,7 @@ en: too_long_contact_code: "Contact code is too long, max 100 characters" name: blank: "Required parameter missing - name" + invalid: "Name is invalid" phone: blank: "Required parameter missing - phone" invalid: "Phone nr is invalid" diff --git a/test/models/contact_test.rb b/test/models/contact_test.rb index 4a598b0c7..69f17da15 100644 --- a/test/models/contact_test.rb +++ b/test/models/contact_test.rb @@ -32,6 +32,21 @@ class ContactTest < ActiveJob::TestCase assert contact.invalid? end + def test_allowed_and_disallowed_symbols_for_name + contact = valid_contact + contact.name = 'MARY ÄNN O’CONNEŽ-ŠUSLIK' + assert contact.valid? + contact.name = 'Boğaçhan Çağlayan' + assert contact.valid? + contact.name = '# "¤ #" ¤ "?' + assert contact.invalid? + + contact.country_code = 'FI' + contact.ident_type = Contact::ORG + contact.ident = '1234' + assert contact.valid? + end + def test_validates_code_format contact = valid_contact.dup max_length = 100