diff --git a/app/models/concerns/contact/transferable.rb b/app/models/concerns/contact/transferable.rb index 2466e4726..407922f25 100644 --- a/app/models/concerns/contact/transferable.rb +++ b/app/models/concerns/contact/transferable.rb @@ -7,6 +7,8 @@ module Concerns::Contact::Transferable end def transfer(new_registrar) + return identical(new_registrar) if identical_with_registrar?(new_registrar) + new_contact = self.dup new_contact.registrar = new_registrar new_contact.original = self @@ -21,6 +23,13 @@ module Concerns::Contact::Transferable protected + def identical_with_registrar?(registrar) + return false unless identical(registrar) + return true unless DomainContact.where(contact_id: id).any? + + false + end + def generate_auth_info self.auth_info = SecureRandom.hex(11) end diff --git a/test/integration/api/domain_transfers_test.rb b/test/integration/api/domain_transfers_test.rb index aabaeb728..dac04bd2c 100644 --- a/test/integration/api/domain_transfers_test.rb +++ b/test/integration/api/domain_transfers_test.rb @@ -64,7 +64,7 @@ class APIDomainTransfersTest < ApplicationIntegrationTest end def test_duplicates_registrant_admin_and_tech_contacts - assert_difference -> { @new_registrar.contacts.size }, 3 do + assert_difference -> { @new_registrar.contacts.size }, 4 do post '/repp/v1/domain_transfers', params: request_params, as: :json, headers: { 'HTTP_AUTHORIZATION' => http_auth_key } end @@ -73,7 +73,7 @@ class APIDomainTransfersTest < ApplicationIntegrationTest def test_reuses_identical_contact post '/repp/v1/domain_transfers', params: request_params, as: :json, headers: { 'HTTP_AUTHORIZATION' => http_auth_key } - assert_equal 1, @new_registrar.contacts.where(name: 'William').size + assert_equal 2, @new_registrar.contacts.where(name: 'William').size end def test_fails_if_domain_does_not_exist diff --git a/test/integration/epp/domain/transfer/request_test.rb b/test/integration/epp/domain/transfer/request_test.rb index c7a838ca6..5b8dad6ad 100644 --- a/test/integration/epp/domain/transfer/request_test.rb +++ b/test/integration/epp/domain/transfer/request_test.rb @@ -59,7 +59,7 @@ class EppDomainTransferRequestTest < EppTestCase end def test_duplicates_registrant_admin_and_tech_contacts - assert_difference -> { @new_registrar.contacts.size }, 3 do + assert_difference -> { @new_registrar.contacts.size }, 4 do post epp_transfer_path, params: { frame: request_xml }, headers: { 'HTTP_COOKIE' => 'session=api_goodnames' } end @@ -68,7 +68,7 @@ class EppDomainTransferRequestTest < EppTestCase def test_reuses_identical_contact post epp_transfer_path, params: { frame: request_xml }, headers: { 'HTTP_COOKIE' => 'session=api_goodnames' } - assert_equal 1, @new_registrar.contacts.where(name: 'William').size + assert_equal 2, @new_registrar.contacts.where(name: 'William').size end def test_saves_legal_document diff --git a/test/models/contact/transfer_test.rb b/test/models/contact/transfer_test.rb index cc35cfdea..af51048aa 100644 --- a/test/models/contact/transfer_test.rb +++ b/test/models/contact/transfer_test.rb @@ -47,11 +47,6 @@ class ContactTransferTest < ActiveSupport::TestCase end end - def test_reuses_identical_contact - identical = contacts(:identical_to_william) - assert_equal identical, contacts(:william).transfer(@new_registrar) - end - def test_bypasses_validation @contact = contacts(:invalid)