diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index 45f45dab6..406b67924 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -16,7 +16,9 @@ module Concerns::Domain::ForceDelete end def cancel_force_delete - raise 'Domain must be discarded before cancelling force delete procedure' unless discarded? + 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 diff --git a/app/presenters/domain_presenter.rb b/app/presenters/domain_presenter.rb index f83febba7..40cd50c41 100644 --- a/app/presenters/domain_presenter.rb +++ b/app/presenters/domain_presenter.rb @@ -58,12 +58,17 @@ class DomainPresenter target: '.domain-edit-force-delete-dialog', } ) - else + 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') + 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) end end diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index 415995f48..c569a22fa 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -47,3 +47,5 @@ en: schedule: Schedule force delete 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 diff --git a/test/integration/admin/domains/force_delete_test.rb b/test/integration/admin/domains/force_delete_test.rb index d48444fb9..387394429 100644 --- a/test/integration/admin/domains/force_delete_test.rb +++ b/test/integration/admin/domains/force_delete_test.rb @@ -44,7 +44,6 @@ class AdminAreaDomainForceDeleteTest < ActionDispatch::IntegrationTest end def test_cancels_scheduled_domain_force_delete - @domain.discard @domain.schedule_force_delete visit edit_admin_domain_url(@domain) @@ -55,4 +54,13 @@ class AdminAreaDomainForceDeleteTest < ActionDispatch::IntegrationTest assert_current_path edit_admin_domain_path(@domain) assert_text 'Force delete procedure has been cancelled' end -end + + def test_force_delete_cannot_be_cancelled_when_a_domain_is_discarded + @domain.discard + @domain.schedule_force_delete + + visit edit_admin_domain_url(@domain) + assert_no_button 'Cancel force delete' + assert_no_link 'Cancel force delete' + end +end \ No newline at end of file diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 535ad84d8..c353cc582 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -73,16 +73,8 @@ class DomainForceDeleteTest < ActiveSupport::TestCase assert @domain.force_delete_scheduled? end - def test_cancelling_force_delete_on_a_discarded_domain + def test_force_delete_cannot_be_cancelled_when_a_domain_is_discarded @domain.discard - @domain.schedule_force_delete - @domain.cancel_force_delete - @domain.reload - assert_not @domain.force_delete_scheduled? - assert_nil @domain.force_delete_at - end - - def test_cancelling_force_delete_requires_a_domain_to_be_discarded @domain.schedule_force_delete assert_raises StandardError do @domain.cancel_force_delete @@ -91,7 +83,6 @@ class DomainForceDeleteTest < ActiveSupport::TestCase def test_cancelling_force_delete_bypasses_validation @domain = domains(:invalid) - @domain.discard @domain.schedule_force_delete @domain.cancel_force_delete assert_not @domain.force_delete_scheduled? @@ -106,7 +97,6 @@ class DomainForceDeleteTest < ActiveSupport::TestCase DomainStatus::PENDING_DELETE, DomainStatus::SERVER_MANUAL_INZONE ] - @domain.discard @domain.statuses = @domain.statuses + statuses @domain.schedule_force_delete @@ -117,7 +107,6 @@ class DomainForceDeleteTest < ActiveSupport::TestCase end def test_cancelling_force_delete_restores_statuses_that_a_domain_had_before_force_delete - @domain.discard @domain.statuses_before_force_delete = ['test1', DomainStatus::DELETE_CANDIDATE] @domain.cancel_force_delete