diff --git a/Gemfile b/Gemfile index 59882bed6..836fce72f 100644 --- a/Gemfile +++ b/Gemfile @@ -93,6 +93,7 @@ gem 'airbrake' gem 'company_register', github: 'internetee/company_register', branch: :master gem 'e_invoice', github: 'internetee/e_invoice', branch: :master gem 'lhv', github: 'internetee/lhv', tag: 'v0.1.0' +gem 'domain_name' group :development do # deploy diff --git a/Gemfile.lock b/Gemfile.lock index 45ceca8ab..e5caa4dfc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -475,6 +475,7 @@ DEPENDENCIES database_cleaner devise (~> 4.0) digidoc_client! + domain_name e_invoice! epp (= 1.5.0)! epp-xml (= 1.1.0)! diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb index d9fdde406..4a0361397 100644 --- a/app/models/nameserver.rb +++ b/app/models/nameserver.rb @@ -81,7 +81,7 @@ class Nameserver < ActiveRecord::Base def glue_record_required? return unless hostname? && domain - hostname.end_with?(domain.name) + DomainName(hostname).domain == domain.name end def normalize_attributes diff --git a/test/integration/epp/domain/create/nameservers_test.rb b/test/integration/epp/domain/create/nameservers_test.rb deleted file mode 100644 index 205bc7a86..000000000 --- a/test/integration/epp/domain/create/nameservers_test.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'test_helper' - -class EppDomainCreateNameserversTest < EppTestCase - # Glue record requirement - def test_nameserver_ip_address_is_required_if_hostname_is_under_the_same_domain - request_xml = <<-XML - - - - - - new.test - - - ns1.new.test - - - john-001 - - - - - test - - - - - XML - - assert_no_difference 'Domain.count' do - post '/epp/command/create', { frame: request_xml }, { 'HTTP_COOKIE' => 'session=api_bestnames' } - end - assert_epp_response :required_parameter_missing - end -end diff --git a/test/models/nameserver/glue_record_test.rb b/test/models/nameserver/glue_record_test.rb index 599f04ec6..cec33ebf6 100644 --- a/test/models/nameserver/glue_record_test.rb +++ b/test/models/nameserver/glue_record_test.rb @@ -5,23 +5,42 @@ class NameserverGlueRecordTest < ActiveSupport::TestCase @nameserver = nameservers(:shop_ns1) end - def test_invalid_without_ip_if_glue_record_is_required - @nameserver.hostname = 'ns1.shop.test' - @nameserver.ipv4 = @nameserver.ipv6 = '' - assert @nameserver.invalid? - assert_includes @nameserver.errors.full_messages, 'Either IPv4 or IPv6 is required' \ + def test_invalid_when_glue_record_is_required_and_no_ip_is_provided + domain = Domain.new(name: 'shop.test') + nameserver = Nameserver.new(domain: domain, hostname: 'ns1.shop.test') + + assert nameserver.invalid? + assert_includes nameserver.errors.full_messages, 'Either IPv4 or IPv6 is required' \ ' for glue record generation' end - def test_valid_with_ip_if_glue_record_is_required - @nameserver.hostname = 'ns1.shop.test' - @nameserver.ipv4 = ['192.0.2.1'] - @nameserver.ipv6 = '' - assert @nameserver.valid? + def test_valid_when_glue_record_is_required_and_ipv4_is_provided + domain = Domain.new(name: 'shop.test') + nameserver = Nameserver.new(domain: domain, hostname: 'ns1.shop.test') + nameserver.ipv4 = ['192.0.2.1'] + + assert nameserver.valid? end - def test_valid_without_ip_if_glue_record_is_not_required - @nameserver.ipv4 = @nameserver.ipv6 = '' - assert @nameserver.valid? + def test_valid_when_glue_record_is_required_and_ipv6_is_provided + domain = Domain.new(name: 'shop.test') + nameserver = Nameserver.new(domain: domain, hostname: 'ns1.shop.test') + nameserver.ipv6 = ['2001:db8::1'] + + assert nameserver.valid? + end + + def test_valid_when_glue_record_is_not_required_and_no_ip_is_provided + domain = Domain.new(name: 'shop.test') + nameserver = Nameserver.new(domain: domain, hostname: 'ns1.registrar.test') + + assert nameserver.valid? + end + + def test_valid_when_glue_record_is_not_required_and_no_ip_is_provided_substring_match + domain = Domain.new(name: 'le.test') + nameserver = Nameserver.new(domain: domain, hostname: 'ns1.shop.test') + + assert nameserver.valid? end end