diff --git a/app/interactions/domains/client_hold/process_client_hold.rb b/app/interactions/domains/client_hold/process_client_hold.rb index 8b8d60403..71396e87b 100644 --- a/app/interactions/domains/client_hold/process_client_hold.rb +++ b/app/interactions/domains/client_hold/process_client_hold.rb @@ -5,16 +5,20 @@ module Domains class: Domain, description: 'Domain to set ClientHold on' + CLIENT_HOLD_SET_NOTE = "Has been set".freeze + # rubocop:disable Metrics/AbcSize def execute notify_on_grace_period if should_notify_on_soft_force_delete? return unless client_holdable? + return if domain.force_delete_data['client_hold_mandatory'].to_s.downcase == CLIENT_HOLD_SET_NOTE.downcase domain.statuses << DomainStatus::CLIENT_HOLD to_stdout("DomainCron.start_client_hold: #{domain.id} (#{domain.name}) #{domain.changes}\n") - + domain.force_delete_data['client_hold_mandatory'] = CLIENT_HOLD_SET_NOTE domain.save(validate: false) + notify_client_hold to_stdout("Successfully set client_hold on (#{domain.name})") diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index afdd92a9d..380636811 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -535,6 +535,31 @@ class ForceDeleteTest < ActionMailer::TestCase assert_enqueued_jobs 6 end + def test_client_hold_does_not_return_after_manual_removal + domain = domains(:shop) + domain.update(valid_to: Time.zone.parse('2010-10-05')) + + travel_to Time.zone.parse('2010-07-05') + domain.schedule_force_delete(type: :fast_track) + + travel_to Time.zone.parse('2010-07-25') + Domains::ClientHold::SetClientHold.run! + domain.reload + + assert_includes(domain.statuses, DomainStatus::CLIENT_HOLD) + assert_equal(domain.force_delete_data['client_hold_mandatory'], 'Has been set') + + domain.statuses.delete(DomainStatus::CLIENT_HOLD) + domain.save! + domain.reload + + Domains::ClientHold::SetClientHold.run! + domain.reload + + assert_not_includes(domain.statuses, DomainStatus::CLIENT_HOLD) + assert_equal(domain.force_delete_data['client_hold_mandatory'], 'Has been set') + end + def prepare_bounced_email_address(email) @bounced_mail = BouncedMailAddress.new @bounced_mail.email = email