From 3dd17f83f36fd2813304e69dc4a2a473b302a7f6 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 8 Apr 2018 22:55:53 +0300 Subject: [PATCH 01/11] Remove unneeded attribute alias #791 --- app/models/concerns/domain/force_delete.rb | 4 ---- app/presenters/domain_presenter.rb | 2 +- app/views/admin/domains/partials/_general.html.erb | 4 ++-- config/locales/admin/domains.en.yml | 1 - spec/models/concerns/domain/force_delete_spec.rb | 2 -- spec/presenters/domain_presenter_spec.rb | 4 ++-- 6 files changed, 5 insertions(+), 12 deletions(-) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index 96f1a94b3..30dc1b1ec 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -1,10 +1,6 @@ module Concerns::Domain::ForceDelete extend ActiveSupport::Concern - included do - alias_attribute :force_delete_time, :force_delete_at - end - def force_delete_scheduled? statuses.include?(DomainStatus::FORCE_DELETE) end diff --git a/app/presenters/domain_presenter.rb b/app/presenters/domain_presenter.rb index 9597330b8..cf117a1fb 100644 --- a/app/presenters/domain_presenter.rb +++ b/app/presenters/domain_presenter.rb @@ -23,7 +23,7 @@ class DomainPresenter end def force_delete_date - view.l(domain.force_delete_time, format: :date) if domain.force_delete_time + view.l(domain.force_delete_at, format: :date) if domain.force_delete_at end def admin_contact_names diff --git a/app/views/admin/domains/partials/_general.html.erb b/app/views/admin/domains/partials/_general.html.erb index eeeef6eb5..0c2da7bbd 100644 --- a/app/views/admin/domains/partials/_general.html.erb +++ b/app/views/admin/domains/partials/_general.html.erb @@ -34,8 +34,8 @@
<%= t('.delete_time') %>
<%= l(@domain.delete_at) %>
-
<%= t('.force_delete_time') %>
-
<%= l(@domain.force_delete_at) %>
+
<%= Domain.human_attribute_name :force_delete_at %>
+
<%= l @domain.force_delete_at %>
diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index 200657d01..8d66347ae 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -29,7 +29,6 @@ en: general: outzone_time: Outzone time delete_time: Delete time - force_delete_time: Force delete time admin_contacts: title: Admin. contacts diff --git a/spec/models/concerns/domain/force_delete_spec.rb b/spec/models/concerns/domain/force_delete_spec.rb index cc022a6d7..8a82faa8e 100644 --- a/spec/models/concerns/domain/force_delete_spec.rb +++ b/spec/models/concerns/domain/force_delete_spec.rb @@ -1,8 +1,6 @@ require 'rails_helper' RSpec.describe Domain do - it { is_expected.to alias_attribute(:force_delete_time, :force_delete_at) } - before :example do create(:zone, origin: 'ee') end diff --git a/spec/presenters/domain_presenter_spec.rb b/spec/presenters/domain_presenter_spec.rb index 3726960b4..c83ca58ca 100644 --- a/spec/presenters/domain_presenter_spec.rb +++ b/spec/presenters/domain_presenter_spec.rb @@ -63,7 +63,7 @@ RSpec.describe DomainPresenter do subject(:force_delete_date) { presenter.force_delete_date } context 'when present' do - let(:domain) { instance_double(Domain, force_delete_time: '05.07.2010') } + let(:domain) { instance_double(Domain, force_delete_at: '05.07.2010') } it 'returns localized date' do expect(view).to receive(:l).with('05.07.2010', format: :date).and_return('delete date') @@ -72,7 +72,7 @@ RSpec.describe DomainPresenter do end context 'when absent' do - let(:domain) { instance_double(Domain, force_delete_time: nil) } + let(:domain) { instance_double(Domain, force_delete_at: nil) } specify { expect(force_delete_date).to be_nil } end From be8ce276c71a6b2ec2736bef23cb17582a13b940 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sat, 21 Apr 2018 23:27:09 +0300 Subject: [PATCH 02/11] Refactor domain "force delete" operation #791 --- app/models/concerns/domain/force_delete.rb | 45 ++++---- .../concerns/domain/force_delete_spec.rb | 100 ------------------ test/models/domain/force_delete_test.rb | 40 +++++++ 3 files changed, 61 insertions(+), 124 deletions(-) delete mode 100644 spec/models/concerns/domain/force_delete_spec.rb create mode 100644 test/models/domain/force_delete_test.rb 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 From ed6f067a8d861f130fc74b90eab2970f054cbef8 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 22 Apr 2018 16:14:17 +0300 Subject: [PATCH 03/11] Require a domain to be discarded before cancelling force delete #791 --- app/models/concerns/domain/force_delete.rb | 2 ++ test/models/domain/force_delete_test.rb | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index ec5c651be..bf67a33f2 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -23,6 +23,8 @@ module Concerns::Domain::ForceDelete end def cancel_force_delete + raise 'Domain must be discarded before cancelling force delete procedure' unless discarded? + statuses.delete(DomainStatus::FORCE_DELETE) statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 27b792fe7..328a45658 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -11,6 +11,7 @@ class DomainForceDeleteTest < ActiveSupport::TestCase travel_to Time.zone.parse('2010-07-05 00:00') @domain.schedule_force_delete + @domain.reload assert @domain.force_delete_scheduled? assert_equal Time.zone.parse('2010-08-04 03:00'), @domain.force_delete_at @@ -25,14 +26,25 @@ class DomainForceDeleteTest < ActiveSupport::TestCase assert @domain.force_delete_scheduled? end - def test_cancel_force_delete + def test_cancelling_force_delete_on_discarded_domain + @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 + end + end + 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? From 615eb0557cbde0dc654976a4652cd9243519ff97 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 22 Apr 2018 19:15:45 +0300 Subject: [PATCH 04/11] Rename column #791 --- ...omains_statuses_backup_to_statuses_before_force_delete.rb | 5 +++++ db/structure.sql | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20180422154642_rename_domains_statuses_backup_to_statuses_before_force_delete.rb diff --git a/db/migrate/20180422154642_rename_domains_statuses_backup_to_statuses_before_force_delete.rb b/db/migrate/20180422154642_rename_domains_statuses_backup_to_statuses_before_force_delete.rb new file mode 100644 index 000000000..a6784f02e --- /dev/null +++ b/db/migrate/20180422154642_rename_domains_statuses_backup_to_statuses_before_force_delete.rb @@ -0,0 +1,5 @@ +class RenameDomainsStatusesBackupToStatusesBeforeForceDelete < ActiveRecord::Migration + def change + rename_column :domains, :statuses_backup, :statuses_before_force_delete + end +end diff --git a/db/structure.sql b/db/structure.sql index 744ea9e19..c319b8e28 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -895,7 +895,7 @@ CREATE TABLE domains ( statuses character varying[], reserved boolean DEFAULT false, status_notes hstore, - statuses_backup character varying[] DEFAULT '{}'::character varying[], + statuses_before_force_delete character varying[] DEFAULT '{}'::character varying[], upid integer, up_date timestamp without time zone ); @@ -4716,3 +4716,5 @@ INSERT INTO schema_migrations (version) VALUES ('20180327151906'); INSERT INTO schema_migrations (version) VALUES ('20180331200125'); +INSERT INTO schema_migrations (version) VALUES ('20180422154642'); + From 3ee49cdae903178a08af7515913e07662f45bde1 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 23 Apr 2018 02:30:29 +0300 Subject: [PATCH 05/11] Add tests #791 --- app/models/concerns/domain/force_delete.rb | 51 ++++++++++------ test/models/domain/force_delete_test.rb | 69 +++++++++++++++++++++- 2 files changed, 102 insertions(+), 18 deletions(-) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index bf67a33f2..c7b3ef454 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -6,16 +6,8 @@ module Concerns::Domain::ForceDelete end def schedule_force_delete - statuses << DomainStatus::FORCE_DELETE - statuses << DomainStatus::SERVER_RENEW_PROHIBITED - statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED - statuses << DomainStatus::SERVER_UPDATE_PROHIBITED - statuses << DomainStatus::PENDING_DELETE - - if (statuses & [DomainStatus::SERVER_HOLD, DomainStatus::CLIENT_HOLD]).empty? - statuses << DomainStatus::SERVER_MANUAL_INZONE - 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 .beginning_of_day stop_all_pending_actions @@ -25,13 +17,8 @@ module Concerns::Domain::ForceDelete def cancel_force_delete raise 'Domain must be discarded before cancelling force delete procedure' unless discarded? - 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) - + restore_statuses_before_force_delete + remove_force_delete_statuses self.force_delete_at = nil save(validate: false) end @@ -46,4 +33,34 @@ module Concerns::Domain::ForceDelete statuses.delete(DomainStatus::PENDING_RENEW) statuses.delete(DomainStatus::PENDING_CREATE) end + + def preserve_current_statuses_for_force_delete + self.statuses_before_force_delete = statuses + end + + def restore_statuses_before_force_delete + self.statuses = statuses_before_force_delete + self.statuses_before_force_delete = nil + end + + def add_force_delete_statuses + statuses << DomainStatus::FORCE_DELETE + statuses << DomainStatus::SERVER_RENEW_PROHIBITED + statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED + statuses << DomainStatus::SERVER_UPDATE_PROHIBITED + statuses << DomainStatus::PENDING_DELETE + + if (statuses & [DomainStatus::SERVER_HOLD, DomainStatus::CLIENT_HOLD]).empty? + statuses << DomainStatus::SERVER_MANUAL_INZONE + end + end + + def remove_force_delete_statuses + 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) + end end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 328a45658..058a49bfb 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -20,13 +20,50 @@ class DomainForceDeleteTest < ActiveSupport::TestCase Setting.redemption_grace_period = @original_redemption_grace_period end + def test_scheduling_force_delete_adds_corresponding_statuses + statuses = [ + DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::SERVER_UPDATE_PROHIBITED, + DomainStatus::PENDING_DELETE, + ] + + @domain.schedule_force_delete + @domain.reload + assert (@domain.statuses & statuses) == statuses + end + + def test_scheduling_force_delete_stops_pending_actions + statuses = [ + DomainStatus::CLIENT_DELETE_PROHIBITED, + DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::PENDING_UPDATE, + DomainStatus::PENDING_TRANSFER, + DomainStatus::PENDING_RENEW, + DomainStatus::PENDING_CREATE, + ] + + @domain.statuses = statuses + %w[other-status] + @domain.schedule_force_delete + @domain.reload + assert_not (@domain.statuses & statuses).any?, 'Pending actions should be stopped' + end + + def test_scheduling_force_delete_preserves_current_statuses + @domain.statuses = %w[test1 test2] + @domain.schedule_force_delete + @domain.reload + assert_equal %w[test1 test2], @domain.statuses_before_force_delete + end + def test_scheduling_force_delete_bypasses_validation @domain = domains(:invalid) @domain.schedule_force_delete assert @domain.force_delete_scheduled? end - def test_cancelling_force_delete_on_discarded_domain + def test_cancelling_force_delete_on_a_discarded_domain @domain.discard @domain.schedule_force_delete @domain.cancel_force_delete @@ -49,4 +86,34 @@ class DomainForceDeleteTest < ActiveSupport::TestCase @domain.cancel_force_delete assert_not @domain.force_delete_scheduled? end + + def test_cancelling_force_delete_removes_statuses_that_were_set_on_force_delete + statuses = [ + DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::SERVER_UPDATE_PROHIBITED, + DomainStatus::PENDING_DELETE, + DomainStatus::SERVER_MANUAL_INZONE + ] + @domain.discard + @domain.statuses = @domain.statuses + statuses + @domain.schedule_force_delete + + @domain.cancel_force_delete + @domain.reload + + assert (@domain.statuses & statuses).empty? + 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 + @domain.reload + + assert_equal ['test1', DomainStatus::DELETE_CANDIDATE], @domain.statuses + assert_nil @domain.statuses_before_force_delete + end end From 304b04bd61d592cfcfa20194c08fcd6b790a95c1 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 11 Jun 2018 06:19:33 +0300 Subject: [PATCH 06/11] Remove `domains.statuses_before_force_delete` from REST API --- app/models/domain.rb | 1 + doc/repp/v1/domain.md | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 55596aedf..ebe7e93d2 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -639,6 +639,7 @@ class Domain < ActiveRecord::Base hash = super hash['auth_info'] = hash.delete('transfer_code') # API v1 requirement hash['valid_from'] = hash['registered_at'] # API v1 requirement + hash.delete('statuses_before_force_delete') hash end diff --git a/doc/repp/v1/domain.md b/doc/repp/v1/domain.md index adb9c4c8e..4c9476125 100644 --- a/doc/repp/v1/domain.md +++ b/doc/repp/v1/domain.md @@ -63,10 +63,7 @@ Content-Type: application/json ], "reserved": false, "status_notes": { - }, - "statuses_backup": [ - - ] + } } ], "total_number_of_records": 2 From 4e2bd9f2dabbece172c511db506217d1de34e080 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 11 Jun 2018 08:10:32 +0300 Subject: [PATCH 07/11] Improve readability --- test/models/domain/force_delete_test.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 058a49bfb..c04244052 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -21,7 +21,7 @@ class DomainForceDeleteTest < ActiveSupport::TestCase end def test_scheduling_force_delete_adds_corresponding_statuses - statuses = [ + statuses_to_be_added = [ DomainStatus::FORCE_DELETE, DomainStatus::SERVER_RENEW_PROHIBITED, DomainStatus::SERVER_TRANSFER_PROHIBITED, @@ -31,11 +31,11 @@ class DomainForceDeleteTest < ActiveSupport::TestCase @domain.schedule_force_delete @domain.reload - assert (@domain.statuses & statuses) == statuses + assert (@domain.statuses & statuses_to_be_added) == statuses_to_be_added end def test_scheduling_force_delete_stops_pending_actions - statuses = [ + statuses_to_be_removed = [ DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED, DomainStatus::PENDING_UPDATE, @@ -44,10 +44,10 @@ class DomainForceDeleteTest < ActiveSupport::TestCase DomainStatus::PENDING_CREATE, ] - @domain.statuses = statuses + %w[other-status] + @domain.statuses = statuses_to_be_removed + %w[other-status] @domain.schedule_force_delete @domain.reload - assert_not (@domain.statuses & statuses).any?, 'Pending actions should be stopped' + assert_empty @domain.statuses & statuses_to_be_removed, 'Pending actions should be stopped' end def test_scheduling_force_delete_preserves_current_statuses @@ -103,7 +103,7 @@ class DomainForceDeleteTest < ActiveSupport::TestCase @domain.cancel_force_delete @domain.reload - assert (@domain.statuses & statuses).empty? + assert_empty @domain.statuses & statuses end def test_cancelling_force_delete_restores_statuses_that_a_domain_had_before_force_delete From c2d5b7c7040b1ab6c7eafb1bef107fb5807508bb Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 11 Jun 2018 08:26:17 +0300 Subject: [PATCH 08/11] Extract method --- app/models/concerns/domain/force_delete.rb | 8 ++++++-- test/models/domain/force_delete_test.rb | 12 +++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index c7b3ef454..45f45dab6 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -11,6 +11,7 @@ module Concerns::Domain::ForceDelete self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc .beginning_of_day stop_all_pending_actions + allow_deletion save(validate: false) end @@ -26,8 +27,6 @@ module Concerns::Domain::ForceDelete 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) @@ -63,4 +62,9 @@ module Concerns::Domain::ForceDelete statuses.delete(DomainStatus::PENDING_DELETE) statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) end + + def allow_deletion + statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) + end end diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index c04244052..535ad84d8 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -34,10 +34,20 @@ class DomainForceDeleteTest < ActiveSupport::TestCase assert (@domain.statuses & statuses_to_be_added) == statuses_to_be_added end - def test_scheduling_force_delete_stops_pending_actions + def test_scheduling_force_delete_allows_domain_deletion statuses_to_be_removed = [ DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED, + ] + + @domain.statuses = statuses_to_be_removed + %w[other-status] + @domain.schedule_force_delete + @domain.reload + assert_empty @domain.statuses & statuses_to_be_removed + end + + def test_scheduling_force_delete_stops_pending_actions + statuses_to_be_removed = [ DomainStatus::PENDING_UPDATE, DomainStatus::PENDING_TRANSFER, DomainStatus::PENDING_RENEW, From cd6a40b1bb637bfde9ef3ca3cb39920387d606f2 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Fri, 15 Jun 2018 17:10:06 +0300 Subject: [PATCH 09/11] Fix test --- test/integration/admin/domains/force_delete_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/admin/domains/force_delete_test.rb b/test/integration/admin/domains/force_delete_test.rb index 0ef017c11..df95307b4 100644 --- a/test/integration/admin/domains/force_delete_test.rb +++ b/test/integration/admin/domains/force_delete_test.rb @@ -44,8 +44,8 @@ class AdminAreaDomainForceDeleteTest < ActionDispatch::IntegrationTest end def test_cancels_scheduled_domain_force_delete - @domain.update_attribute(:statuses, [DomainStatus::FORCE_DELETE]) - assert @domain.force_delete_scheduled? + @domain.discard + @domain.schedule_force_delete visit edit_admin_domain_url(@domain) click_link_or_button 'Cancel force delete' From 7d405459668e9f1631b25451f6d8c5ffd54b703a Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Thu, 21 Jun 2018 17:56:24 +0300 Subject: [PATCH 10/11] Reformat --- db/structure.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/structure.sql b/db/structure.sql index a6f0355a4..39c5eb043 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -3259,7 +3259,7 @@ ALTER TABLE ONLY settings -- --- Name: uniq_contact_uuid; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- Name: uniq_contact_uuid; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: -- ALTER TABLE ONLY contacts @@ -3267,7 +3267,7 @@ ALTER TABLE ONLY contacts -- --- Name: uniq_domain_uuid; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- Name: uniq_domain_uuid; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: -- ALTER TABLE ONLY domains From e6d3895b7514b1bd40964f6bbd037b163861a897 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Thu, 19 Jul 2018 10:32:06 +0300 Subject: [PATCH 11/11] Fix typo in assertions filename --- test/support/{rails5_assetions.rb => rails5_assertions.rb} | 0 test/test_helper.rb | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename test/support/{rails5_assetions.rb => rails5_assertions.rb} (100%) diff --git a/test/support/rails5_assetions.rb b/test/support/rails5_assertions.rb similarity index 100% rename from test/support/rails5_assetions.rb rename to test/support/rails5_assertions.rb diff --git a/test/test_helper.rb b/test/test_helper.rb index 500861f75..56a4a7aeb 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,7 +11,7 @@ require 'minitest/mock' require 'capybara/rails' require 'capybara/minitest' require 'webmock/minitest' -require 'support/rails5_assetions' # Remove once upgraded to Rails 5 +require 'support/rails5_assertions' # Remove once upgraded to Rails 5 require 'application_system_test_case'