From 0e120d499266468cea8f0a9f881166d31a3f7686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 30 Dec 2020 11:00:52 +0200 Subject: [PATCH] Process failed domains for bulk ns change --- .../registrar/nameservers_controller.rb | 4 ++++ .../v1/registrar/nameservers_controller.rb | 7 ++++--- app/models/registrar.rb | 18 ++++++++++++------ config/locales/registrar/nameservers.en.yml | 1 + .../bulk_change/nameserver_test.rb | 6 ++++-- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/controllers/registrar/nameservers_controller.rb b/app/controllers/registrar/nameservers_controller.rb index 2a22476be..1ab0e335f 100644 --- a/app/controllers/registrar/nameservers_controller.rb +++ b/app/controllers/registrar/nameservers_controller.rb @@ -51,6 +51,10 @@ class Registrar notices = [t('.replaced')] notices << "#{t('.affected_domains')}: " \ "#{parsed_response[:data][:affected_domains].join(', ')}" + if parsed_response[:data][:skipped_domains] + notices << "#{t('.skipped_domains')}: " \ + "#{parsed_response[:data][:skipped_domains].join(', ')}" + end flash[:notice] = notices.join(', ') redirect_to registrar_domains_url diff --git a/app/controllers/repp/v1/registrar/nameservers_controller.rb b/app/controllers/repp/v1/registrar/nameservers_controller.rb index 1df781ad7..a71f11759 100644 --- a/app/controllers/repp/v1/registrar/nameservers_controller.rb +++ b/app/controllers/repp/v1/registrar/nameservers_controller.rb @@ -5,12 +5,12 @@ module Repp before_action :verify_nameserver_existance, only: %i[update] def update - affected = current_user.registrar + affected, errored = current_user.registrar .replace_nameservers(hostname, hostname_params[:data][:attributes], domains: domains_from_params) - render_success(data: data_format_for_success(affected)) + render_success(data: data_format_for_success(affected, errored)) rescue ActiveRecord::RecordInvalid => e handle_errors(e.record) end @@ -23,12 +23,13 @@ module Repp params[:data][:domains].map(&:downcase) end - def data_format_for_success(affected_domains) + def data_format_for_success(affected_domains, errored_domains) { type: 'nameserver', id: params[:data][:attributes][:hostname], attributes: params[:data][:attributes], affected_domains: affected_domains, + skipped_domains: errored_domains, } end diff --git a/app/models/registrar.rb b/app/models/registrar.rb index c1168a887..e038cdb16 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -145,22 +145,28 @@ class Registrar < ApplicationRecord def replace_nameservers(hostname, new_attributes, domains: []) transaction do domain_list = [] + failed_list = [] - nameservers.where(hostname: hostname).find_each do |original_nameserver| - next unless domains.include?(original_nameserver.domain.name) || domains.empty? + nameservers.where(hostname: hostname).find_each do |origin| + next unless domains.include?(origin.domain.name) || domains.empty? + + if origin.domain.nameservers.where(hostname: new_attributes[:hostname]).any? + failed_list << origin.domain.name + next + end new_nameserver = Nameserver.new - new_nameserver.domain = original_nameserver.domain + new_nameserver.domain = origin.domain new_nameserver.attributes = new_attributes new_nameserver.save! - domain_list << original_nameserver.domain.name + domain_list << origin.domain.name - original_nameserver.destroy! + origin.destroy! end self.domains.where(name: domain_list).find_each(&:update_whois_record) if domain_list.any? - domain_list.uniq.sort + [domain_list.uniq.sort, failed_list.uniq.sort] end end diff --git a/config/locales/registrar/nameservers.en.yml b/config/locales/registrar/nameservers.en.yml index 6cc08f0ab..2e645734d 100644 --- a/config/locales/registrar/nameservers.en.yml +++ b/config/locales/registrar/nameservers.en.yml @@ -4,3 +4,4 @@ en: update: replaced: Nameserver have been successfully replaced affected_domains: Affected domains + skipped_domains: Skipped domains diff --git a/test/system/registrar_area/bulk_change/nameserver_test.rb b/test/system/registrar_area/bulk_change/nameserver_test.rb index 4f63eb061..0ba8f7ba2 100644 --- a/test/system/registrar_area/bulk_change/nameserver_test.rb +++ b/test/system/registrar_area/bulk_change/nameserver_test.rb @@ -18,7 +18,8 @@ class RegistrarAreaNameserverBulkChangeTest < ApplicationSystemTestCase .to_return(body: { data: { type: 'nameserver', id: 'new-ns.bestnames.test', - affected_domains: ["airport.test", "shop.test"] + affected_domains: ["airport.test", "shop.test"], + skipped_domains: [] } }.to_json, status: 200) @@ -73,7 +74,8 @@ class RegistrarAreaNameserverBulkChangeTest < ApplicationSystemTestCase .to_return(body: { data: { type: 'nameserver', id: 'new-ns.bestnames.test', - affected_domains: ["shop.test"]}}.to_json, status: 200) + affected_domains: ["shop.test"], + skipped_domains: []}}.to_json, status: 200) visit registrar_domains_url click_link 'Bulk change'