Init force delete on bounce creation

This commit is contained in:
Alex Sherman 2021-03-16 17:24:57 +05:00
parent da3272207b
commit 4522e4427e
3 changed files with 27 additions and 1 deletions

View file

@ -0,0 +1,19 @@
module Domains
module ForceDeleteBounce
class Base < ActiveInteraction::Base
object :bounced_mail_address,
class: BouncedMailAddress,
description: 'Bounced email to set ForceDelete from'
def execute
email = bounced_mail_address.email
domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten
domains = domain_contacts.map(&:domain).flatten
domains.each do |domain|
domain.schedule_force_delete(type: :soft,
notify_by_email: true, reason: 'invalid_email')
end
end
end
end
end

View file

@ -1,6 +1,7 @@
class BouncedMailAddress < ApplicationRecord
validates :email, :message_id, :bounce_type, :bounce_subtype, :action, :status, presence: true
after_destroy :destroy_aws_suppression
after_create :force_delete_from_bounce
def bounce_reason
"#{action} (#{status} #{diagnostic})"
@ -42,4 +43,8 @@ class BouncedMailAddress < ApplicationRecord
rescue Aws::Errors::MissingRegionError
false
end
def force_delete_from_bounce
Domains::ForceDeleteBounce::Base.run(bounced_mail_address: self)
end
end

View file

@ -20,6 +20,7 @@ class BouncedMailAddressTest < ActiveSupport::TestCase
domain_contacts = Contact.where(email: @contact_email).map(&:domain_contacts).flatten
domain_contacts.each do |domain_contact|
domain_contact.domain.update(valid_to: Time.zone.now + 5.years)
assert_not domain_contact.domain.statuses.include? DomainStatus::FORCE_DELETE
assert_not domain_contact.domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
assert_not domain_contact.domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
@ -29,7 +30,8 @@ class BouncedMailAddressTest < ActiveSupport::TestCase
@bounced_mail.save
domain_contacts.each do |domain_contact|
assert_equal domain_contact.domain.force_delete_type, 'soft'
domain_contact.reload
assert_equal 'soft', domain_contact.domain.force_delete_type
assert domain_contact.domain.force_delete_scheduled?
assert domain_contact.domain.statuses.include? DomainStatus::FORCE_DELETE
assert domain_contact.domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED