From 9df52af96b42c279b3d1e5359f88ea9abe7f9065 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 10 May 2021 11:44:22 +0500 Subject: [PATCH] Fix domain update confirm if pendong_json current_user_id got non-string values --- .../process_update_confirmed.rb | 8 ++++++- test/jobs/domain_update_confirm_job_test.rb | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/interactions/domains/update_confirm/process_update_confirmed.rb b/app/interactions/domains/update_confirm/process_update_confirmed.rb index 316c1db86..734dbf5d8 100644 --- a/app/interactions/domains/update_confirm/process_update_confirmed.rb +++ b/app/interactions/domains/update_confirm/process_update_confirmed.rb @@ -29,11 +29,17 @@ module Domains end def assign_domain_update_meta - user = ApiUser.find_by(id: domain.pending_json['current_user_id']) + user = ApiUser.find_by(id: user_id) if user_id.present? && user_id.is_a?(String) domain.upid = user.registrar.id if user.present? && user.registrar domain.up_date = Time.zone.now end + + private + + def user_id + @user_id ||= domain.pending_json.dig('current_user_id') + end end end end diff --git a/test/jobs/domain_update_confirm_job_test.rb b/test/jobs/domain_update_confirm_job_test.rb index aa686a9f8..183fd5cf1 100644 --- a/test/jobs/domain_update_confirm_job_test.rb +++ b/test/jobs/domain_update_confirm_job_test.rb @@ -127,6 +127,29 @@ class DomainUpdateConfirmJobTest < ActiveSupport::TestCase assert @domain.statuses.include? DomainStatus::DISPUTED end + def test_works_id_current_user_id_broken + epp_xml = "\n\n \n \n \n #{@domain.name}\n" \ + " \n #{@new_registrant.code}\n \n \n \n \n \n" \ + " \n #{@legal_doc_path}\n \n" \ + " \n 20alla-1594199756\n \n\n" + parsed_frame = Deserializers::Xml::DomainUpdate.new(Nokogiri::XML(epp_xml), @domain.registrar.id).call + + @domain.pending_json['frame'] = parsed_frame + @domain.pending_json['current_user_id'] = { key: 'some_value'} + @domain.update(pending_json: @domain.pending_json) + @domain.update(statuses: [DomainStatus::DELETE_CANDIDATE, DomainStatus::DISPUTED]) + + assert_nothing_raised do + DomainUpdateConfirmJob.perform_now(@domain.id, RegistrantVerification::CONFIRMED) + end + @domain.reload + + assert_not @domain.statuses.include? DomainStatus::PENDING_DELETE_CONFIRMATION + assert_not @domain.statuses.include? DomainStatus::PENDING_DELETE + assert @domain.statuses.include? DomainStatus::DELETE_CANDIDATE + assert @domain.statuses.include? DomainStatus::DISPUTED + end + def test_clears_pending_update_and_inactive_after_denial epp_xml = "\n\n \n \n \n #{@domain.name}\n" \ " \n #{@new_registrant.code}\n \n \n \n \n \n" \