diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb
index a2fc436e7..8298db66d 100644
--- a/app/helpers/epp/domains_helper.rb
+++ b/app/helpers/epp/domains_helper.rb
@@ -52,6 +52,7 @@ module Epp::DomainsHelper
def domain_nameservers
ph = params_hash['epp']['command']['create']['create']['ns']
+ return [] unless ph
ph[:hostObj]
end
diff --git a/app/models/domain.rb b/app/models/domain.rb
index bee844482..98e5a9210 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -66,6 +66,18 @@ class Domain < ActiveRecord::Base
self.nameservers << Nameserver.find_or_create_by(hostname: x)
end
save!
+
+ validate_nameservers_count
+
+ errors.empty?
+ end
+
+ 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))
+ end
end
def validate_admin_contacts_count
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 760fc980b..1c895da78 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -43,7 +43,8 @@ en:
blank: 'Required parameter missing - registrant'
admin_contacts:
blank: 'Required parameter missing - admin contact'
-
+ nameservers:
+ blank: 'Required parameter missing - nameserver'
errors:
messages:
@@ -52,3 +53,4 @@ en:
epp_obj_does_not_exist: 'Object does not exist'
epp_command_failed: 'Command failed'
epp_contact_not_found: 'Contact was not found'
+ epp_nameservers_range_fail: 'Domain must have %{min}-%{max} nameservers'
diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb
index 874d1bd12..dc7224d95 100644
--- a/spec/epp/domain_spec.rb
+++ b/spec/epp/domain_spec.rb
@@ -66,6 +66,18 @@ describe 'EPP Domain', epp: true do
expect(response[:result_code]).to eq('2306')
expect(response[:msg]).to eq('Required parameter missing - registrant')
end
+
+ it 'does not create domain without nameservers' do
+ response = epp_request('domains/create_wo_nameservers.xml')
+ expect(response[:result_code]).to eq('2306')
+ expect(response[:msg]).to eq('Required parameter missing - nameserver')
+ end
+
+ it 'does not create domain with too many nameservers', pending: true 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')
+ end
end
context 'with juridical persion as an owner' do
diff --git a/spec/epp/requests/domains/create_w_too_many_nameservers.xml b/spec/epp/requests/domains/create_w_too_many_nameservers.xml
new file mode 100644
index 000000000..110cc66ed
--- /dev/null
+++ b/spec/epp/requests/domains/create_w_too_many_nameservers.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ example.ee
+ 1
+
+ ns1.example.net
+ ns2.example.net
+ ns3.example.net
+ ns4.example.net
+ ns5.example.net
+ ns6.example.net
+ ns7.example.net
+ ns8.example.net
+ ns9.example.net
+ ns10.example.net
+ ns11.example.net
+ ns12.example.net
+ ns13.example.net
+ ns14.example.net
+
+ jd1234
+ sh8013
+ sh8013
+ sh801333
+
+ 2fooBAR
+
+
+
+ ABC-12345
+
+
diff --git a/spec/epp/requests/domains/create_wo_nameservers.xml b/spec/epp/requests/domains/create_wo_nameservers.xml
new file mode 100644
index 000000000..4752f80cd
--- /dev/null
+++ b/spec/epp/requests/domains/create_wo_nameservers.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ example.ee
+ 1
+ jd1234
+ sh8013
+
+ 2fooBAR
+
+
+
+ ABC-12345
+
+