diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 3da9f1098..2e3d17a20 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -6,6 +6,8 @@ class ReservedDomain < ActiveRecord::Base
validates :name, domain_name: true, uniqueness: true
+ alias_attribute :registration_code, :password
+
class << self
def pw_for(domain_name)
name_in_ascii = SimpleIDN.to_ascii(domain_name)
diff --git a/test/integration/epp/domain/create/reserved_test.rb b/test/integration/epp/domain/create/reserved_test.rb
new file mode 100644
index 000000000..1a57cd220
--- /dev/null
+++ b/test/integration/epp/domain/create/reserved_test.rb
@@ -0,0 +1,142 @@
+require 'test_helper'
+
+class EppDomainCreateReservedTest < ApplicationIntegrationTest
+ setup do
+ @reserved_domain = reserved_domains(:one)
+ end
+
+ def test_registers_reserved_domain_with_correct_registration_code
+ assert_equal 'reserved.test', @reserved_domain.name
+ assert_equal 'reserved-001', @reserved_domain.registration_code
+
+ request_xml = <<-XML
+
+
+
+
+
+ reserved.test
+ john-001
+
+
+
+
+ #{'test' * 2000}
+
+ reserved-001
+
+
+
+
+
+ XML
+
+ assert_difference 'Domain.count' do
+ post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ end
+
+ response_xml = Nokogiri::XML(response.body)
+ assert_equal '1000', response_xml.at_css('result')[:code]
+ assert_equal 1, Nokogiri::XML(response.body).css('result').size
+ end
+
+ def test_registering_reserved_domain_regenerates_registration_code
+ assert_equal 'reserved.test', @reserved_domain.name
+ assert_equal 'reserved-001', @reserved_domain.registration_code
+
+ request_xml = <<-XML
+
+
+
+
+
+ reserved.test
+ john-001
+
+
+
+
+ #{'test' * 2000}
+
+ reserved-001
+
+
+
+
+
+ XML
+
+ post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ @reserved_domain.reload
+
+ assert_not_equal 'reserved-001', @reserved_domain.registration_code
+ end
+
+ def test_domain_cannot_be_registered_with_wrong_registration_code
+ assert_equal 'reserved.test', @reserved_domain.name
+ assert_equal 'reserved-001', @reserved_domain.registration_code
+
+ request_xml = <<-XML
+
+
+
+
+
+ reserved.test
+ john-001
+
+
+
+
+ #{'test' * 2000}
+
+ wrong
+
+
+
+
+
+ XML
+
+ assert_no_difference 'Domain.count' do
+ post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ end
+
+ response_xml = Nokogiri::XML(response.body)
+ assert_equal '2202', response_xml.at_css('result')[:code]
+ assert_equal 'Invalid authorization information; invalid reserved>pw value',
+ response_xml.at_css('result msg').text
+ end
+
+ def test_domain_cannot_be_registered_without_registration_code
+ assert_equal 'reserved.test', @reserved_domain.name
+
+ request_xml = <<-XML
+
+
+
+
+
+ reserved.test
+ john-001
+
+
+
+
+ #{'test' * 2000}
+
+
+
+
+ XML
+
+ assert_no_difference 'Domain.count' do
+ post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ end
+
+ response_xml = Nokogiri::XML(response.body)
+ assert_equal '2003', response_xml.at_css('result')[:code]
+ assert_equal 'Required parameter missing; reserved>pw element required for reserved domains',
+ response_xml.at_css('result msg').text
+ end
+end
diff --git a/test/models/reserved_domain_test.rb b/test/models/reserved_domain_test.rb
index 30736d06d..2515a1e5d 100644
--- a/test/models/reserved_domain_test.rb
+++ b/test/models/reserved_domain_test.rb
@@ -8,4 +8,9 @@ class ReservedDomainTest < ActiveSupport::TestCase
def test_fixture_is_valid
assert @reserved_domain.valid?
end
+
+ def test_aliases_registration_code_to_password
+ reserved_domain = ReservedDomain.new(password: 'reserved-001')
+ assert_equal 'reserved-001', reserved_domain.registration_code
+ end
end