diff --git a/app/interactions/client_hold_interaction/base.rb b/app/interactions/client_hold_interaction/base.rb deleted file mode 100644 index be8b8b0a8..000000000 --- a/app/interactions/client_hold_interaction/base.rb +++ /dev/null @@ -1,8 +0,0 @@ -module ClientHoldInteraction - class Base < ActiveInteraction::Base - def to_stdout(message) - time = Time.zone.now.utc - STDOUT << "#{time} - #{message}\n" unless Rails.env.test? - end - end -end diff --git a/app/interactions/client_hold_interaction/process_client_hold.rb b/app/interactions/client_hold_interaction/process_client_hold.rb deleted file mode 100644 index 453c400cc..000000000 --- a/app/interactions/client_hold_interaction/process_client_hold.rb +++ /dev/null @@ -1,67 +0,0 @@ -module ClientHoldInteraction - class ProcessClientHold < Base - object :domain, - class: Domain, - description: 'Domain to set ClientHold on' - - # rubocop:disable Metrics/AbcSize - def execute - notify_on_grace_period if should_notify_on_soft_force_delete? - - return unless client_holdable? - - domain.statuses << DomainStatus::CLIENT_HOLD - to_stdout("DomainCron.start_client_hold: #{domain.id} (#{domain.name}) #{domain.changes}\n") - - domain.save(validate: false) - notify_client_hold - - to_stdout("Successfully set client_hold on (#{domain.name})") - end - - def notify_on_grace_period - domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain', - domain_name: domain.name, - date: domain.force_delete_start)) - send_mail if domain.template_name.present? - domain.update(contact_notification_sent_date: Time.zone.today) - end - - def notify_client_hold - domain.registrar.notifications.create!(text: I18n.t('force_delete_set_on_domain', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date)) - end - - def send_mail - DomainDeleteMailer.forced(domain: domain, - registrar: domain.registrar, - registrant: domain.registrant, - template_name: domain.template_name).deliver_now - end - - def should_notify_on_soft_force_delete? - domain.force_delete_scheduled? && domain.contact_notification_sent_date.blank? && - domain.force_delete_start.to_date <= Time.zone.now.to_date && - domain.force_delete_type.to_sym == :soft && - !domain.statuses.include?(DomainStatus::CLIENT_HOLD) - end - # rubocop:enable Metrics/AbcSize - - def client_holdable? - domain.force_delete_scheduled? && - !domain.statuses.include?(DomainStatus::CLIENT_HOLD) && - domain.force_delete_start.present? && - force_delete_lte_today && force_delete_lte_valid_date - end - - def force_delete_lte_today - domain.force_delete_start + Setting.expire_warning_period.days <= Time.zone.now - end - - def force_delete_lte_valid_date - domain.force_delete_start + Setting.expire_warning_period.days <= domain.valid_to - end - end -end diff --git a/app/interactions/client_hold_interaction/set_client_hold.rb b/app/interactions/client_hold_interaction/set_client_hold.rb deleted file mode 100644 index d723d5cc8..000000000 --- a/app/interactions/client_hold_interaction/set_client_hold.rb +++ /dev/null @@ -1,15 +0,0 @@ -module ClientHoldInteraction - class SetClientHold < Base - def execute - to_stdout('Setting client_hold to domains\n') - - ::PaperTrail.request.whodunnit = "cron - #{self.class.name}" - - ::Domain.force_delete_scheduled.each do |domain| - ClientHoldInteraction::ProcessClientHold.run(domain: domain) - end - - to_stdout('All client_hold setting are done\n') - end - end -end diff --git a/app/interactions/domains/client_hold/base.rb b/app/interactions/domains/client_hold/base.rb new file mode 100644 index 000000000..c3c626b79 --- /dev/null +++ b/app/interactions/domains/client_hold/base.rb @@ -0,0 +1,10 @@ +module Domains + module ClientHold + class Base < ActiveInteraction::Base + def to_stdout(message) + time = Time.zone.now.utc + STDOUT << "#{time} - #{message}\n" unless Rails.env.test? + end + end + end +end diff --git a/app/interactions/domains/client_hold/process_client_hold.rb b/app/interactions/domains/client_hold/process_client_hold.rb new file mode 100644 index 000000000..8b8d60403 --- /dev/null +++ b/app/interactions/domains/client_hold/process_client_hold.rb @@ -0,0 +1,69 @@ +module Domains + module ClientHold + class ProcessClientHold < Base + object :domain, + class: Domain, + description: 'Domain to set ClientHold on' + + # rubocop:disable Metrics/AbcSize + def execute + notify_on_grace_period if should_notify_on_soft_force_delete? + + return unless client_holdable? + + domain.statuses << DomainStatus::CLIENT_HOLD + to_stdout("DomainCron.start_client_hold: #{domain.id} (#{domain.name}) #{domain.changes}\n") + + domain.save(validate: false) + notify_client_hold + + to_stdout("Successfully set client_hold on (#{domain.name})") + end + + def notify_on_grace_period + domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain', + domain_name: domain.name, + date: domain.force_delete_start)) + send_mail if domain.template_name.present? + domain.update(contact_notification_sent_date: Time.zone.today) + end + + def notify_client_hold + domain.registrar.notifications.create!(text: I18n.t('force_delete_set_on_domain', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date)) + end + + def send_mail + DomainDeleteMailer.forced(domain: domain, + registrar: domain.registrar, + registrant: domain.registrant, + template_name: domain.template_name).deliver_now + end + + def should_notify_on_soft_force_delete? + domain.force_delete_scheduled? && domain.contact_notification_sent_date.blank? && + domain.force_delete_start.to_date <= Time.zone.now.to_date && + domain.force_delete_type.to_sym == :soft && + !domain.statuses.include?(DomainStatus::CLIENT_HOLD) + end + # rubocop:enable Metrics/AbcSize + + def client_holdable? + domain.force_delete_scheduled? && + !domain.statuses.include?(DomainStatus::CLIENT_HOLD) && + domain.force_delete_start.present? && + force_delete_lte_today && force_delete_lte_valid_date + end + + def force_delete_lte_today + domain.force_delete_start + Setting.expire_warning_period.days <= Time.zone.now + end + + def force_delete_lte_valid_date + domain.force_delete_start + Setting.expire_warning_period.days <= domain.valid_to + end + end + end +end diff --git a/app/interactions/domains/client_hold/set_client_hold.rb b/app/interactions/domains/client_hold/set_client_hold.rb new file mode 100644 index 000000000..0e54b531f --- /dev/null +++ b/app/interactions/domains/client_hold/set_client_hold.rb @@ -0,0 +1,17 @@ +module Domains + module ClientHold + class SetClientHold < Base + def execute + to_stdout('Setting client_hold to domains\n') + + ::PaperTrail.request.whodunnit = "cron - #{self.class.name}" + + ::Domain.force_delete_scheduled.each do |domain| + Domains::ClientHold::ProcessClientHold.run(domain: domain) + end + + to_stdout('All client_hold setting are done\n') + end + end + end +end diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb index 613762062..d09141d52 100644 --- a/app/models/domain_cron.rb +++ b/app/models/domain_cron.rb @@ -79,6 +79,6 @@ class DomainCron end def self.start_client_hold - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! end end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index d9e7a3632..304a7a18b 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -206,7 +206,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.schedule_force_delete(type: :soft) travel_to Time.zone.parse('2010-08-21') - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! @domain.reload assert_emails 1 @@ -227,7 +227,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.schedule_force_delete(type: :soft) travel_to Time.zone.parse('2010-08-21') - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! @domain.reload assert_emails 1 @@ -244,7 +244,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.schedule_force_delete(type: :soft) travel_to Time.zone.parse('2010-07-06') - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! @domain.reload assert_not_includes(@domain.statuses, asserted_status) @@ -259,7 +259,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.schedule_force_delete(type: :fast_track) travel_to Time.zone.parse('2010-07-25') - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! @domain.reload assert_includes(@domain.statuses, asserted_status) @@ -275,7 +275,7 @@ class ForceDeleteTest < ActionMailer::TestCase @domain.schedule_force_delete(type: :fast_track) travel_to Time.zone.parse('2010-07-06') - ClientHoldInteraction::SetClientHold.run! + Domains::ClientHold::SetClientHold.run! @domain.reload assert_not_includes(@domain.statuses, asserted_status)