diff --git a/lib/tasks/check_force_delete.rake b/lib/tasks/check_force_delete.rake index 4fb989729..2fed5ddeb 100644 --- a/lib/tasks/check_force_delete.rake +++ b/lib/tasks/check_force_delete.rake @@ -1,29 +1,8 @@ desc 'Check Force Delete' -task :check_force_delete, %i[batch batch_size batches_delay] => :environment do |_t, args| - args.with_defaults(batch: false, batch_size: 1_000, batches_delay: 15) +task check_force_delete: :environment do - batch = ActiveModel::Type::Boolean.new.cast(args[:batch]) - batch_size = args[:batch_size].to_i - batches_delay = args[:batches_delay].to_i.minutes + validations = ValidationEvent.select(:validation_eventable_id).failed.where(validation_eventable_type: 'Contact').group(:validation_eventable_id) + invalid_contact_ids = (validations.mx.having("count(event_data ->> 'success') > 2") + validations.regex).pluck(:validation_eventable_id) - invalid_contacts = Contact.joins(:validation_events).select do |contact| - events = contact.validation_events - mx = events.mx.select(&:failed?).count >= ValidationEvent::MX_CHECK - regex = events.regex.select(&:failed?).present? - - (contact.need_to_start_force_delete? || contact.need_to_lift_force_delete?) && (mx || regex) - end.uniq - - if batch - waiting_minutes = 0.minutes - - invalid_contacts.find_in_batches(batch_size: batch_size) do |contact_batches| - CheckForceDeleteJob.set(wait: waiting_minutes).perform_later(contact_batches) - waiting_minutes += batches_delay - end - else - invalid_contacts.each do |contact| - CheckForceDeleteJob.perform_later([contact.id]) - end - end + CheckForceDeleteJob.perform_later(invalid_contact_ids) end diff --git a/test/tasks/check_force_delete_test.rb b/test/tasks/check_force_delete_test.rb index c52937eaf..dbe2f40aa 100644 --- a/test/tasks/check_force_delete_test.rb +++ b/test/tasks/check_force_delete_test.rb @@ -38,6 +38,25 @@ class CheckForceDeleteTaskTest < ActiveSupport::TestCase assert_enqueued_with(job: CheckForceDeleteJob, args: [[@invalid_contact.id]]) end + def test_not_enque_force_delete + trumail_results = OpenStruct.new(success: false, + email: @contact.email, + domain: 'box.tests', + errors: { mx: 'target host(s) not found' }) + + Spy.on_instance_method(Actions::EmailCheck, :check_email).and_return(trumail_results) + Spy.on_instance_method(Actions::AAndAaaaEmailValidation, :call).and_return([]) + + action = Actions::EmailCheck.new(email: @contact.email, + validation_eventable: @contact, + check_level: 'mx') + 2.times do + action.call + end + + assert_enqueued_jobs 0 + end + private def run_task