Merge pull request #2730 from internetee/2702-optional-admin-contact-for-private-registrations

Make admin contacts optional for private registrants
This commit is contained in:
Timo Võhmar 2025-01-28 10:15:33 +02:00 committed by GitHub
commit a9b341ebfe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 173 additions and 8 deletions

View file

@ -436,6 +436,9 @@ class EppDomainCreateBaseTest < EppTestCase
contact = contacts(:john)
registrant = contact.becomes(Registrant)
registrant.update!(ident_type: 'org')
registrant.reload
request_xml = <<-XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="#{Xsd::Schema.filename(for_prefix: 'epp-ee', for_version: '1.0')}">
@ -444,6 +447,7 @@ class EppDomainCreateBaseTest < EppTestCase
<domain:create xmlns:domain="#{Xsd::Schema.filename(for_prefix: 'domain-ee', for_version: '1.2')}">
<domain:name>#{name}</domain:name>
<domain:registrant>#{registrant.code}</domain:registrant>
<domain:contact type="admin">#{contact.code}</domain:contact>
</domain:create>
</create>
<extension>
@ -937,4 +941,54 @@ class EppDomainCreateBaseTest < EppTestCase
ENV["shunter_default_threshold"] = '10000'
ENV["shunter_enabled"] = 'false'
end
def test_registers_new_domain_with_private_registrant_without_admin_contacts
now = Time.zone.parse('2010-07-05')
travel_to now
name = "new.#{dns_zones(:one).origin}"
contact = contacts(:john)
registrant = contact.becomes(Registrant)
registrant.update!(ident_type: 'priv')
registrant.reload
assert_not registrant.org?
request_xml = <<-XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="#{Xsd::Schema.filename(for_prefix: 'epp-ee', for_version: '1.0')}">
<command>
<create>
<domain:create xmlns:domain="#{Xsd::Schema.filename(for_prefix: 'domain-ee', for_version: '1.2')}">
<domain:name>#{name}</domain:name>
<domain:registrant>#{registrant.code}</domain:registrant>
</domain:create>
</create>
<extension>
<eis:extdata xmlns:eis="#{Xsd::Schema.filename(for_prefix: 'eis', for_version: '1.0')}">
<eis:legalDocument type="pdf">#{'test' * 2000}</eis:legalDocument>
</eis:extdata>
</extension>
</command>
</epp>
XML
assert_difference 'Domain.count' do
post epp_create_path, params: { frame: request_xml },
headers: { 'HTTP_COOKIE' => 'session=api_bestnames' }
end
response_xml = Nokogiri::XML(response.body)
assert_correct_against_schema response_xml
assert_epp_response :completed_successfully
domain = Domain.find_by(name: name)
assert_equal name, domain.name
assert_equal registrant, domain.registrant
assert_empty domain.admin_contacts
assert_empty domain.tech_contacts
assert_not_empty domain.transfer_code
default_registration_period = 1.year + 1.day
assert_equal now + default_registration_period, domain.expire_time
end
end

View file

@ -108,9 +108,32 @@ class ReppV1DomainsContactsTest < ActionDispatch::IntegrationTest
refute @domain.tech_contacts.find_by(code: contact.code).present?
end
def test_can_remove_all_admin_contacts_for_private_registrant
Spy.on_instance_method(Actions::DomainUpdate, :validate_email).and_return(true)
@domain.registrant.update!(ident_type: 'priv')
@domain.reload
assert_not @domain.registrant.org?
contact = @domain.admin_contacts.last
payload = { contacts: [ { code: contact.code, type: 'admin' } ] }
delete "/repp/v1/domains/#{@domain.name}/contacts", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
@domain.reload
assert_response :ok
assert_equal 1000, json[:code]
assert_empty @domain.admin_contacts
end
def test_can_not_remove_one_and_only_contact
Spy.on_instance_method(Actions::DomainUpdate, :validate_email).and_return(true)
@domain.registrant.update!(ident_type: 'org')
@domain.reload
contact = @domain.admin_contacts.last
payload = { contacts: [ { code: contact.code, type: 'admin' } ] }