From b6ef81fe31b81af0f18a968f12ea30719ea61d1d Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Wed, 30 Jul 2014 11:16:35 +0300 Subject: [PATCH] Duplicate domain validation --- app/helpers/epp/domains_helper.rb | 13 +++++++++++-- app/models/domain.rb | 1 + spec/epp/domain_spec.rb | 8 ++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index 7792c796c..d5dd1b5b4 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -1,7 +1,16 @@ module Epp::DomainsHelper def create_domain - domain = Domain.create!(domain_create_params) - render '/epp/domains/create' + domain = Domain.new(domain_create_params) + + if domain.save + render '/epp/domains/create' + else + if domain.errors.added?(:name_dirty, :taken) + @code = '2302' + @msg = 'Domain name already exists' + end + render '/epp/error' + end end def check_domain diff --git a/app/models/domain.rb b/app/models/domain.rb index 187359e8a..afec87b5d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -9,6 +9,7 @@ class Domain < ActiveRecord::Base belongs_to :admin_contact, class_name: 'Contact' validates :name, domain_name: true + validates :name_dirty, uniqueness: true validates :name_puny, domain_name: true def name=(value) diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 93e00424f..769e81425 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -15,6 +15,14 @@ describe 'EPP Domain', epp: true do expect(Domain.first.registrar.name).to eq('Zone Media OÜ') end + it 'does not create duplicate domain' do + epp_request('domains/create.xml') + response = epp_request('domains/create.xml') + expect(response[:result_code]).to eq('2302') + expect(response[:msg]).to eq('Domain name already exists') + expect(response[:clTRID]).to eq('ABC-12345') + end + it 'checks a domain' do response = epp_request('domains/check.xml') expect(response[:result_code]).to eq('1000')