diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index 30dc1b1ec..ec5c651be 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -6,21 +6,6 @@ module Concerns::Domain::ForceDelete end def schedule_force_delete - self.statuses_backup = statuses - statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) - statuses.delete(DomainStatus::PENDING_UPDATE) - statuses.delete(DomainStatus::PENDING_TRANSFER) - statuses.delete(DomainStatus::PENDING_RENEW) - statuses.delete(DomainStatus::PENDING_CREATE) - - statuses.delete(DomainStatus::FORCE_DELETE) - statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) - statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) - statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) - statuses.delete(DomainStatus::PENDING_DELETE) - statuses << DomainStatus::FORCE_DELETE statuses << DomainStatus::SERVER_RENEW_PROHIBITED statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED @@ -31,20 +16,32 @@ module Concerns::Domain::ForceDelete statuses << DomainStatus::SERVER_MANUAL_INZONE end - self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day unless force_delete_at - save!(validate: false) + self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc + .beginning_of_day + stop_all_pending_actions + save(validate: false) end def cancel_force_delete - s = [] - s << DomainStatus::EXPIRED if statuses.include?(DomainStatus::EXPIRED) - s << DomainStatus::SERVER_HOLD if statuses.include?(DomainStatus::SERVER_HOLD) - s << DomainStatus::DELETE_CANDIDATE if statuses.include?(DomainStatus::DELETE_CANDIDATE) - - self.statuses = (statuses_backup + s).uniq + statuses.delete(DomainStatus::FORCE_DELETE) + statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) + statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) + statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) + statuses.delete(DomainStatus::PENDING_DELETE) + statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) self.force_delete_at = nil - self.statuses_backup = [] save(validate: false) end + + private + + def stop_all_pending_actions + statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) + statuses.delete(DomainStatus::PENDING_UPDATE) + statuses.delete(DomainStatus::PENDING_TRANSFER) + statuses.delete(DomainStatus::PENDING_RENEW) + statuses.delete(DomainStatus::PENDING_CREATE) + end end diff --git a/spec/models/concerns/domain/force_delete_spec.rb b/spec/models/concerns/domain/force_delete_spec.rb deleted file mode 100644 index 8a82faa8e..000000000 --- a/spec/models/concerns/domain/force_delete_spec.rb +++ /dev/null @@ -1,100 +0,0 @@ -require 'rails_helper' - -RSpec.describe Domain do - before :example do - create(:zone, origin: 'ee') - end - - it 'should set force delete time' do - domain = build(:domain) - domain.nameservers.build(attributes_for(:nameserver)) - domain.nameservers.build(attributes_for(:nameserver)) - domain.save! - - domain.statuses = ['ok'] - domain.schedule_force_delete - - domain.statuses.should match_array([ - "serverForceDelete", - "pendingDelete", - "serverManualInzone", - "serverRenewProhibited", - "serverTransferProhibited", - "serverUpdateProhibited" - ]) - - domain.cancel_force_delete - - domain.statuses.should == ['ok'] - - domain.statuses = [ - DomainStatus::CLIENT_DELETE_PROHIBITED, - DomainStatus::SERVER_DELETE_PROHIBITED, - DomainStatus::PENDING_UPDATE, - DomainStatus::PENDING_TRANSFER, - DomainStatus::PENDING_RENEW, - DomainStatus::PENDING_CREATE, - DomainStatus::CLIENT_HOLD, - DomainStatus::EXPIRED, - DomainStatus::SERVER_HOLD, - DomainStatus::DELETE_CANDIDATE - ] - - domain.save - - domain.schedule_force_delete - - domain.statuses.should match_array([ - "clientHold", - "deleteCandidate", - "expired", - "serverForceDelete", - "pendingDelete", - "serverHold", - "serverRenewProhibited", - "serverTransferProhibited", - "serverUpdateProhibited" - ]) - - domain.cancel_force_delete - - domain.statuses.should match_array([ - "clientDeleteProhibited", - "clientHold", - "deleteCandidate", - "expired", - "pendingCreate", - "pendingRenew", - "pendingTransfer", - "pendingUpdate", - "serverDeleteProhibited", - "serverHold" - ]) - end - - it 'should should be manual in zone and held after force delete' do - domain = create(:domain) - Setting.redemption_grace_period = 1 - - domain.valid? - domain.outzone_at = Time.zone.now + 1.day # before redemption grace period - # what should this be? - # domain.server_holdable?.should be true - domain.statuses.include?(DomainStatus::SERVER_HOLD).should be false - domain.statuses.include?(DomainStatus::SERVER_MANUAL_INZONE).should be false - domain.schedule_force_delete - domain.server_holdable?.should be false - domain.statuses.include?(DomainStatus::SERVER_MANUAL_INZONE).should be true - domain.statuses.include?(DomainStatus::SERVER_HOLD).should be false - end - - it 'should not allow update after force delete' do - domain = create(:domain) - domain.valid? - domain.pending_update_prohibited?.should be false - domain.update_prohibited?.should be false - domain.schedule_force_delete - domain.pending_update_prohibited?.should be true - domain.update_prohibited?.should be true - end -end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb new file mode 100644 index 000000000..27b792fe7 --- /dev/null +++ b/test/models/domain/force_delete_test.rb @@ -0,0 +1,40 @@ +require 'test_helper' + +class DomainForceDeleteTest < ActiveSupport::TestCase + def setup + @domain = domains(:shop) + end + + def test_schedule_force_delete + @original_redemption_grace_period = Setting.redemption_grace_period + Setting.redemption_grace_period = 30 + travel_to Time.zone.parse('2010-07-05 00:00') + + @domain.schedule_force_delete + + assert @domain.force_delete_scheduled? + assert_equal Time.zone.parse('2010-08-04 03:00'), @domain.force_delete_at + + travel_back + Setting.redemption_grace_period = @original_redemption_grace_period + end + + def test_scheduling_force_delete_bypasses_validation + @domain = domains(:invalid) + @domain.schedule_force_delete + assert @domain.force_delete_scheduled? + end + + def test_cancel_force_delete + @domain.cancel_force_delete + assert_not @domain.force_delete_scheduled? + assert_nil @domain.force_delete_at + end + + def test_cancelling_force_delete_bypasses_validation + @domain = domains(:invalid) + @domain.schedule_force_delete + @domain.cancel_force_delete + assert_not @domain.force_delete_scheduled? + end +end