Disallow scheduling "force delete" procedure on a discarded domain

This commit is contained in:
Artur Beljajev 2018-08-21 18:38:06 +03:00
parent ffd389790c
commit d65186dc29
5 changed files with 43 additions and 32 deletions

View file

@ -6,6 +6,10 @@ module Concerns::Domain::ForceDelete
end
def schedule_force_delete
if discarded?
raise StandardError, 'Force delete procedure cannot be scheduled while a domain is discarded'
end
preserve_current_statuses_for_force_delete
add_force_delete_statuses
self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc
@ -16,10 +20,6 @@ module Concerns::Domain::ForceDelete
end
def cancel_force_delete
if discarded?
raise StandardError, 'Force delete procedure cannot be cancelled while a domain is discarded'
end
restore_statuses_before_force_delete
remove_force_delete_statuses
self.force_delete_at = nil

View file

@ -50,30 +50,43 @@ class DomainPresenter
end
def force_delete_toggle_btn
if !domain.force_delete_scheduled?
view.content_tag(:a, view.t('admin.domains.force_delete_toggle_btn.schedule'),
class: 'btn btn-default',
data: {
toggle: 'modal',
target: '.domain-edit-force-delete-dialog',
}
)
elsif !domain.discarded?
view.link_to(view.t('admin.domains.force_delete_toggle_btn.cancel'),
view.admin_domain_force_delete_path(domain),
method: :delete,
data: { confirm: view.t('admin.domains.force_delete_toggle_btn.cancel_confirm') },
class: 'btn btn-primary')
return inactive_schedule_force_delete_btn if domain.discarded?
if domain.force_delete_scheduled?
cancel_force_delete_btn
else
view.content_tag(:button, view.t('admin.domains.force_delete_toggle_btn.cancel'),
class: 'btn btn-default ',
title: view.t('admin.domains.force_delete_toggle_btn.unable_to_cancel'),
disabled: true)
schedule_force_delete_btn
end
end
private
def schedule_force_delete_btn
view.content_tag(:a, view.t('admin.domains.force_delete_toggle_btn.schedule'),
class: 'btn btn-default',
data: {
toggle: 'modal',
target: '.domain-edit-force-delete-dialog',
})
end
def cancel_force_delete_btn
view.link_to view.t('admin.domains.force_delete_toggle_btn.cancel'),
view.admin_domain_force_delete_path(domain),
method: :delete,
data: {
confirm: view.t('admin.domains.force_delete_toggle_btn.cancel_confirm'),
},
class: 'btn btn-primary'
end
def inactive_schedule_force_delete_btn
view.content_tag :button, view.t('admin.domains.force_delete_toggle_btn.schedule'),
title: view.t('admin.domains.force_delete_toggle_btn.unable_to_schedule'),
disabled: true,
class: 'btn btn-default'
end
attr_reader :domain
attr_reader :view
end

View file

@ -45,7 +45,7 @@ en:
force_delete_toggle_btn:
schedule: Schedule force delete
unable_to_schedule: >
Force delete procedure cannot be scheduled while a domain has deleteCandidate status
cancel: Cancel force delete
cancel_confirm: Are you sure you want cancel force delete procedure?
unable_to_cancel: >
Force delete procedure cannot be cancelled while a domain has deleteCandidate status
cancel_confirm: Are you sure you want cancel force delete procedure?

View file

@ -73,11 +73,10 @@ class DomainForceDeleteTest < ActiveSupport::TestCase
assert @domain.force_delete_scheduled?
end
def test_force_delete_cannot_be_cancelled_when_a_domain_is_discarded
def test_force_delete_cannot_be_scheduled_when_a_domain_is_discarded
@domain.discard
@domain.schedule_force_delete
assert_raises StandardError do
@domain.cancel_force_delete
@domain.schedule_force_delete
end
end

View file

@ -55,12 +55,11 @@ class AdminAreaDomainForceDeleteTest < ApplicationSystemTestCase
assert_text 'Force delete procedure has been cancelled'
end
def test_force_delete_cannot_be_cancelled_when_a_domain_is_discarded
def test_force_delete_procedure_cannot_be_scheduled_on_a_discarded_domain
@domain.discard
@domain.schedule_force_delete
visit edit_admin_domain_url(@domain)
assert_no_button 'Cancel force delete'
assert_no_link 'Cancel force delete'
assert_no_button 'Schedule force delete'
assert_no_link 'Schedule force delete'
end
end