Validate uniqueness manually all the time

This commit is contained in:
Martin Lensment 2014-10-01 10:42:49 +03:00
parent 0ab1e29a53
commit 3f8f5cc4cd
5 changed files with 17 additions and 14 deletions

View file

@ -48,6 +48,8 @@ module Epp::Common
# for debugging # for debugging
@errors << { code: '1', msg: 'handle_errors was executed when there were actually no errors' } if @errors.blank? @errors << { code: '1', msg: 'handle_errors was executed when there were actually no errors' } if @errors.blank?
@errors.uniq!
render '/epp/error' render '/epp/error'
end end

View file

@ -45,9 +45,9 @@ class Domain < ActiveRecord::Base
validate :validate_period validate :validate_period
validate :validate_nameservers_count validate :validate_nameservers_count
validate :validate_admin_contacts_count validate :validate_admin_contacts_count
validate :validate_nameservers_uniqueness, if: :new_record? validate :validate_nameservers_uniqueness
validate :validate_tech_contacts_uniqueness, if: :new_record? validate :validate_tech_contacts_uniqueness
validate :validate_admin_contacts_uniqueness, if: :new_record? validate :validate_admin_contacts_uniqueness
validate :validate_domain_statuses_uniqueness validate :validate_domain_statuses_uniqueness
attr_accessor :owner_contact_typeahead attr_accessor :owner_contact_typeahead

View file

@ -18,7 +18,6 @@ class DomainContact < ActiveRecord::Base
TYPES = [TECH, ADMIN] TYPES = [TECH, ADMIN]
validates :contact, presence: true validates :contact, presence: true
validates :contact, uniqueness: { scope: [:domain_id, :contact_type] }
scope :admin, -> { where(contact_type: ADMIN) } scope :admin, -> { where(contact_type: ADMIN) }
scope :tech, -> { where(contact_type: TECH) } scope :tech, -> { where(contact_type: TECH) }

View file

@ -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 :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 :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 def epp_code_map
{ {
'2302' => [ '2302' => [

View file

@ -19,6 +19,7 @@ describe 'EPP Domain', epp: true do
Fabricate(:contact, code: 'jd1234') Fabricate(:contact, code: 'jd1234')
response = epp_request(domain_create_xml, :xml) response = epp_request(domain_create_xml, :xml)
expect(response[:results][0][:result_code]).to eq('2303') expect(response[:results][0][:result_code]).to eq('2303')
expect(response[:results][0][:msg]).to eq('Contact was not found') expect(response[:results][0][:msg]).to eq('Contact was not found')
expect(response[:results][0][:value]).to eq('sh8013') 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][:msg]).to eq('Contact was not found')
expect(response[:results][1][:value]).to eq('sh801333') 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') expect(response[:clTRID]).to eq('ABC-12345')
end end
@ -456,15 +453,22 @@ describe 'EPP Domain', epp: true do
expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited') expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited')
response = epp_request(xml, :xml) response = epp_request(xml, :xml)
expect(response[:results][0][:result_code]).to eq('2302') 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][:msg]).to eq('Nameserver already exists on this domain')
expect(response[:results][0][:value]).to eq('mak21') expect(response[:results][0][:value]).to eq('ns1.example.com')
expect(response[:results][1][:result_code]).to eq('2302') 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][:msg]).to eq('Nameserver already exists on this domain')
expect(response[:results][1][:value]).to eq('ns1.example.com') expect(response[:results][1][:value]).to eq('ns2.example.com')
expect(response[:results][2][:msg]).to eq('Nameserver already exists on this domain')
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][:msg]).to eq('Status already exists on this domain')
expect(response[:results][3][:value]).to eq('clientHold') 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][:msg]).to eq('Status already exists on this domain')
expect(response[:results][4][:value]).to eq('clientUpdateProhibited') expect(response[:results][4][:value]).to eq('clientUpdateProhibited')
expect(d.domain_statuses.count).to eq(2) expect(d.domain_statuses.count).to eq(2)