diff --git a/app/interactions/domains/force_delete/set_status.rb b/app/interactions/domains/force_delete/set_status.rb index cedef18d5..76947dfa2 100644 --- a/app/interactions/domains/force_delete/set_status.rb +++ b/app/interactions/domains/force_delete/set_status.rb @@ -6,6 +6,10 @@ module Domains type == :fast_track ? force_delete_fast_track : force_delete_soft domain.status_notes[DomainStatus::FORCE_DELETE] = "Company no: #{domain.registrant.ident}" if reason == 'invalid_company' domain.skip_whois_record_update = true + domain.force_delete_domain_statuses_history_data = { + reason: domain.status_notes[DomainStatus::FORCE_DELETE], + date: Time.zone.now + } domain.save(validate: false) end diff --git a/app/jobs/force_delete_daily_admin_notifier_job.rb b/app/jobs/force_delete_daily_admin_notifier_job.rb index 254d5a85d..0fd6ca898 100644 --- a/app/jobs/force_delete_daily_admin_notifier_job.rb +++ b/app/jobs/force_delete_daily_admin_notifier_job.rb @@ -8,9 +8,10 @@ class ForceDeleteDailyAdminNotifierJob < ApplicationJob private def force_deleted_domains - Domain.where("force_delete_start >= ? AND force_delete_start <= ?", - Time.zone.yesterday.beginning_of_day, - Time.zone.yesterday.end_of_day) + Domain.where("json_statuses_history->>'force_delete_domain_statuses_history_data' IS NOT NULL"). + where("(json_statuses_history->'force_delete_domain_statuses_history_data'->>'date')::timestamp >= ? AND (json_statuses_history->'force_delete_domain_statuses_history_data'->>'date')::timestamp <= ?", + Time.zone.yesterday.beginning_of_day, + Time.zone.yesterday.end_of_day) end def lifted_force_delete_domains diff --git a/app/models/domain.rb b/app/models/domain.rb index ab12372e2..809d18615 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -49,7 +49,8 @@ class Domain < ApplicationRecord store_accessor :json_statuses_history, :force_delete_domain_statuses_history, :admin_store_statuses_history, - :lift_force_delete_domain_statuses_history_data + :lift_force_delete_domain_statuses_history_data, + :force_delete_domain_statuses_history_data # TODO: whois requests ip whitelist for full info for own domains and partial info for other domains # TODO: most inputs should be trimmed before validation, probably some global logic? diff --git a/test/jobs/force_delete_daily_admin_notifier_job_test.rb b/test/jobs/force_delete_daily_admin_notifier_job_test.rb index d2282180f..dd3f99d38 100644 --- a/test/jobs/force_delete_daily_admin_notifier_job_test.rb +++ b/test/jobs/force_delete_daily_admin_notifier_job_test.rb @@ -10,10 +10,13 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase end def test_sends_notification_for_domains_with_force_delete_today - @domain.schedule_force_delete(type: :soft) - @domain.update!(force_delete_start: Time.zone.now.to_date - 1.day) + @domain.schedule_force_delete(type: :soft, + notify_by_email: true, + reason: 'invalid_email') @domain.reload + travel_to Time.zone.now + 1.day + assert_emails 1 do ForceDeleteDailyAdminNotifierJob.perform_now end @@ -25,12 +28,11 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase def test_includes_multiple_domains_in_notification @domain.schedule_force_delete(type: :soft) - @domain.update!(force_delete_start: Time.zone.now.to_date - 1.day) - domain2 = domains(:airport) domain2.schedule_force_delete(type: :fast_track) - domain2.update!(force_delete_start: Time.zone.now.to_date - 1.day) + travel_to Time.zone.now + 1.day + assert_emails 1 do ForceDeleteDailyAdminNotifierJob.perform_now end @@ -43,9 +45,10 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase def test_includes_correct_reason_for_invalid_email_template @domain.update!(template_name: 'invalid_email') @domain.schedule_force_delete(type: :soft) - @domain.update!(force_delete_start: Time.zone.now.to_date - 1.day) @domain.reload + travel_to Time.zone.now + 1.day + assert_emails 1 do ForceDeleteDailyAdminNotifierJob.perform_now end @@ -55,29 +58,29 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase end def test_includes_correct_reason_for_manual_force_delete - manual_reason = "invalid_company" - @domain.status_notes = { DomainStatus::FORCE_DELETE => manual_reason } - @domain.schedule_force_delete(type: :fast_track) - @domain.update!(force_delete_start: Time.zone.now.to_date - 1.day) + @domain.schedule_force_delete(type: :fast_track, + notify_by_email: true, + reason: 'invalid_company') @domain.reload + travel_to Time.zone.now + 1.day + assert_emails 1 do ForceDeleteDailyAdminNotifierJob.perform_now end email = ActionMailer::Base.deliveries.last - assert_includes email.body.to_s, "Manual force delete: #{manual_reason}" + assert_includes email.body.to_s, "Company no: #{@domain.registrant.ident}" end def test_includes_lifted_force_delete_domains_in_notification reason = "invalid_company" - @domain.status_notes = { DomainStatus::FORCE_DELETE => reason } - @domain.schedule_force_delete(type: :fast_track) - @domain.update!(force_delete_start: Time.zone.now.to_date - 1.day) + @domain.schedule_force_delete(type: :fast_track, + notify_by_email: true, + reason: reason) @domain.reload assert @domain.force_delete_scheduled? - assert_equal @domain.status_notes[DomainStatus::FORCE_DELETE], reason @domain.cancel_force_delete @domain.reload @@ -90,6 +93,6 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase email = ActionMailer::Base.deliveries.last assert_includes email.body.to_s, @domain.name - assert_includes email.body.to_s, reason + assert_includes email.body.to_s, "Company no: #{@domain.registrant.ident}" end end \ No newline at end of file