From ff1dded49f16ec57ab761d45c359ff073cdf64c2 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 14 Aug 2022 13:16:47 -0300 Subject: [PATCH 01/10] Fix check force delete lift bug --- app/jobs/check_force_delete_job.rb | 36 ++---------------------------- app/models/validation_event.rb | 33 +++++++++++++++++++++++++++ lib/tasks/check_force_delete.rake | 3 +-- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/jobs/check_force_delete_job.rb b/app/jobs/check_force_delete_job.rb index 5fb3408f1..f8997416d 100644 --- a/app/jobs/check_force_delete_job.rb +++ b/app/jobs/check_force_delete_job.rb @@ -3,41 +3,9 @@ class CheckForceDeleteJob < ApplicationJob contacts = Contact.find(contact_ids) contacts.each do |contact| - email = contact.email + next unless contact.need_to_start_force_delete? - if contact.need_to_start_force_delete? - Domains::ForceDeleteEmail::Base.run(email: email) - elsif contact.need_to_lift_force_delete? - domain_list(email).each { |domain| refresh_status_notes(contact, domain) } - end + Domains::ForceDeleteEmail::Base.run(email: contact.email) end end - - private - - def refresh_status_notes(contact, domain) - force_delete_emails = domain.status_notes[DomainStatus::FORCE_DELETE] - return unless force_delete_emails - - force_delete_emails.slice!(contact.email_history) - force_delete_emails.lstrip! - domain.save(validate: false) - - notify_registrar(domain) unless force_delete_emails.empty? - end - - def domain_list(email) - domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten - registrant_ids = Registrant.where(email: email).pluck(:id) - - (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq - end - - def notify_registrar(domain) - domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date, - email: domain.status_notes[DomainStatus::FORCE_DELETE])) - end end diff --git a/app/models/validation_event.rb b/app/models/validation_event.rb index 3e7670fac..c1b413ed0 100644 --- a/app/models/validation_event.rb +++ b/app/models/validation_event.rb @@ -35,6 +35,8 @@ class ValidationEvent < ApplicationRecord scope :smtp, -> { where('event_data @> ?', { 'check_level': 'smtp' }.to_json) } scope :by_object, ->(object) { where(validation_eventable: object) } + after_create :check_force_delete_lift + def self.validated_ids_by(klass) old_records .successful @@ -57,4 +59,35 @@ class ValidationEvent < ApplicationRecord def object validation_eventable end + + private + + def check_force_delete_lift + return unless object.need_to_lift_force_delete? + + domain_list.each do |domain| + next unless domain.status_notes[DomainStatus::FORCE_DELETE] + + domain.status_notes[DomainStatus::FORCE_DELETE].slice!(object.email_history) + domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! + domain.save(validate: false) + + notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? + end + end + + def domain_list + domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten + registrant_ids = Registrant.where(email: email).pluck(:id) + + (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq + end + + def notify_registrar(domain) + domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date, + email: domain.status_notes[DomainStatus::FORCE_DELETE])) + end end diff --git a/lib/tasks/check_force_delete.rake b/lib/tasks/check_force_delete.rake index dcaf2c72c..8c764a930 100644 --- a/lib/tasks/check_force_delete.rake +++ b/lib/tasks/check_force_delete.rake @@ -3,8 +3,7 @@ task check_force_delete: :environment do validations = ValidationEvent.failed.where(validation_eventable_type: 'Contact').uniq(&:validation_eventable_id) invalid_contact_ids = validations.select do |validation| - contact = validation.validation_eventable - contact.need_to_start_force_delete? || contact.need_to_lift_force_delete? + validation.validation_eventable.need_to_start_force_delete? end.pluck(:validation_eventable_id) CheckForceDeleteJob.perform_later(invalid_contact_ids) if invalid_contact_ids.present? From 3e4b67714ef90903243534f79bded47dd4111216 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 14 Aug 2022 13:55:47 -0300 Subject: [PATCH 02/10] Fix code climate issue --- app/models/validation_event.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/models/validation_event.rb b/app/models/validation_event.rb index c1b413ed0..0c1753d63 100644 --- a/app/models/validation_event.rb +++ b/app/models/validation_event.rb @@ -65,15 +65,17 @@ class ValidationEvent < ApplicationRecord def check_force_delete_lift return unless object.need_to_lift_force_delete? - domain_list.each do |domain| - next unless domain.status_notes[DomainStatus::FORCE_DELETE] + domain_list.each { |domain| refresh_status_notes(domain) } + end - domain.status_notes[DomainStatus::FORCE_DELETE].slice!(object.email_history) - domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! - domain.save(validate: false) + def refresh_status_notes(domain) + return unless domain.status_notes[DomainStatus::FORCE_DELETE] - notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? - end + domain.status_notes[DomainStatus::FORCE_DELETE].slice!(object.email_history) + domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! + domain.save(validate: false) + + notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? end def domain_list From 70ff87bd20364552c7bfda94e0ec80c969995019 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Mon, 15 Aug 2022 06:34:37 -0300 Subject: [PATCH 03/10] Add tests --- test/models/domain/force_delete_test.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 66621f23d..e19d6f65d 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -517,6 +517,29 @@ class ForceDeleteTest < ActionMailer::TestCase assert_not @domain.force_delete_scheduled? end + def test_lifts_force_delete_after_changing_to_valid_email + @domain.update(valid_to: Time.zone.parse('2012-08-05')) + assert_not @domain.force_delete_scheduled? + travel_to Time.zone.parse('2010-07-05') + @domain.registrant.update_attribute(:email, '`@internet.ee') + 3.times { @domain.registrant.verify_email } + perform_check_force_delete_job(@domain.registrant.id) + @domain.reload + + assert @domain.force_delete_scheduled? + + @domain.registrant.update(email: 'aaa@bbb.ee') + @domain.registrant.verify_email + @domain.reload + + assert @domain.registrant.need_to_lift_force_delete? + + perform_enqueued_jobs { CheckForceDeleteLift.perform_now } + @domain.reload + + assert_not @domain.force_delete_scheduled? + end + def prepare_bounced_email_address(email) @bounced_mail = BouncedMailAddress.new @bounced_mail.email = email From 929ccf69857e1c463b1e2879013d1d8a8e1c1a83 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 18 Sep 2022 13:37:16 -0300 Subject: [PATCH 04/10] Migrate force delete refresh status notes to a job --- app/jobs/check_force_delete_lift_job.rb | 35 +++++++++++++++++++ ...elete_lift.rb => force_delete_lift_job.rb} | 2 +- app/models/validation_event.rb | 29 +-------------- test/models/domain/force_delete_test.rb | 6 ++-- 4 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 app/jobs/check_force_delete_lift_job.rb rename app/jobs/{check_force_delete_lift.rb => force_delete_lift_job.rb} (87%) diff --git a/app/jobs/check_force_delete_lift_job.rb b/app/jobs/check_force_delete_lift_job.rb new file mode 100644 index 000000000..78e586d1e --- /dev/null +++ b/app/jobs/check_force_delete_lift_job.rb @@ -0,0 +1,35 @@ +class CheckForceDeleteLiftJob < ApplicationJob + def perform(validation_event_id, contact_id) + @event = ValidationEvent.find(validation_event_id) + @contact = Contact.find(contact_id) + + return unless @contact.need_to_lift_force_delete? + + domain_list.each { |domain| refresh_status_notes(domain) } + end + + def domain_list + domain_contacts = Contact.where(email: @event.email).map(&:domain_contacts).flatten + registrant_ids = Registrant.where(email: @event.email).pluck(:id) + + (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq + end + + def refresh_status_notes(domain) + return unless domain.status_notes[DomainStatus::FORCE_DELETE] + + domain.status_notes[DomainStatus::FORCE_DELETE].slice!(@contact.email_history) + domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! + domain.save(validate: false) + + notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? + end + + def notify_registrar(domain) + domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date, + email: domain.status_notes[DomainStatus::FORCE_DELETE])) + end +end diff --git a/app/jobs/check_force_delete_lift.rb b/app/jobs/force_delete_lift_job.rb similarity index 87% rename from app/jobs/check_force_delete_lift.rb rename to app/jobs/force_delete_lift_job.rb index 43c2666b4..631e906e6 100644 --- a/app/jobs/check_force_delete_lift.rb +++ b/app/jobs/force_delete_lift_job.rb @@ -1,4 +1,4 @@ -class CheckForceDeleteLift < ApplicationJob +class ForceDeleteLiftJob < ApplicationJob queue_as :default def perform diff --git a/app/models/validation_event.rb b/app/models/validation_event.rb index 0c1753d63..60dba3129 100644 --- a/app/models/validation_event.rb +++ b/app/models/validation_event.rb @@ -63,33 +63,6 @@ class ValidationEvent < ApplicationRecord private def check_force_delete_lift - return unless object.need_to_lift_force_delete? - - domain_list.each { |domain| refresh_status_notes(domain) } - end - - def refresh_status_notes(domain) - return unless domain.status_notes[DomainStatus::FORCE_DELETE] - - domain.status_notes[DomainStatus::FORCE_DELETE].slice!(object.email_history) - domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! - domain.save(validate: false) - - notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? - end - - def domain_list - domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten - registrant_ids = Registrant.where(email: email).pluck(:id) - - (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq - end - - def notify_registrar(domain) - domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date, - email: domain.status_notes[DomainStatus::FORCE_DELETE])) + CheckForceDeleteLiftJob.perform_later(id, object.id) if object.need_to_lift_force_delete? end end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index e19d6f65d..2e0bed5fd 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -453,6 +453,7 @@ class ForceDeleteTest < ActionMailer::TestCase travel_to Time.zone.parse('2010-07-05 0:00:03') contact_first.verify_email + perform_enqueued_jobs perform_check_force_delete_job(contact_first.id) domain.reload @@ -511,7 +512,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.registrant.update(email: 'aaa@bbb.com', email_history: email) @domain.registrant.verify_email assert @domain.registrant.need_to_lift_force_delete? - CheckForceDeleteLift.perform_now + ForceDeleteLiftJob.perform_now @domain.reload assert_not @domain.force_delete_scheduled? @@ -530,11 +531,12 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.registrant.update(email: 'aaa@bbb.ee') @domain.registrant.verify_email + perform_enqueued_jobs @domain.reload assert @domain.registrant.need_to_lift_force_delete? - perform_enqueued_jobs { CheckForceDeleteLift.perform_now } + perform_enqueued_jobs { ForceDeleteLiftJob.perform_now } @domain.reload assert_not @domain.force_delete_scheduled? From c6ff1ad3003937dfb5ca3e18d5d3f585cc80f7ce Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 18 Sep 2022 17:56:05 -0300 Subject: [PATCH 05/10] fix tests --- test/models/domain/force_delete_test.rb | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 2e0bed5fd..3a8e30111 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -518,30 +518,6 @@ class ForceDeleteTest < ActionMailer::TestCase assert_not @domain.force_delete_scheduled? end - def test_lifts_force_delete_after_changing_to_valid_email - @domain.update(valid_to: Time.zone.parse('2012-08-05')) - assert_not @domain.force_delete_scheduled? - travel_to Time.zone.parse('2010-07-05') - @domain.registrant.update_attribute(:email, '`@internet.ee') - 3.times { @domain.registrant.verify_email } - perform_check_force_delete_job(@domain.registrant.id) - @domain.reload - - assert @domain.force_delete_scheduled? - - @domain.registrant.update(email: 'aaa@bbb.ee') - @domain.registrant.verify_email - perform_enqueued_jobs - @domain.reload - - assert @domain.registrant.need_to_lift_force_delete? - - perform_enqueued_jobs { ForceDeleteLiftJob.perform_now } - @domain.reload - - assert_not @domain.force_delete_scheduled? - end - def prepare_bounced_email_address(email) @bounced_mail = BouncedMailAddress.new @bounced_mail.email = email From 71d1e9bf470d56117ca983dfe472313baaa68222 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 25 Sep 2022 10:31:31 -0300 Subject: [PATCH 06/10] Migrate refresh status notes to `CheckForceDeleteLift` job --- app/jobs/check_force_delete_lift.rb | 53 +++++++++++++++++++++++++ app/jobs/check_force_delete_lift_job.rb | 35 ---------------- app/jobs/force_delete_lift_job.rb | 12 ------ app/models/validation_event.rb | 8 ---- test/models/domain/force_delete_test.rb | 23 ++++++++++- 5 files changed, 75 insertions(+), 56 deletions(-) create mode 100644 app/jobs/check_force_delete_lift.rb delete mode 100644 app/jobs/check_force_delete_lift_job.rb delete mode 100644 app/jobs/force_delete_lift_job.rb diff --git a/app/jobs/check_force_delete_lift.rb b/app/jobs/check_force_delete_lift.rb new file mode 100644 index 000000000..4ad43fb4a --- /dev/null +++ b/app/jobs/check_force_delete_lift.rb @@ -0,0 +1,53 @@ +class CheckForceDeleteLift < ApplicationJob + queue_as :default + + def perform + domains = Domain.where("(status_notes->'serverForceDelete') is not null") + .select { |d| d.registrant.need_to_lift_force_delete? } + + handle_refresh_status(domains) if domains.present? + domains = Domain.where("force_delete_data->'template_name' = ?", 'invalid_email') + .where("force_delete_data->'force_delete_type' = ?", 'soft') + + domains.each do |domain| + Domains::ForceDeleteLift::Base.run(domain: domain) + end + end + + private + + def handle_refresh_status(domains) + domains.each do |domain| + registrant = domain.registrant + event = registrant.validation_events.last + next if event.blank? + + domain_list(event).each { |d| refresh_status_notes(d, registrant) } + end + end + + def domain_list(event) + domain_contacts = Contact.where(email: event.email).map(&:domain_contacts).flatten + registrant_ids = Registrant.where(email: event.email).pluck(:id) + + (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq + end + + def refresh_status_notes(domain, registrant) + return unless domain.status_notes[DomainStatus::FORCE_DELETE] + + domain.status_notes[DomainStatus::FORCE_DELETE].slice!(registrant.email_history) + domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! + domain.save(validate: false) + + notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? + end + + def notify_registrar(domain) + domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date, + email: domain.status_notes[DomainStatus::FORCE_DELETE])) + end +end diff --git a/app/jobs/check_force_delete_lift_job.rb b/app/jobs/check_force_delete_lift_job.rb deleted file mode 100644 index 78e586d1e..000000000 --- a/app/jobs/check_force_delete_lift_job.rb +++ /dev/null @@ -1,35 +0,0 @@ -class CheckForceDeleteLiftJob < ApplicationJob - def perform(validation_event_id, contact_id) - @event = ValidationEvent.find(validation_event_id) - @contact = Contact.find(contact_id) - - return unless @contact.need_to_lift_force_delete? - - domain_list.each { |domain| refresh_status_notes(domain) } - end - - def domain_list - domain_contacts = Contact.where(email: @event.email).map(&:domain_contacts).flatten - registrant_ids = Registrant.where(email: @event.email).pluck(:id) - - (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq - end - - def refresh_status_notes(domain) - return unless domain.status_notes[DomainStatus::FORCE_DELETE] - - domain.status_notes[DomainStatus::FORCE_DELETE].slice!(@contact.email_history) - domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! - domain.save(validate: false) - - notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? - end - - def notify_registrar(domain) - domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date, - email: domain.status_notes[DomainStatus::FORCE_DELETE])) - end -end diff --git a/app/jobs/force_delete_lift_job.rb b/app/jobs/force_delete_lift_job.rb deleted file mode 100644 index 631e906e6..000000000 --- a/app/jobs/force_delete_lift_job.rb +++ /dev/null @@ -1,12 +0,0 @@ -class ForceDeleteLiftJob < ApplicationJob - queue_as :default - - def perform - domains = Domain.where("force_delete_data->'template_name' = ?", 'invalid_email') - .where("force_delete_data->'force_delete_type' = ?", 'soft') - - domains.each do |domain| - Domains::ForceDeleteLift::Base.run(domain: domain) - end - end -end diff --git a/app/models/validation_event.rb b/app/models/validation_event.rb index 60dba3129..3e7670fac 100644 --- a/app/models/validation_event.rb +++ b/app/models/validation_event.rb @@ -35,8 +35,6 @@ class ValidationEvent < ApplicationRecord scope :smtp, -> { where('event_data @> ?', { 'check_level': 'smtp' }.to_json) } scope :by_object, ->(object) { where(validation_eventable: object) } - after_create :check_force_delete_lift - def self.validated_ids_by(klass) old_records .successful @@ -59,10 +57,4 @@ class ValidationEvent < ApplicationRecord def object validation_eventable end - - private - - def check_force_delete_lift - CheckForceDeleteLiftJob.perform_later(id, object.id) if object.need_to_lift_force_delete? - end end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 3a8e30111..0a525ba12 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -512,12 +512,33 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.registrant.update(email: 'aaa@bbb.com', email_history: email) @domain.registrant.verify_email assert @domain.registrant.need_to_lift_force_delete? - ForceDeleteLiftJob.perform_now + CheckForceDeleteLift.perform_now @domain.reload assert_not @domain.force_delete_scheduled? end + def test_lifts_force_delete_after_changing_to_valid_email + @domain.update(valid_to: Time.zone.parse('2012-08-05')) + assert_not @domain.force_delete_scheduled? + travel_to Time.zone.parse('2010-07-05') + @domain.registrant.update_attribute(:email, '`@internet.ee') + 3.times { @domain.registrant.verify_email } + perform_check_force_delete_job(@domain.registrant.id) + @domain.reload + + assert @domain.force_delete_scheduled? + + @domain.registrant.update(email: 'aaa@bbb.ee') + @domain.registrant.verify_email + + Spy.on_instance_method(Registrant, :need_to_lift_force_delete?).and_return(true) + perform_enqueued_jobs { CheckForceDeleteLift.perform_now } + @domain.reload + + assert_not @domain.force_delete_scheduled? + end + def prepare_bounced_email_address(email) @bounced_mail = BouncedMailAddress.new @bounced_mail.email = email From 39022eab9e4e0b43192bc5e5d6b28aaf839594f6 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 25 Sep 2022 11:06:16 -0300 Subject: [PATCH 07/10] Fix tests --- test/models/domain/force_delete_test.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 0a525ba12..daf80aad3 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -453,12 +453,11 @@ class ForceDeleteTest < ActionMailer::TestCase travel_to Time.zone.parse('2010-07-05 0:00:03') contact_first.verify_email - perform_enqueued_jobs - perform_check_force_delete_job(contact_first.id) + perform_enqueued_jobs { CheckForceDeleteLift.perform_now } domain.reload - assert_equal domain.status_notes[DomainStatus::FORCE_DELETE], invalid_email - notification = domain.registrar.notifications.last + assert_nil domain.status_notes[DomainStatus::FORCE_DELETE] + notification = domain.registrar.notifications.last(2).first assert notification.text.include? asserted_text end From 9d7bf049e66f8cb88233e302397a661a04cb1542 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 25 Sep 2022 11:13:23 -0300 Subject: [PATCH 08/10] Delete duplicate test --- test/models/domain/force_delete_test.rb | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index daf80aad3..7032a1f91 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -459,6 +459,7 @@ class ForceDeleteTest < ActionMailer::TestCase assert_nil domain.status_notes[DomainStatus::FORCE_DELETE] notification = domain.registrar.notifications.last(2).first assert notification.text.include? asserted_text + assert_not domain.force_delete_scheduled? end def test_domain_should_have_several_bounced_emails @@ -517,27 +518,6 @@ class ForceDeleteTest < ActionMailer::TestCase assert_not @domain.force_delete_scheduled? end - def test_lifts_force_delete_after_changing_to_valid_email - @domain.update(valid_to: Time.zone.parse('2012-08-05')) - assert_not @domain.force_delete_scheduled? - travel_to Time.zone.parse('2010-07-05') - @domain.registrant.update_attribute(:email, '`@internet.ee') - 3.times { @domain.registrant.verify_email } - perform_check_force_delete_job(@domain.registrant.id) - @domain.reload - - assert @domain.force_delete_scheduled? - - @domain.registrant.update(email: 'aaa@bbb.ee') - @domain.registrant.verify_email - - Spy.on_instance_method(Registrant, :need_to_lift_force_delete?).and_return(true) - perform_enqueued_jobs { CheckForceDeleteLift.perform_now } - @domain.reload - - assert_not @domain.force_delete_scheduled? - end - def prepare_bounced_email_address(email) @bounced_mail = BouncedMailAddress.new @bounced_mail.email = email From 0d7e9ebe917a4c48ea8dfd430b34ad00900a605a Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Thu, 6 Oct 2022 07:59:43 -0300 Subject: [PATCH 09/10] avoid nil error --- lib/tasks/check_force_delete.rake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/tasks/check_force_delete.rake b/lib/tasks/check_force_delete.rake index 8c764a930..a5ae852c8 100644 --- a/lib/tasks/check_force_delete.rake +++ b/lib/tasks/check_force_delete.rake @@ -1,9 +1,13 @@ desc 'Check Force Delete' task check_force_delete: :environment do validations = ValidationEvent.failed.where(validation_eventable_type: 'Contact').uniq(&:validation_eventable_id) + return unless validations.present? invalid_contact_ids = validations.select do |validation| - validation.validation_eventable.need_to_start_force_delete? + contact = validation.validation_eventable + next unless contact + + contact.need_to_start_force_delete? end.pluck(:validation_eventable_id) CheckForceDeleteJob.perform_later(invalid_contact_ids) if invalid_contact_ids.present? From dc75a94f433d617f71526a10e0f201adaf87fe92 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Fri, 7 Oct 2022 06:18:30 -0300 Subject: [PATCH 10/10] fix code climate --- lib/tasks/check_force_delete.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/check_force_delete.rake b/lib/tasks/check_force_delete.rake index a5ae852c8..f1d91a133 100644 --- a/lib/tasks/check_force_delete.rake +++ b/lib/tasks/check_force_delete.rake @@ -1,7 +1,7 @@ desc 'Check Force Delete' task check_force_delete: :environment do validations = ValidationEvent.failed.where(validation_eventable_type: 'Contact').uniq(&:validation_eventable_id) - return unless validations.present? + return if validations.blank? invalid_contact_ids = validations.select do |validation| contact = validation.validation_eventable