From 8dfb80c1ea6c23798a5ba280c7632b73b2a275cc Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 4 Aug 2014 15:10:46 +0300 Subject: [PATCH] Renewed logic for error handling --- app/controllers/concerns/epp/common.rb | 7 ++++++- app/helpers/epp/domains_helper.rb | 2 +- app/models/domain.rb | 6 ++++-- config/locales/en.yml | 1 + spec/epp/domain_spec.rb | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index 26f8dac57..91f44a8b7 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -35,6 +35,11 @@ module Epp::Common def handle_errors(error_code_map, obj) obj.errors.each do |key, err| error_code_map.each do |code, values| + + has_error = Proc.new do |x| + x.is_a?(Array) ? obj.errors.added?(key, x[0], x[1]) : obj.errors.added?(key, x) + end + if err.is_a?(Hash) epp_errors << { code: code, @@ -45,7 +50,7 @@ module Epp::Common epp_errors << { code: code, msg: err, - } and break if values.any? {|x| obj.errors.added?(key, x) } + } and break if values.any? {|x| has_error.call(x)} end end diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index 8298db66d..9b40581ba 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -59,7 +59,7 @@ module Epp::DomainsHelper def handle_errors super({ '2302' => [:epp_domain_taken, :epp_domain_reserved], - '2306' => [:blank], + '2306' => [:blank, [:out_of_range, {min: 1, max: 13}]], '2303' => [:epp_contact_not_found] }, @domain ) diff --git a/app/models/domain.rb b/app/models/domain.rb index 98e5a9210..75051a98a 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -75,9 +75,11 @@ class Domain < ActiveRecord::Base def validate_nameservers_count errors.add(:nameservers, :blank) if nameservers.empty? - if nameservers.count <= 1 || nameservers.count > 13 - errors.add(:nameservers, I18n.t('errors.messages.epp_nameservers_range_fail', min: 1, max: 13)) + unless nameservers.count.between?(1, 13) + errors.add(:nameservers, :out_of_range, {min: 1, max: 13}) end + + errors.empty? end def validate_admin_contacts_count diff --git a/config/locales/en.yml b/config/locales/en.yml index 1c895da78..7af627268 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -45,6 +45,7 @@ en: blank: 'Required parameter missing - admin contact' nameservers: blank: 'Required parameter missing - nameserver' + out_of_range: 'Domain must have %{min}-%{max} nameservers' errors: messages: diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index dc7224d95..34c8a5b41 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -73,7 +73,7 @@ describe 'EPP Domain', epp: true do expect(response[:msg]).to eq('Required parameter missing - nameserver') end - it 'does not create domain with too many nameservers', pending: true do + it 'does not create domain with too many nameservers' do response = epp_request('domains/create_w_too_many_nameservers.xml') expect(response[:result_code]).to eq('2306') expect(response[:msg]).to eq('Domain must have 1-13 nameservers')