diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index a2a5dd1dc6..33062cc3df 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -492,28 +492,20 @@ def update(frame, current_user, verify = true)
at[:statuses] =
statuses - domain_statuses_attrs(frame.css('rem'), 'rem') + domain_statuses_attrs(frame.css('add'), 'add')
- # at[:statuses] += at_add[:domain_statuses_attributes]
-
if errors.empty? && verify
self.upid = current_user.registrar.id if current_user.registrar
self.up_date = Time.zone.now
end
- if registrant_id && registrant.code == frame.css('registrant')
-
- throw :epp_error, {
- code: '2305',
- msg: I18n.t(:contact_already_associated_with_the_domain)
- }
+ same_registrant_as_current = (registrant.code == frame.css('registrant').text)
- end
-
- if errors.empty? && verify &&
+ if !same_registrant_as_current && errors.empty? && verify &&
Setting.request_confrimation_on_registrant_change_enabled &&
frame.css('registrant').present? &&
frame.css('registrant').attr('verified').to_s.downcase != 'yes'
registrant_verification_asked!(frame.to_s, current_user.id)
end
+
self.deliver_emails = true # turn on email delivery for epp
errors.empty? && super(at)
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 0927446d09..99b297c5e2 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -922,7 +922,6 @@ en:
previous: 'Previous'
personal_domain_verification_url: 'Personal domain verification url'
available_verification_url_not_found: 'Available verification url not found, for domain.'
- contact_already_associated_with_the_domain: 'Object association prohibits operation, contact already associated with the domain'
add_reserved_domain: 'Add domain to reserved list'
add_blocked_domain: 'Add domain to blocked list'
edit_pw: 'Edit Pw'
diff --git a/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb b/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb
new file mode 100644
index 0000000000..d929423aa2
--- /dev/null
+++ b/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb
@@ -0,0 +1,212 @@
+require 'rails_helper'
+
+RSpec.describe 'EPP domain:update' do
+ let(:request) { post '/epp/command/update', frame: request_xml }
+ let!(:domain) { create(:domain, name: 'test.com', registrant: registrant) }
+
+ before :example do
+ sign_in_to_epp_area
+ end
+
+ context 'when registrant change confirmation is enabled' do
+ before :example do
+ Setting.request_confrimation_on_registrant_change_enabled = true
+ end
+
+ context 'when given registrant is the same as current one' do
+ let!(:registrant) { create(:registrant, code: 'TEST') }
+ let(:request_xml) { <<-XML
+
+
+
+
+
+ test.com
+
+ TEST
+
+
+
+
+
+ #{valid_legal_document}
+
+
+
+
+ XML
+ }
+
+ specify do
+ request
+ expect(response).to have_code_of(1000)
+ end
+
+ it 'keeps same registrant' do
+ expect { request; domain.reload }.to_not change { domain.registrant_code }
+ end
+
+ it 'does not ask for confirmation' do
+ request
+ domain.reload
+ expect(domain.registrant_verification_asked?).to be false
+ end
+
+ it 'does not send confirmation and notice emails' do
+ expect { request }.to_not change { ActionMailer::Base.deliveries.count }
+ end
+ end
+
+ context 'when given registrant is different than current one' do
+ let!(:registrant) { create(:registrant, code: 'OLD-CODE') }
+ let!(:new_registrant) { create(:registrant, code: 'NEW-CODE') }
+ let(:request_xml) { <<-XML
+
+
+
+
+
+ test.com
+
+ NEW-CODE
+
+
+
+
+
+ #{valid_legal_document}
+
+
+
+
+ XML
+ }
+
+ specify do
+ request
+ expect(response).to have_code_of(1001)
+ end
+
+ it 'does not change registrant without confirmation' do
+ expect { request; domain.reload }.to_not change { domain.registrant_code }
+ end
+
+ it 'asks for confirmation' do
+ request
+ domain.reload
+ expect(domain.registrant_verification_asked?).to be true
+ end
+
+ it 'sets PENDING_UPDATE status' do
+ request
+ domain.reload
+ expect(domain.statuses).to include(DomainStatus::PENDING_UPDATE)
+ end
+
+ it 'sends confirmation and notice emails' do
+ expect { request }.to change { ActionMailer::Base.deliveries.count }.by(2)
+ end
+ end
+ end
+
+ context 'when registrant change confirmation is disabled' do
+ before :example do
+ Setting.request_confrimation_on_registrant_change_enabled = false
+ end
+
+ context 'when given registrant is the same as current one' do
+ let!(:registrant) { create(:registrant, code: 'TEST') }
+ let(:request_xml) { <<-XML
+
+
+
+
+
+ test.com
+
+ TEST
+
+
+
+
+
+ #{valid_legal_document}
+
+
+
+
+ XML
+ }
+
+ specify do
+ request
+ expect(response).to have_code_of(1000)
+ end
+
+ it 'keeps same registrant' do
+ expect { request; domain.reload }.to_not change { domain.registrant_code }
+ end
+
+ it 'does not ask for confirmation' do
+ request
+ domain.reload
+ expect(domain.registrant_verification_asked?).to be false
+ end
+
+ it 'does not send confirmation and notice emails' do
+ expect { request }.to_not change { ActionMailer::Base.deliveries.count }
+ end
+ end
+
+ context 'when given registrant is different than current one' do
+ let!(:registrant) { create(:registrant, code: 'OLD-CODE') }
+ let!(:new_registrant) { create(:registrant, code: 'NEW-CODE') }
+ let(:request_xml) { <<-XML
+
+
+
+
+
+ test.com
+
+ NEW-CODE
+
+
+
+
+
+ #{valid_legal_document}
+
+
+
+
+ XML
+ }
+
+ specify do
+ request
+ expect(response).to have_code_of(1000)
+ end
+
+ it 'changes registrant without confirmation' do
+ expect { request; domain.reload }.to change { domain.registrant_code }.from('OLD-CODE').to('NEW-CODE')
+ end
+
+ it 'does not ask for confirmation' do
+ request
+ domain.reload
+ expect(domain.registrant_verification_asked?).to be false
+ end
+
+ it 'does not set PENDING_UPDATE status' do
+ request
+ domain.reload
+ expect(domain.statuses).to_not include(DomainStatus::PENDING_UPDATE)
+ end
+
+ it 'does not send confirmation and notice emails' do
+ expect { request }.to_not change { ActionMailer::Base.deliveries.count }
+ end
+ end
+ end
+end