diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index 4ad882566..c18ed2ea0 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -48,6 +48,8 @@ module Epp::Common # for debugging @errors << { code: '1', msg: 'handle_errors was executed when there were actually no errors' } if @errors.blank? + @errors.uniq! + render '/epp/error' end diff --git a/app/models/domain.rb b/app/models/domain.rb index 06dc0504d..6d6c0500b 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -45,9 +45,9 @@ class Domain < ActiveRecord::Base validate :validate_period validate :validate_nameservers_count validate :validate_admin_contacts_count - validate :validate_nameservers_uniqueness, if: :new_record? - validate :validate_tech_contacts_uniqueness, if: :new_record? - validate :validate_admin_contacts_uniqueness, if: :new_record? + validate :validate_nameservers_uniqueness + validate :validate_tech_contacts_uniqueness + validate :validate_admin_contacts_uniqueness validate :validate_domain_statuses_uniqueness attr_accessor :owner_contact_typeahead diff --git a/app/models/domain_contact.rb b/app/models/domain_contact.rb index 119120de2..9ea598b79 100644 --- a/app/models/domain_contact.rb +++ b/app/models/domain_contact.rb @@ -18,7 +18,6 @@ class DomainContact < ActiveRecord::Base TYPES = [TECH, ADMIN] validates :contact, presence: true - validates :contact, uniqueness: { scope: [:domain_id, :contact_type] } scope :admin, -> { where(contact_type: ADMIN) } scope :tech, -> { where(contact_type: TECH) } diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb index d661b849c..643c6c6c4 100644 --- a/app/models/nameserver.rb +++ b/app/models/nameserver.rb @@ -8,8 +8,6 @@ class Nameserver < ActiveRecord::Base validates :ipv4, format: { with: /\A(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\z/, allow_blank: true } validates :ipv6, format: { with: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/, allow_blank: true } - validates :hostname, uniqueness: { scope: :domain_id } - def epp_code_map { '2302' => [ diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 9ed8f7240..ac766de52 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -19,6 +19,7 @@ describe 'EPP Domain', epp: true do Fabricate(:contact, code: 'jd1234') response = epp_request(domain_create_xml, :xml) + expect(response[:results][0][:result_code]).to eq('2303') expect(response[:results][0][:msg]).to eq('Contact was not found') expect(response[:results][0][:value]).to eq('sh8013') @@ -27,10 +28,6 @@ describe 'EPP Domain', epp: true do expect(response[:results][1][:msg]).to eq('Contact was not found') expect(response[:results][1][:value]).to eq('sh801333') - expect(response[:results][2][:result_code]).to eq('2303') - expect(response[:results][2][:msg]).to eq('Contact was not found') - expect(response[:results][2][:value]).to eq('sh8013') - expect(response[:clTRID]).to eq('ABC-12345') end @@ -456,15 +453,22 @@ describe 'EPP Domain', epp: true do expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited') response = epp_request(xml, :xml) + expect(response[:results][0][:result_code]).to eq('2302') - expect(response[:results][0][:msg]).to eq('Contact already exists on this domain!') - expect(response[:results][0][:value]).to eq('mak21') + expect(response[:results][0][:msg]).to eq('Nameserver already exists on this domain') + expect(response[:results][0][:value]).to eq('ns1.example.com') + expect(response[:results][1][:result_code]).to eq('2302') expect(response[:results][1][:msg]).to eq('Nameserver already exists on this domain') - expect(response[:results][1][:value]).to eq('ns1.example.com') - expect(response[:results][2][:msg]).to eq('Nameserver already exists on this domain') + expect(response[:results][1][:value]).to eq('ns2.example.com') + + expect(response[:results][2][:result_code]).to eq('2302') + expect(response[:results][2][:msg]).to eq('Contact already exists on this domain!') + expect(response[:results][2][:value]).to eq('mak21') + expect(response[:results][3][:msg]).to eq('Status already exists on this domain') expect(response[:results][3][:value]).to eq('clientHold') + expect(response[:results][4][:msg]).to eq('Status already exists on this domain') expect(response[:results][4][:value]).to eq('clientUpdateProhibited') expect(d.domain_statuses.count).to eq(2)