Skip to content

Commit

Permalink
Merge pull request #2476 from internetee/2467-force-delete-email-noti…
Browse files Browse the repository at this point in the history
…fications

send expire email for multiyear domains
  • Loading branch information
vohmar authored Dec 2, 2022
2 parents f2cd7cb + 51dd9dc commit 460216c
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
module Domains
module ForceDelete
class NotifyMultiyearsExpirationDomain < Base
SCHEDULED_DATA = 2.days
MULTIYEAR_VALUE_START_LIMIT = 1.year

def execute
return unless multiyear_registrations?

recipients.each do |recipient|
DomainExpireEmailJob.set(wait_until: send_time).perform_later(domain.id, recipient)
end
end

def send_time
domain.force_delete_start + SCHEDULED_DATA
end

def multiyear_registrations?
domain_expire = domain.valid_to.to_i
current_time = Time.zone.now.to_i

(domain_expire - current_time) >= MULTIYEAR_VALUE_START_LIMIT.to_i
end

def recipients
filter_invalid_emails(domain.expired_domain_contact_emails)
end

def filter_invalid_emails(emails)
emails.select do |email|
valid = Rails.env.test? ? true : Truemail.valid?(email)

unless valid
Rails.logger.info('Unable to send DomainExpireMailer#expired email for '\
"domain #{domain.name} (##{domain.id}) to invalid recipient #{email}")
end

valid
end
end
end
end
end
1 change: 1 addition & 0 deletions app/interactions/domains/force_delete/set_force_delete.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ def execute
compose(PostSetProcess, inputs.to_h)
compose(NotifyRegistrar, inputs.to_h)
compose(NotifyByEmail, inputs.to_h)
compose(NotifyMultiyearsExpirationDomain, inputs.to_h)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/domain_expire_email_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ def perform(domain_id, email)
domain = Domain.find_by(id: domain_id)

return if domain.blank?
return if domain.registered?
return if domain.registered? && !domain.force_delete_scheduled?

attrs = {
domain: domain,
Expand Down
15 changes: 15 additions & 0 deletions test/models/domain/force_delete_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,21 @@ def test_lifts_force_delete_after_bounce_changes
assert_not @domain.force_delete_scheduled?
end

def test_notification_multiyear_expiration_domain
@domain.update(valid_to: Time.zone.parse('2014-08-05'))
assert_not @domain.force_delete_scheduled?
travel_to Time.zone.parse('2010-07-05')

@domain.schedule_force_delete(type: :soft)
@domain.reload

assert @domain.force_delete_scheduled?
assert_equal Date.parse('2010-09-19'), @domain.force_delete_date.to_date
assert_equal Date.parse('2010-08-05'), @domain.force_delete_start.to_date

assert_enqueued_jobs 8
end

def prepare_bounced_email_address(email)
@bounced_mail = BouncedMailAddress.new
@bounced_mail.email = email
Expand Down
1 change: 0 additions & 1 deletion test/models/epp/response/result/code_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ def test_returns_default_descriptions
2400 => 'Command failed',
2501 => 'Authentication error; server closing connection'
}

assert Epp::Response::Result::Code.default_descriptions.contain? descriptions
end

Expand Down

0 comments on commit 460216c

Please sign in to comment.