diff --git a/app/interactions/domains/force_delete_bounce/base.rb b/app/interactions/domains/force_delete_email/base.rb similarity index 77% rename from app/interactions/domains/force_delete_bounce/base.rb rename to app/interactions/domains/force_delete_email/base.rb index f7de85492f..aa204831ad 100644 --- a/app/interactions/domains/force_delete_bounce/base.rb +++ b/app/interactions/domains/force_delete_email/base.rb @@ -1,15 +1,15 @@ module Domains - module ForceDeleteBounce + module ForceDeleteEmail class Base < ActiveInteraction::Base - object :bounced_mail_address, - class: BouncedMailAddress, + string :email, 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| + next if domain.force_delete_scheduled? + domain.schedule_force_delete(type: :soft, notify_by_email: true, reason: 'invalid_email') end diff --git a/app/models/bounced_mail_address.rb b/app/models/bounced_mail_address.rb index 931656d223..376e16d350 100644 --- a/app/models/bounced_mail_address.rb +++ b/app/models/bounced_mail_address.rb @@ -45,6 +45,6 @@ def self.ses_configured? end def force_delete_from_bounce - Domains::ForceDeleteBounce::Base.run(bounced_mail_address: self) + Domains::ForceDeleteEmail::Base.run(email: email) end end diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index 2fe7c0dbe6..c54cd42240 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -1,5 +1,6 @@ class EmailAddressVerification < ApplicationRecord RECENTLY_VERIFIED_PERIOD = 1.month + after_save :check_force_delete scope :not_verified_recently, lambda { where('verified_at IS NULL or verified_at < ?', verification_period) @@ -40,6 +41,12 @@ def verified? success end + def check_force_delete + return unless failed? + + Domains::ForceDeleteEmail::Base.run(email: email) + end + def verify validation_request = Truemail.validate(email) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index e4ad085e6d..a0eb9c81f7 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -344,10 +344,10 @@ def test_schedules_force_delete_invalid_contact Truemail.configure.default_validation_type = :regex contact = @domain.admin_contacts.first - contact.update(email: 'some@strangesentence@internet.ee') + contact.update_attribute(:email, 'some@strangesentence@internet.ee') + contact.email_verification.verify assert contact.email_verification_failed? - assert contact.invalid? @domain.reload