mirror of
https://github.com/internetee/registry.git
synced 2025-08-11 12:09:34 +02:00
refactor: improve force delete domain status tracking
- Add force_delete_domain_statuses_history_data to store force delete metadata - Update force delete queries to use new JSON status history - Refactor force delete tests to use travel_to helper - Remove direct force_delete_start field usage - Update status notes to include company identification number
This commit is contained in:
parent
917e426d91
commit
bfecc3c40e
4 changed files with 29 additions and 20 deletions
|
@ -6,6 +6,10 @@ module Domains
|
||||||
type == :fast_track ? force_delete_fast_track : force_delete_soft
|
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.status_notes[DomainStatus::FORCE_DELETE] = "Company no: #{domain.registrant.ident}" if reason == 'invalid_company'
|
||||||
domain.skip_whois_record_update = true
|
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)
|
domain.save(validate: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,10 @@ class ForceDeleteDailyAdminNotifierJob < ApplicationJob
|
||||||
private
|
private
|
||||||
|
|
||||||
def force_deleted_domains
|
def force_deleted_domains
|
||||||
Domain.where("force_delete_start >= ? AND force_delete_start <= ?",
|
Domain.where("json_statuses_history->>'force_delete_domain_statuses_history_data' IS NOT NULL").
|
||||||
Time.zone.yesterday.beginning_of_day,
|
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.end_of_day)
|
Time.zone.yesterday.beginning_of_day,
|
||||||
|
Time.zone.yesterday.end_of_day)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lifted_force_delete_domains
|
def lifted_force_delete_domains
|
||||||
|
|
|
@ -49,7 +49,8 @@ class Domain < ApplicationRecord
|
||||||
store_accessor :json_statuses_history,
|
store_accessor :json_statuses_history,
|
||||||
:force_delete_domain_statuses_history,
|
:force_delete_domain_statuses_history,
|
||||||
:admin_store_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: 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?
|
# TODO: most inputs should be trimmed before validation, probably some global logic?
|
||||||
|
|
|
@ -10,10 +10,13 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_sends_notification_for_domains_with_force_delete_today
|
def test_sends_notification_for_domains_with_force_delete_today
|
||||||
@domain.schedule_force_delete(type: :soft)
|
@domain.schedule_force_delete(type: :soft,
|
||||||
@domain.update!(force_delete_start: Time.zone.now.to_date - 1.day)
|
notify_by_email: true,
|
||||||
|
reason: 'invalid_email')
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
|
||||||
|
travel_to Time.zone.now + 1.day
|
||||||
|
|
||||||
assert_emails 1 do
|
assert_emails 1 do
|
||||||
ForceDeleteDailyAdminNotifierJob.perform_now
|
ForceDeleteDailyAdminNotifierJob.perform_now
|
||||||
end
|
end
|
||||||
|
@ -25,11 +28,10 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
def test_includes_multiple_domains_in_notification
|
def test_includes_multiple_domains_in_notification
|
||||||
@domain.schedule_force_delete(type: :soft)
|
@domain.schedule_force_delete(type: :soft)
|
||||||
@domain.update!(force_delete_start: Time.zone.now.to_date - 1.day)
|
|
||||||
|
|
||||||
domain2 = domains(:airport)
|
domain2 = domains(:airport)
|
||||||
domain2.schedule_force_delete(type: :fast_track)
|
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
|
assert_emails 1 do
|
||||||
ForceDeleteDailyAdminNotifierJob.perform_now
|
ForceDeleteDailyAdminNotifierJob.perform_now
|
||||||
|
@ -43,9 +45,10 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase
|
||||||
def test_includes_correct_reason_for_invalid_email_template
|
def test_includes_correct_reason_for_invalid_email_template
|
||||||
@domain.update!(template_name: 'invalid_email')
|
@domain.update!(template_name: 'invalid_email')
|
||||||
@domain.schedule_force_delete(type: :soft)
|
@domain.schedule_force_delete(type: :soft)
|
||||||
@domain.update!(force_delete_start: Time.zone.now.to_date - 1.day)
|
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
|
||||||
|
travel_to Time.zone.now + 1.day
|
||||||
|
|
||||||
assert_emails 1 do
|
assert_emails 1 do
|
||||||
ForceDeleteDailyAdminNotifierJob.perform_now
|
ForceDeleteDailyAdminNotifierJob.perform_now
|
||||||
end
|
end
|
||||||
|
@ -55,29 +58,29 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_includes_correct_reason_for_manual_force_delete
|
def test_includes_correct_reason_for_manual_force_delete
|
||||||
manual_reason = "invalid_company"
|
@domain.schedule_force_delete(type: :fast_track,
|
||||||
@domain.status_notes = { DomainStatus::FORCE_DELETE => manual_reason }
|
notify_by_email: true,
|
||||||
@domain.schedule_force_delete(type: :fast_track)
|
reason: 'invalid_company')
|
||||||
@domain.update!(force_delete_start: Time.zone.now.to_date - 1.day)
|
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
|
||||||
|
travel_to Time.zone.now + 1.day
|
||||||
|
|
||||||
assert_emails 1 do
|
assert_emails 1 do
|
||||||
ForceDeleteDailyAdminNotifierJob.perform_now
|
ForceDeleteDailyAdminNotifierJob.perform_now
|
||||||
end
|
end
|
||||||
|
|
||||||
email = ActionMailer::Base.deliveries.last
|
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
|
end
|
||||||
|
|
||||||
def test_includes_lifted_force_delete_domains_in_notification
|
def test_includes_lifted_force_delete_domains_in_notification
|
||||||
reason = "invalid_company"
|
reason = "invalid_company"
|
||||||
@domain.status_notes = { DomainStatus::FORCE_DELETE => reason }
|
@domain.schedule_force_delete(type: :fast_track,
|
||||||
@domain.schedule_force_delete(type: :fast_track)
|
notify_by_email: true,
|
||||||
@domain.update!(force_delete_start: Time.zone.now.to_date - 1.day)
|
reason: reason)
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
|
||||||
assert @domain.force_delete_scheduled?
|
assert @domain.force_delete_scheduled?
|
||||||
assert_equal @domain.status_notes[DomainStatus::FORCE_DELETE], reason
|
|
||||||
|
|
||||||
@domain.cancel_force_delete
|
@domain.cancel_force_delete
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
@ -90,6 +93,6 @@ class ForceDeleteDailyAdminNotifierJobTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
email = ActionMailer::Base.deliveries.last
|
email = ActionMailer::Base.deliveries.last
|
||||||
assert_includes email.body.to_s, @domain.name
|
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
|
||||||
end
|
end
|
Loading…
Add table
Add a link
Reference in a new issue