Skip to content

Commit

Permalink
Migrate force delete refresh status notes to a job
Browse files Browse the repository at this point in the history
  • Loading branch information
thiagoyoussef committed Sep 18, 2022
1 parent 7328ea2 commit 929ccf6
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 31 deletions.
35 changes: 35 additions & 0 deletions app/jobs/check_force_delete_lift_job.rb
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class CheckForceDeleteLift < ApplicationJob
class ForceDeleteLiftJob < ApplicationJob
queue_as :default

def perform
Expand Down
29 changes: 1 addition & 28 deletions app/models/validation_event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,33 +63,6 @@ def object
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
6 changes: 4 additions & 2 deletions test/models/domain/force_delete_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ def test_remove_invalid_email_from_domain_status_notes
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

Expand Down Expand Up @@ -511,7 +512,7 @@ def test_lifts_force_delete_after_bounce_changes
@domain.registrant.update(email: '[email protected]', 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?
Expand All @@ -530,11 +531,12 @@ def test_lifts_force_delete_after_changing_to_valid_email

@domain.registrant.update(email: '[email protected]')
@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?
Expand Down

0 comments on commit 929ccf6

Please sign in to comment.