mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 20:55:44 +02:00
created birth date validator
This commit is contained in:
parent
33a855fbe7
commit
addeebfeb3
6 changed files with 32 additions and 34 deletions
|
@ -13,6 +13,7 @@ class Contact::Ident
|
||||||
validates :type, presence: true, inclusion: { in: proc { types } }
|
validates :type, presence: true, inclusion: { in: proc { types } }
|
||||||
validates :country_code, presence: true, iso31661_alpha2: true
|
validates :country_code, presence: true, iso31661_alpha2: true
|
||||||
validates_with MismatchValidator
|
validates_with MismatchValidator
|
||||||
|
validates_with BirthDateValidator, if: :birthday?
|
||||||
|
|
||||||
def self.epp_code_map
|
def self.epp_code_map
|
||||||
{
|
{
|
||||||
|
@ -26,6 +27,7 @@ class Contact::Ident
|
||||||
[:code, :invalid_national_id],
|
[:code, :invalid_national_id],
|
||||||
[:code, :invalid_reg_no],
|
[:code, :invalid_reg_no],
|
||||||
[:code, :invalid_iso8601_date],
|
[:code, :invalid_iso8601_date],
|
||||||
|
[:code, :invalid_birth_date],
|
||||||
[:country_code, :invalid_iso31661_alpha2]
|
[:country_code, :invalid_iso31661_alpha2]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,6 @@ class Epp::Contact < Contact
|
||||||
# disable STI, there is type column present
|
# disable STI, there is type column present
|
||||||
self.inheritance_column = :sti_disabled
|
self.inheritance_column = :sti_disabled
|
||||||
|
|
||||||
VALID_BIRTH_DATE_FROM = Time.zone.today - 150.years
|
|
||||||
VALID_BIRTH_DATE_TO = Time.zone.tomorrow
|
|
||||||
|
|
||||||
before_validation :manage_permissions
|
before_validation :manage_permissions
|
||||||
|
|
||||||
def manage_permissions
|
def manage_permissions
|
||||||
|
@ -19,28 +16,6 @@ class Epp::Contact < Contact
|
||||||
throw(:abort)
|
throw(:abort)
|
||||||
end
|
end
|
||||||
|
|
||||||
validate :validate_birthday_ident
|
|
||||||
|
|
||||||
def validate_birthday_ident
|
|
||||||
return unless Depp::Contact::SELECTION_TYPES[2].include?(ident_type)
|
|
||||||
|
|
||||||
begin
|
|
||||||
Date.parse(ident)
|
|
||||||
rescue ArgumentError
|
|
||||||
add_epp_error('2308', nil, nil, I18n.t('epp.contacts.errors.valid_ident_date_format'))
|
|
||||||
@error = true
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
contact_ident_date = Date.parse(ident)
|
|
||||||
valid_time_range = VALID_BIRTH_DATE_FROM...VALID_BIRTH_DATE_TO
|
|
||||||
return if valid_time_range.cover?(contact_ident_date)
|
|
||||||
|
|
||||||
add_epp_error('2308', nil, nil, I18n.t('epp.contacts.errors.valid_ident_date_range'))
|
|
||||||
@error = true
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
# support legacy search
|
# support legacy search
|
||||||
def find_by_epp_code(code)
|
def find_by_epp_code(code)
|
||||||
|
|
26
app/validators/contact/ident/birth_date_validator.rb
Normal file
26
app/validators/contact/ident/birth_date_validator.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
class Contact::Ident::BirthDateValidator < ActiveModel::Validator
|
||||||
|
VALID_BIRTH_DATE_FROM = Time.zone.today - 150.years
|
||||||
|
VALID_BIRTH_DATE_TO = Time.zone.tomorrow
|
||||||
|
|
||||||
|
def validate(record)
|
||||||
|
record.errors.add(:code, :invalid_birth_date) if birth_date_wrong?(record)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def birth_date_wrong?(record)
|
||||||
|
return unless record.birthday?
|
||||||
|
|
||||||
|
begin
|
||||||
|
Date.parse(record.code)
|
||||||
|
rescue ArgumentError
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
contact_ident_date = Date.parse(record.code)
|
||||||
|
valid_time_range = VALID_BIRTH_DATE_FROM...VALID_BIRTH_DATE_TO
|
||||||
|
return if valid_time_range.cover?(contact_ident_date)
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,12 +8,6 @@ en:
|
||||||
valid_ident: >-
|
valid_ident: >-
|
||||||
Ident update is not allowed.
|
Ident update is not allowed.
|
||||||
Consider creating new contact object
|
Consider creating new contact object
|
||||||
valid_ident_date_format: >-
|
|
||||||
Ident update is not allowed.
|
|
||||||
Date format is invalid
|
|
||||||
valid_ident_date_range: >-
|
|
||||||
Ident update is not allowed.
|
|
||||||
Age must be over 0 and under 150
|
|
||||||
ident_update: >-
|
ident_update: >-
|
||||||
Only ident type and country can be updated in case of invalid ident.
|
Only ident type and country can be updated in case of invalid ident.
|
||||||
Please create new contact object to update ident code
|
Please create new contact object to update ident code
|
||||||
|
|
|
@ -9,3 +9,4 @@ en:
|
||||||
code:
|
code:
|
||||||
invalid_national_id: does not conform to national identification number format of %{country}
|
invalid_national_id: does not conform to national identification number format of %{country}
|
||||||
invalid_reg_no: does not conform to registration number format of %{country}
|
invalid_reg_no: does not conform to registration number format of %{country}
|
||||||
|
invalid_birth_date: Birth date is invalid, age must be over 0 and under 150
|
||||||
|
|
|
@ -119,7 +119,7 @@ class EppContactCreateBaseTest < EppTestCase
|
||||||
|
|
||||||
response_xml = Nokogiri::XML(response.body)
|
response_xml = Nokogiri::XML(response.body)
|
||||||
assert_correct_against_schema response_xml
|
assert_correct_against_schema response_xml
|
||||||
assert_epp_response :data_management_policy_violation
|
assert_epp_response :parameter_value_syntax_error
|
||||||
|
|
||||||
request_xml.sub! ">#{birthday_wrong_format}<", ">#{birthday_above_valid_range}<"
|
request_xml.sub! ">#{birthday_wrong_format}<", ">#{birthday_above_valid_range}<"
|
||||||
assert_no_difference 'Contact.count' do
|
assert_no_difference 'Contact.count' do
|
||||||
|
@ -129,7 +129,7 @@ class EppContactCreateBaseTest < EppTestCase
|
||||||
|
|
||||||
response_xml = Nokogiri::XML(response.body)
|
response_xml = Nokogiri::XML(response.body)
|
||||||
assert_correct_against_schema response_xml
|
assert_correct_against_schema response_xml
|
||||||
assert_epp_response :data_management_policy_violation
|
assert_epp_response :parameter_value_syntax_error
|
||||||
|
|
||||||
request_xml.sub! ">#{birthday_above_valid_range}<", ">#{birthday_below_valid_range}<"
|
request_xml.sub! ">#{birthday_above_valid_range}<", ">#{birthday_below_valid_range}<"
|
||||||
assert_no_difference 'Contact.count' do
|
assert_no_difference 'Contact.count' do
|
||||||
|
@ -139,7 +139,7 @@ class EppContactCreateBaseTest < EppTestCase
|
||||||
|
|
||||||
response_xml = Nokogiri::XML(response.body)
|
response_xml = Nokogiri::XML(response.body)
|
||||||
assert_correct_against_schema response_xml
|
assert_correct_against_schema response_xml
|
||||||
assert_epp_response :data_management_policy_violation
|
assert_epp_response :parameter_value_syntax_error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_responces_error_with_email_error
|
def test_responces_error_with_email_error
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue