From 57cd588eee5ab1de4646985b78f0d04e0e9bec0e Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Tue, 16 Jun 2020 13:41:35 +0500 Subject: [PATCH] Add email verification rake task for one domain only --- app/models/email_address_verification.rb | 2 ++ lib/tasks/verify_email.rake | 14 +++++++++++++- test/tasks/emails/verify_email_task_test.rb | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index 5cc982da6..28bd6a2f9 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -13,6 +13,8 @@ class EmailAddressVerification < ApplicationRecord where.not(verified_at: nil).where(success: false) } + scope :by_domain, ->(domain_name) { where(domain: domain_name) } + def recently_verified? verified_at.present? && verified_at > verification_period diff --git a/lib/tasks/verify_email.rake b/lib/tasks/verify_email.rake index 68dda6e60..6b64e0765 100644 --- a/lib/tasks/verify_email.rake +++ b/lib/tasks/verify_email.rake @@ -1,5 +1,5 @@ namespace :verify_email do - desc 'Stars verifying email jobs' + desc 'Stars verifying email jobs for all the domain' task all_domains: :environment do verifications_by_domain = EmailAddressVerification.not_verified_recently.group_by(&:domain) verifications_by_domain.each do |_domain, verifications| @@ -8,4 +8,16 @@ namespace :verify_email do next end end + + # Need to be run like 'bundle exec rake verify_email:domain['gmail.com']' + # In zsh syntax will be 'bundle exec rake verify_email:domain\['gmail.com'\]' + # Default 'bundle exec rake verify_email:domain' wil use 'internet.ee' domain + desc 'Stars verifying email jobs for domain stated in argument' + task :domain, [:domain_name] => [:environment] do |_task, args| + args.with_defaults(domain_name: "internet.ee") + + verifications_by_domain = EmailAddressVerification.not_verified_recently + .by_domain(args[:domain_name]) + verifications_by_domain.map{ |ver| VerifyEmailsJob.enqueue(ver.id) } + end end diff --git a/test/tasks/emails/verify_email_task_test.rb b/test/tasks/emails/verify_email_task_test.rb index ff70730fd..7cca11845 100644 --- a/test/tasks/emails/verify_email_task_test.rb +++ b/test/tasks/emails/verify_email_task_test.rb @@ -43,7 +43,21 @@ class VerifyEmailTaskTest < ActiveSupport::TestCase assert @invalid_contact_verification.failed? end + def test_domain_task_verifies_for_one_domain + capture_io { run_single_domain_task(@contact_verification.domain) } + + @contact_verification.reload + @invalid_contact_verification.reload + + assert @contact_verification.verified? + assert @invalid_contact_verification.not_verified? + end + def run_task Rake::Task['verify_email:all_domains'].execute end + + def run_single_domain_task(domain) + Rake::Task["verify_email:domain"].invoke(domain) + end end