From d65186dc29a8689f27915db1d4ad1f0a5fca223b Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Tue, 21 Aug 2018 18:38:06 +0300 Subject: [PATCH] Disallow scheduling "force delete" procedure on a discarded domain --- app/models/concerns/domain/force_delete.rb | 8 +-- app/presenters/domain_presenter.rb | 49 ++++++++++++------- config/locales/admin/domains.en.yml | 6 +-- test/models/domain/force_delete_test.rb | 5 +- .../admin_area/domains/force_delete_test.rb | 7 ++- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index 406b67924..9f69316d7 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -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 diff --git a/app/presenters/domain_presenter.rb b/app/presenters/domain_presenter.rb index 40cd50c41..b82d4df3f 100644 --- a/app/presenters/domain_presenter.rb +++ b/app/presenters/domain_presenter.rb @@ -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 diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index c569a22fa..ed93eb647 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -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? \ 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 c353cc582..706af1ef0 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -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 diff --git a/test/system/admin_area/domains/force_delete_test.rb b/test/system/admin_area/domains/force_delete_test.rb index cc8292c48..22bb23d38 100644 --- a/test/system/admin_area/domains/force_delete_test.rb +++ b/test/system/admin_area/domains/force_delete_test.rb @@ -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 \ No newline at end of file