diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb index 1880bd091..11537d3bc 100644 --- a/app/models/nameserver.rb +++ b/app/models/nameserver.rb @@ -5,7 +5,8 @@ class Nameserver < ActiveRecord::Base belongs_to :domain, required: true # rubocop: disable Metrics/LineLength - validates :hostname, presence: true, format: { with: /\A(([a-zA-Z0-9]|[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9][a-zA-ZäöüõšžÄÖÜÕŠŽ0-9\-]*[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ } + validates :hostname, presence: true#, format: { with: /\A(([a-zA-Z0-9]|[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9][a-zA-ZäöüõšžÄÖÜÕŠŽ0-9\-]*[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ } + validates :hostname, format: { with: /\A(([a-zA-Z0-9]|[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9][a-zA-ZäöüõšžÄÖÜÕŠŽ0-9\-]*[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ }, allow_blank: true validate :val_ipv4 validate :val_ipv6 validate :require_ip, if: :glue_record_required? diff --git a/test/fixtures/nameservers.yml b/test/fixtures/nameservers.yml index a03dc8cc9..8c3c021d6 100644 --- a/test/fixtures/nameservers.yml +++ b/test/fixtures/nameservers.yml @@ -1,4 +1,4 @@ -ns1: +shop_ns1: hostname: ns1.bestnames.test ipv4: - 192.0.2.1 @@ -6,7 +6,7 @@ ns1: - 2001:db8::1 domain: shop -ns2: +shop_ns2: hostname: ns2.bestnames.test ipv4: - 192.0.2.2 diff --git a/test/integration/api/nameservers/put_test.rb b/test/integration/api/nameservers/put_test.rb index 034c885b7..416510541 100644 --- a/test/integration/api/nameservers/put_test.rb +++ b/test/integration/api/nameservers/put_test.rb @@ -1,24 +1,14 @@ require 'test_helper' class APINameserversPutTest < ActionDispatch::IntegrationTest - def setup - @registrar = registrars(:bestnames) - end - - def test_deletes_old_nameservers - previous_nameserver_ids = @registrar.nameservers.where(hostname: 'ns1.bestnames.test').ids - request_params = { format: :json, data: { type: 'nameserver', id: 'ns1.bestnames.test', - attributes: { hostname: 'ns55.bestnames.test' } } } - - put '/repp/v1/registrar/nameservers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key } - refute @registrar.nameservers(true).where(id: previous_nameserver_ids).exists? - end - - def test_creates_new_nameservers + def test_replaces_registrar_nameservers + old_nameserver_ids = [nameservers(:shop_ns1).id, + nameservers(:airport_ns1).id, + nameservers(:metro_ns1).id] request_params = { format: :json, data: { type: 'nameserver', id: 'ns1.bestnames.test', attributes: { hostname: 'ns55.bestnames.test' } } } put '/repp/v1/registrar/nameservers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key } - assert_equal 2, @registrar.nameservers.where(hostname: 'ns55.bestnames.test').size + assert_empty (old_nameserver_ids & registrars(:bestnames).nameservers(true).ids) end def test_saves_all_attributes @@ -33,14 +23,22 @@ class APINameserversPutTest < ActionDispatch::IntegrationTest assert_equal ['2001:DB8::55'], new_nameserver.ipv6 end + def test_keeps_other_nameserver_intact + request_params = { format: :json, data: { type: 'nameserver', id: 'ns1.bestnames.test', + attributes: { hostname: 'ns55.bestnames.test' } } } + + other_nameserver_hash = nameservers(:shop_ns2).attributes + put '/repp/v1/registrar/nameservers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key } + assert_equal other_nameserver_hash, nameservers(:shop_ns2).reload.attributes + end + def test_keeps_other_registrar_nameservers_intact request_params = { format: :json, data: { type: 'nameserver', id: 'ns1.bestnames.test', attributes: { hostname: 'ns55.bestnames.test' } } } - other_registrar_nameserver_ids = registrars(:goodnames).nameservers.ids - assert other_registrar_nameserver_ids.any? + nameserver_hash = nameservers(:metro_ns1).attributes put '/repp/v1/registrar/nameservers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key } - assert_equal other_registrar_nameserver_ids, registrars(:goodnames).nameservers(true).ids + assert_equal nameserver_hash, nameservers(:metro_ns1).reload.attributes end def test_returns_new_nameserver_record diff --git a/test/models/nameserver/glue_record_test.rb b/test/models/nameserver/glue_record_test.rb index 4a7f55b0c..7d5e39d8d 100644 --- a/test/models/nameserver/glue_record_test.rb +++ b/test/models/nameserver/glue_record_test.rb @@ -2,7 +2,7 @@ require 'test_helper' class NameserverGlueRecordTest < ActiveSupport::TestCase def setup - @nameserver = nameservers(:ns1) + @nameserver = nameservers(:shop_ns1) end def test_invalid_without_ip_if_glue_record_is_required diff --git a/test/models/nameserver_test.rb b/test/models/nameserver_test.rb index 377ff446a..45c1d0fb2 100644 --- a/test/models/nameserver_test.rb +++ b/test/models/nameserver_test.rb @@ -2,7 +2,7 @@ require 'test_helper' class NameserverTest < ActiveSupport::TestCase def setup - @nameserver = nameservers(:ns1) + @nameserver = nameservers(:shop_ns1) end def test_valid @@ -19,8 +19,22 @@ class NameserverTest < ActiveSupport::TestCase assert @nameserver.invalid? end + def test_hostname_format_validation + @nameserver.hostname = 'foo_bar' + assert @nameserver.invalid? + + @nameserver.hostname = 'foo.bar' + assert @nameserver.valid? + + @nameserver.hostname = 'äöüõšž.ÄÖÜÕŠŽ.umlauts' + assert @nameserver.valid? + end + def test_hostnames - assert_equal %w[ns1.bestnames.test ns2.bestnames.test], Nameserver.hostnames + assert_equal %w[ns1.bestnames.test + ns2.bestnames.test + ns1.bestnames.test + ns1.bestnames.test], Nameserver.hostnames end def test_normalizes_hostname