diff --git a/app/models/domain.rb b/app/models/domain.rb index 6c2ab0857..56e606025 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -8,6 +8,8 @@ class Domain < ActiveRecord::Base belongs_to :technical_contact, class_name: 'Contact' belongs_to :admin_contact, class_name: 'Contact' + validates_presence_of :name + validates :name, domain_name: true, uniqueness: { message: I18n.t('errors.messages.epp_domain_taken') } validates :name_puny, domain_name: true validates :period, numericality: { only_integer: true, greater_than: 0, less_than: 100 } diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index d350ce302..18b78f09c 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -16,6 +16,7 @@ class DomainNameValidator < ActiveModel::EachValidator class << self def validate_format(value) + return true unless value value = value.mb_chars.downcase.strip general_domains = /(.pri.ee|.com.ee|.fie.ee|.med.ee|.ee)/ @@ -33,7 +34,8 @@ class DomainNameValidator < ActiveModel::EachValidator !!(value =~ regexp) end - def validate_reservation(value) + def validate_reservation(value) + return true unless value !ReservedDomain.exists?(name: value.mb_chars.downcase.strip) end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 8092cad4c..e813f9aed 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -35,9 +35,12 @@ en: blank: "Required parameter missing - email" ident: blank: "Required parameter missing - ident" + domain: + attributes: + name: + blank: 'Required parameter missing - name' errors: messages: epp_domain_reserved: 'Domain name is reserved or restricted' epp_domain_taken: 'Domain name already exists' - hello: "Hello world" diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index f2ee9f326..9cc797e25 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -31,10 +31,6 @@ describe 'EPP Domain', epp: true do expect(response[:clTRID]).to eq('ABC-12345') end - it 'does not create a domain with false period' do - - end - it 'checks a domain' do response = epp_request('domains/check.xml') expect(response[:result_code]).to eq('1000') diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index f44e08608..1fd0b1891 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -7,7 +7,7 @@ describe Domain do it { should belong_to(:owner_contact) } it { should belong_to(:technical_contact) } - it 'creates a resource' do + it 'validates domain name' do d = Fabricate(:domain) expect(d.name).to_not be_nil @@ -34,6 +34,14 @@ describe Domain do valid_punycode.each do |x| expect(Fabricate.build(:domain, name: x).valid?).to be true end + + d = Domain.new + expect(d.valid?).to be false + + expect(d.errors.messages).to match_array({ + name: ['Required parameter missing - name'], + period: ['is not a number'] + }) end it 'does not create a reserved domain' do @@ -46,4 +54,5 @@ describe Domain do expect(Fabricate.build(:domain, period: 120).valid?).to be false expect(Fabricate.build(:domain, period: 99).valid?).to be true end + end