mirror of
https://github.com/internetee/registry.git
synced 2025-07-27 21:16:12 +02:00
- Add new setting for allowed admin contact ident types - Add validation for admin contact ident types on domain create/update - Add UI controls for managing allowed ident types - Add tests for new validation rules - Update domain model to respect new settings The changes allow configuring which identification types (private person, organization, birthday) are allowed for administrative contacts. This is enforced when creating new domains or adding new admin contacts.
672 lines
21 KiB
Ruby
672 lines
21 KiB
Ruby
require 'test_helper'
|
|
|
|
class DomainTest < ActiveSupport::TestCase
|
|
setup do
|
|
@domain = domains(:shop)
|
|
|
|
@original_nameserver_required = Setting.nameserver_required
|
|
@original_min_admin_contact_count = Setting.admin_contacts_min_count
|
|
@original_max_admin_contact_count = Setting.admin_contacts_max_count
|
|
@original_min_tech_contact_count = Setting.tech_contacts_min_count
|
|
@original_max_tech_contact_count = Setting.tech_contacts_max_count
|
|
@original_admin_contacts_required_for_org = Setting.admin_contacts_required_for_org
|
|
@original_admin_contacts_required_for_minors = Setting.admin_contacts_required_for_minors
|
|
@original_admin_contacts_allowed_ident_type = Setting.admin_contacts_allowed_ident_type
|
|
end
|
|
|
|
teardown do
|
|
Setting.nameserver_required = @original_nameserver_required
|
|
Setting.admin_contacts_min_count = @original_min_admin_contact_count
|
|
Setting.admin_contacts_max_count = @original_max_admin_contact_count
|
|
Setting.tech_contacts_min_count = @original_min_tech_contact_count
|
|
Setting.tech_contacts_max_count = @original_max_tech_contact_count
|
|
Setting.admin_contacts_required_for_org = @original_admin_contacts_required_for_org
|
|
Setting.admin_contacts_required_for_minors = @original_admin_contacts_required_for_minors
|
|
Setting.admin_contacts_allowed_ident_type = @original_admin_contacts_allowed_ident_type
|
|
end
|
|
|
|
def test_valid_domain_is_valid
|
|
assert valid_domain.valid?, proc { valid_domain.errors.full_messages }
|
|
end
|
|
|
|
def test_invalid_fixture_is_invalid
|
|
assert domains(:invalid).invalid?
|
|
end
|
|
|
|
def test_valid_domain_statuses_history
|
|
@domain.force_delete_domain_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED,
|
|
DomainStatus::SERVER_TRANSFER_PROHIBITED]
|
|
@domain.admin_store_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED]
|
|
assert @domain.valid?
|
|
|
|
assert @domain.json_statuses_history['force_delete_domain_statuses_history'].include? 'serverUpdateProhibited'
|
|
assert @domain.json_statuses_history['force_delete_domain_statuses_history'].include? 'serverTransferProhibited'
|
|
assert_equal @domain.json_statuses_history['admin_store_statuses_history'], ['serverUpdateProhibited']
|
|
end
|
|
|
|
# https://www.internet.ee/domeenid/ee-domeenireeglid#domeeninimede-registreerimine
|
|
def test_validates_name_format
|
|
assert_equal dns_zones(:one).origin, 'test'
|
|
domain = valid_domain
|
|
subdomain_min_length = 1
|
|
subdomain_max_length = 63
|
|
|
|
domain.name = '!invalid'
|
|
assert domain.invalid?
|
|
|
|
domain.name = 'aa--a.test'
|
|
assert domain.invalid?
|
|
|
|
domain.name = '-example.test'
|
|
assert domain.invalid?
|
|
|
|
domain.name = 'example-.test'
|
|
assert domain.invalid?
|
|
|
|
domain.name = "#{'a' * subdomain_max_length.next}.test"
|
|
assert domain.invalid?
|
|
|
|
domain.name = 'рф.test'
|
|
assert domain.invalid?
|
|
|
|
domain.name = "#{'a' * subdomain_min_length}.test"
|
|
assert domain.valid?
|
|
|
|
domain.name = "#{'a' * subdomain_max_length}.test"
|
|
assert domain.valid?
|
|
|
|
domain.name = 'example-1-2.test'
|
|
assert domain.valid?
|
|
|
|
domain.name = 'EXAMPLE.test'
|
|
assert domain.valid?
|
|
|
|
domain.name = 'äõöüšž.test'
|
|
assert domain.valid?
|
|
|
|
domain.name = 'xn--mnchen-3ya.test'
|
|
assert domain.valid?
|
|
|
|
domain.name = '####'
|
|
assert domain.invalid?
|
|
|
|
domain.name = 'https://example.test'
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_invalid_when_name_is_already_taken
|
|
Setting.admin_contacts_min_count = Setting.tech_contacts_min_count = 0
|
|
another_domain = valid_domain
|
|
domain = another_domain.dup
|
|
|
|
domain.name = another_domain.name
|
|
assert domain.invalid?
|
|
|
|
domain.name = "new.#{dns_zones(:one).origin}"
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
end
|
|
|
|
def test_invalid_when_name_is_zone
|
|
name = dns_zones(:one).origin
|
|
domain = valid_domain
|
|
|
|
domain.name = name
|
|
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages, 'Data management policy violation:' \
|
|
' Domain name is blocked [name]'
|
|
end
|
|
|
|
def test_invalid_without_transfer_code
|
|
domain = valid_domain
|
|
domain.transfer_code = ''
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_invalid_when_domain_is_reserved
|
|
reserved_domain = reserved_domains(:one)
|
|
domain = valid_domain.dup
|
|
domain.name = reserved_domain.name
|
|
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages, 'Required parameter missing; reserved>' \
|
|
'pw element required for reserved domains'
|
|
end
|
|
|
|
def test_invalid_without_registration_period
|
|
domain = valid_domain
|
|
domain.period = ''
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_validates_registration_period_format
|
|
domain = valid_domain
|
|
|
|
domain.period = 'invalid'
|
|
assert domain.invalid?
|
|
|
|
domain.period = 1.1
|
|
assert domain.invalid?
|
|
|
|
domain.period = 1
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_invalid_when_the_same_admin_contact_is_linked_twice
|
|
domain = valid_domain
|
|
contact = contacts(:john)
|
|
|
|
domain.admin_contacts << contact
|
|
assert_raise ActiveRecord::RecordNotUnique do
|
|
domain.admin_contacts << contact
|
|
end
|
|
end
|
|
|
|
def test_invalid_when_the_same_tech_contact_is_linked_twice
|
|
domain = valid_domain
|
|
contact = contacts(:john)
|
|
|
|
domain.tech_contacts << contact
|
|
assert_raise ActiveRecord::RecordNotUnique do
|
|
domain.tech_contacts << contact
|
|
end
|
|
end
|
|
|
|
def test_validates_name_server_count_when_name_servers_are_required
|
|
nameserver_attributes = nameservers(:shop_ns1).dup.attributes
|
|
domain = valid_domain
|
|
Setting.nameserver_required = true
|
|
min_count = 1
|
|
max_count = 2
|
|
Setting.ns_min_count = min_count
|
|
Setting.ns_max_count = max_count
|
|
|
|
domain.nameservers.clear
|
|
min_count.times { domain.nameservers.build(nameserver_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.nameservers.clear
|
|
max_count.times do |i|
|
|
domain.nameservers.build(nameserver_attributes.merge(hostname: "ns#{i}.test"))
|
|
end
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.nameservers.clear
|
|
assert domain.invalid?
|
|
|
|
domain.nameservers.clear
|
|
max_count.next.times do |i|
|
|
domain.nameservers.build(nameserver_attributes.merge(hostname: "ns#{i}.test"))
|
|
end
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_valid_without_name_servers_when_they_are_optional
|
|
domain = valid_domain
|
|
domain.nameservers.clear
|
|
Setting.nameserver_required = false
|
|
Setting.ns_min_count = 1
|
|
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_count
|
|
domain_contact_attributes = domain_contacts(:shop_jane).dup.attributes
|
|
domain = valid_domain
|
|
min_count = 1
|
|
max_count = 2
|
|
Setting.admin_contacts_min_count = min_count
|
|
Setting.admin_contacts_max_count = max_count
|
|
|
|
domain.admin_domain_contacts.clear
|
|
min_count.times { domain.admin_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.admin_domain_contacts.clear
|
|
max_count.times { domain.admin_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.admin_domain_contacts.clear
|
|
|
|
domain.registrant.update!(ident_type: 'org')
|
|
domain.reload
|
|
assert domain.registrant.org?
|
|
assert domain.invalid?
|
|
|
|
domain.admin_domain_contacts.clear
|
|
max_count.next.times { domain.admin_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_validates_tech_contact_count
|
|
domain_contact_attributes = domain_contacts(:shop_william).dup.attributes
|
|
domain = valid_domain
|
|
max_count = 2
|
|
Setting.tech_contacts_max_count = max_count
|
|
|
|
domain.registrant.update!(ident_type: 'org')
|
|
domain.reload
|
|
assert domain.registrant.org?
|
|
|
|
domain.tech_domain_contacts.clear
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.tech_domain_contacts.clear
|
|
max_count.times { domain.tech_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.tech_domain_contacts.clear
|
|
max_count.next.times { domain.tech_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_outzone_candidates_scope_returns_records_with_outzone_at_in_the_past
|
|
travel_to Time.zone.parse('2010-07-05 08:00:00')
|
|
domain1 = domains(:shop)
|
|
domain1.update!(outzone_at: Time.zone.parse('2010-07-05 07:59:59'))
|
|
domain2 = domains(:airport)
|
|
domain2.update!(outzone_at: Time.zone.parse('2010-07-05 08:00:00'))
|
|
domain3 = domains(:library)
|
|
domain3.update!(outzone_at: Time.zone.parse('2010-07-05 08:00:01'))
|
|
Domain.connection.disable_referential_integrity do
|
|
Domain.where("id NOT IN (#{[domain1.id, domain2.id, domain3.id].join(',')})").delete_all
|
|
end
|
|
|
|
assert_equal [domain1.id], Domain.outzone_candidates.ids
|
|
end
|
|
|
|
def test_expired_scope_returns_records_with_valid_to_in_the_past
|
|
travel_to Time.zone.parse('2010-07-05 08:00:00')
|
|
domain1 = domains(:shop)
|
|
domain1.update!(valid_to: Time.zone.parse('2010-07-05 07:59:59'))
|
|
domain2 = domains(:airport)
|
|
domain2.update!(valid_to: Time.zone.parse('2010-07-05 08:00:00'))
|
|
domain3 = domains(:library)
|
|
domain3.update!(valid_to: Time.zone.parse('2010-07-05 08:00:01'))
|
|
Domain.connection.disable_referential_integrity do
|
|
Domain.where("id NOT IN (#{[domain1.id, domain2.id, domain3.id].join(',')})").delete_all
|
|
end
|
|
|
|
assert_equal [domain1.id, domain2.id].sort, Domain.expired.ids.sort
|
|
end
|
|
|
|
def test_domain_name
|
|
domain = Domain.new(name: 'shop.test')
|
|
assert_equal 'shop.test', domain.domain_name.to_s
|
|
end
|
|
|
|
def test_nil_name_doesnt_throw_error
|
|
domain = Domain.new(name: 'shop.test')
|
|
assert_nothing_raised do
|
|
domain.name = nil
|
|
end
|
|
end
|
|
|
|
def test_returns_registrant_user_domains_by_registrant
|
|
registrant = contacts(:john).becomes(Registrant)
|
|
assert_equal registrant, @domain.registrant
|
|
registrant_user = RegistrantUser.new(registrant_ident: 'US-12345')
|
|
|
|
registrant_user.stub(:contacts, [registrant]) do
|
|
assert_includes Domain.registrant_user_domains(registrant_user), @domain
|
|
end
|
|
end
|
|
|
|
def test_returns_registrant_user_domains_by_contact
|
|
contact = contacts(:jane)
|
|
assert_not_equal contact.becomes(Registrant), @domain.registrant
|
|
assert_includes @domain.contacts, contact
|
|
registrant_user = RegistrantUser.new(registrant_ident: 'US-12345')
|
|
|
|
registrant_user.stub(:contacts, [contact]) do
|
|
assert_includes Domain.registrant_user_domains(registrant_user), @domain
|
|
end
|
|
end
|
|
|
|
def test_returns_registrant_user_administered_domains_by_registrant
|
|
registrant = contacts(:john).becomes(Registrant)
|
|
assert_equal registrant, @domain.registrant
|
|
registrant_user = RegistrantUser.new
|
|
|
|
registrant_user.stub(:contacts, [registrant]) do
|
|
assert_includes Domain.registrant_user_administered_domains(registrant_user), @domain
|
|
end
|
|
end
|
|
|
|
def test_returns_registrant_user_administered_domains_by_administrative_contact
|
|
contact = contacts(:jane)
|
|
assert_not_equal contact.becomes(Registrant), @domain.registrant
|
|
assert_includes @domain.admin_contacts, contact
|
|
registrant_user = RegistrantUser.new
|
|
|
|
registrant_user.stub(:contacts, [contact]) do
|
|
assert_includes Domain.registrant_user_administered_domains(registrant_user), @domain
|
|
end
|
|
end
|
|
|
|
def test_does_not_return_registrant_user_administered_domains_by_technical_contact
|
|
contact = contacts(:william)
|
|
assert_not_equal contact.becomes(Registrant), @domain.registrant
|
|
assert_includes @domain.tech_contacts, contact
|
|
registrant_user = RegistrantUser.new
|
|
|
|
registrant_user.stub(:contacts, [contact]) do
|
|
assert_not_includes Domain.registrant_user_administered_domains(registrant_user), @domain
|
|
end
|
|
end
|
|
|
|
def test_returns_primary_contact_emails
|
|
assert_equal 'john@inbox.test', @domain.registrant.email
|
|
assert_equal 'john@inbox.test', contacts(:john).email
|
|
assert_equal 'william@inbox.test', contacts(:william).email
|
|
@domain.admin_contacts = [contacts(:john), contacts(:william)]
|
|
|
|
assert_equal %w[john@inbox.test william@inbox.test].sort, @domain.primary_contact_emails.sort
|
|
end
|
|
|
|
def test_normalizes_name
|
|
unnormalized_name = ' Foo.test '
|
|
domain = Domain.new(name: unnormalized_name)
|
|
|
|
assert_equal 'foo.test', domain.name
|
|
assert_equal 'foo.test', domain.name_puny
|
|
assert_equal unnormalized_name, domain.name_dirty
|
|
end
|
|
|
|
def test_converts_name_to_punycode
|
|
domain = Domain.new(name: 'münchen.test')
|
|
assert_equal 'xn--mnchen-3ya.test', domain.name_puny
|
|
end
|
|
|
|
def test_returns_new_registrant_id
|
|
id = 1
|
|
domain = Domain.new(pending_json: { new_registrant_id: id })
|
|
|
|
assert_equal id, domain.new_registrant_id
|
|
end
|
|
|
|
def test_returns_new_registrant_email
|
|
email = 'john@inbox.test'
|
|
domain = Domain.new(pending_json: { new_registrant_email: email })
|
|
|
|
assert_equal email, domain.new_registrant_email
|
|
end
|
|
|
|
def test_expiration
|
|
now = Time.zone.parse('2010-07-05 08:00:00')
|
|
travel_to now
|
|
domain = Domain.new
|
|
|
|
domain.valid_to = now + 1.second
|
|
assert domain.registered?
|
|
assert_not domain.expired?
|
|
|
|
domain.valid_to = now
|
|
assert domain.expired?
|
|
assert_not domain.registered?
|
|
|
|
domain.valid_to = now - 1.second
|
|
assert domain.expired?
|
|
assert_not domain.registered?
|
|
end
|
|
|
|
def test_activation
|
|
domain = inactive_domain
|
|
|
|
assert domain.inactive?
|
|
assert_not domain.active?
|
|
|
|
domain.activate
|
|
|
|
assert domain.active?
|
|
assert_not domain.inactive?
|
|
end
|
|
|
|
def test_deactivation
|
|
domain = @domain
|
|
|
|
assert domain.active?
|
|
assert_not domain.inactive?
|
|
|
|
domain.deactivate
|
|
|
|
assert domain.inactive?
|
|
assert_not domain.active?
|
|
end
|
|
|
|
def test_registrant_change_removes_force_delete
|
|
@domain.update_columns(valid_to: Time.zone.parse('2010-10-05'),
|
|
force_delete_date: nil)
|
|
@domain.update(template_name: 'legal_person')
|
|
travel_to Time.zone.parse('2010-07-05')
|
|
Domains::ForceDelete::SetForceDelete.run!(domain: @domain, type: :fast_track)
|
|
assert(@domain.force_delete_scheduled?)
|
|
other_registrant = Registrant.find_by(code: 'jane-001')
|
|
@domain.pending_json['new_registrant_id'] = other_registrant.id
|
|
|
|
@domain.registrant = other_registrant
|
|
@domain.save!
|
|
|
|
assert_not(@domain.force_delete_scheduled?)
|
|
end
|
|
|
|
def test_aliases_registered_at_to_created_at
|
|
created_at = Time.zone.parse('2010-07-05 10:00')
|
|
domain = Domain.new(created_at: created_at)
|
|
assert_equal created_at, domain.registered_at
|
|
end
|
|
|
|
def test_not_renewable_if_renew_prohibited
|
|
assert @domain.renewable?
|
|
|
|
@domain.statuses << DomainStatus::SERVER_RENEW_PROHIBITED
|
|
assert_not @domain.renewable?
|
|
|
|
@domain.statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED)
|
|
assert @domain.renewable?
|
|
|
|
@domain.statuses << DomainStatus::CLIENT_RENEW_PROHIBITED
|
|
assert_not @domain.renewable?
|
|
end
|
|
|
|
def test_renewable_if_pending_delete
|
|
assert @domain.renewable?
|
|
@domain.statuses << DomainStatus::PENDING_DELETE
|
|
|
|
assert @domain.renewable?
|
|
end
|
|
|
|
def test_not_renewable_if_pending_delete_unconfirmed
|
|
assert @domain.renewable?
|
|
@domain.statuses << DomainStatus::PENDING_DELETE_CONFIRMATION
|
|
|
|
assert_not @domain.renewable?
|
|
end
|
|
|
|
def test_validates_admin_contact_count_for_private_registrant
|
|
domain_contact_attributes = domain_contacts(:shop_jane).dup.attributes
|
|
domain = valid_domain
|
|
max_count = 2
|
|
Setting.admin_contacts_max_count = max_count
|
|
|
|
domain.registrant.update!(ident_type: 'priv')
|
|
domain.reload
|
|
assert_not domain.registrant.org?
|
|
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.admin_domain_contacts.clear
|
|
max_count.pred.times { domain.admin_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.admin_domain_contacts.clear
|
|
max_count.next.times { domain.admin_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_validates_tech_contact_count_for_private_registrant
|
|
domain_contact_attributes = domain_contacts(:shop_william).dup.attributes
|
|
domain = valid_domain
|
|
max_count = 2
|
|
Setting.tech_contacts_max_count = max_count
|
|
|
|
domain.registrant.update!(ident_type: 'priv')
|
|
domain.reload
|
|
assert_not domain.registrant.org?
|
|
|
|
domain.tech_domain_contacts.clear
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.tech_domain_contacts.clear
|
|
max_count.pred.times { domain.tech_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.valid?, proc { domain.errors.full_messages }
|
|
|
|
domain.tech_domain_contacts.clear
|
|
max_count.next.times { domain.tech_domain_contacts.build(domain_contact_attributes) }
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_validates_admin_contact_required_for_legal_entity_registrant
|
|
domain = valid_domain
|
|
registrant = domain.registrant
|
|
|
|
registrant.update!(ident_type: 'org')
|
|
domain.reload
|
|
assert registrant.org?
|
|
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages, 'Admin domain contacts Admin contacts count must be between 1-10'
|
|
|
|
domain.admin_domain_contacts.build(contact: contacts(:john))
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_requirements_by_registrant_type
|
|
domain = valid_domain
|
|
registrant = domain.registrant
|
|
|
|
registrant.update!(ident_type: 'org')
|
|
domain.reload
|
|
assert registrant.org?
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
|
|
registrant.update!(
|
|
ident_type: 'birthday',
|
|
ident: (Time.zone.now - 20.years).strftime('%Y-%m-%d')
|
|
)
|
|
domain.reload
|
|
assert registrant.priv?
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?
|
|
|
|
registrant.update!(
|
|
ident_type: 'birthday',
|
|
ident: (Time.zone.now - 16.years).strftime('%Y-%m-%d')
|
|
)
|
|
domain.reload
|
|
assert registrant.priv?
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
end
|
|
|
|
def test_validates_admin_contact_required_for_underage_estonian_id
|
|
domain = valid_domain
|
|
registrant = domain.registrant
|
|
|
|
registrant.update!(
|
|
ident_type: 'priv',
|
|
ident: '61203150222',
|
|
ident_country_code: 'EE'
|
|
)
|
|
domain.reload
|
|
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages, 'Admin domain contacts Admin contacts count must be between 1-10'
|
|
|
|
domain.admin_domain_contacts.build(contact: contacts(:john))
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_optional_for_adult_estonian_id
|
|
domain = valid_domain
|
|
registrant = domain.registrant
|
|
|
|
registrant.update!(
|
|
ident_type: 'priv',
|
|
ident: '38903111310',
|
|
ident_country_code: 'EE'
|
|
)
|
|
domain.reload
|
|
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_optional_for_non_estonian_private_id
|
|
domain = valid_domain
|
|
registrant = domain.registrant
|
|
|
|
registrant.update!(
|
|
ident_type: 'priv',
|
|
ident: '12345678',
|
|
ident_country_code: 'LV'
|
|
)
|
|
domain.reload
|
|
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_required_for_org_based_on_setting
|
|
domain = valid_domain
|
|
domain.registrant.update!(ident_type: 'org')
|
|
domain.reload
|
|
|
|
# When setting is true
|
|
Setting.admin_contacts_required_for_org = true
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages,
|
|
'Admin domain contacts Admin contacts count must be between 1-10'
|
|
|
|
# When setting is false
|
|
Setting.admin_contacts_required_for_org = false
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?
|
|
end
|
|
|
|
def test_validates_admin_contact_required_for_minors_based_on_setting
|
|
domain = valid_domain
|
|
domain.registrant.update!(ident_type: 'birthday', ident: '2010-07-05')
|
|
domain.reload
|
|
|
|
# When setting is true
|
|
Setting.admin_contacts_required_for_minors = true
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.invalid?
|
|
assert_includes domain.errors.full_messages,
|
|
'Admin domain contacts Admin contacts count must be between 1-10'
|
|
|
|
# When setting is false
|
|
Setting.admin_contacts_required_for_minors = false
|
|
domain.admin_domain_contacts.clear
|
|
assert domain.valid?
|
|
end
|
|
|
|
private
|
|
|
|
def valid_domain
|
|
domains(:shop)
|
|
end
|
|
|
|
def inactive_domain
|
|
Setting.nameserver_required = true
|
|
domain = @domain
|
|
domain.update!(statuses: [DomainStatus::INACTIVE])
|
|
domain
|
|
end
|
|
end
|