From fb352fb718df4bfa168d320ae6861988fbc6ba9f Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Thu, 8 Jul 2021 16:20:13 +0300 Subject: [PATCH 1/8] added migration and new json field for store domain statuses history --- ...814_add_json_statuses_history_field_to_domain.rb | 6 ++++++ db/structure.sql | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb diff --git a/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb b/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb new file mode 100644 index 000000000..0f177683b --- /dev/null +++ b/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb @@ -0,0 +1,6 @@ +class AddJsonStatusesHistoryFieldToDomain < ActiveRecord::Migration[6.1] + def change + add_column :domains, :json_statuses_history, :jsonb + add_index :domains, :json_statuses_history, using: :gin + end +end diff --git a/db/structure.sql b/db/structure.sql index 481732b8a..54d740fa5 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -933,7 +933,8 @@ CREATE TABLE public.domains ( uuid uuid DEFAULT public.gen_random_uuid() NOT NULL, locked_by_registrant_at timestamp without time zone, force_delete_start timestamp without time zone, - force_delete_data public.hstore + force_delete_data public.hstore, + json_statuses_history jsonb ); @@ -3985,6 +3986,13 @@ CREATE INDEX index_domain_transfers_on_domain_id ON public.domain_transfers USIN CREATE INDEX index_domains_on_delete_date ON public.domains USING btree (delete_date); +-- +-- Name: index_domains_on_json_statuses_history; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_domains_on_json_statuses_history ON public.domains USING gin (json_statuses_history); + + -- -- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: - -- @@ -5152,6 +5160,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20200917104213'), ('20200921084356'), ('20210215101019'), -('20210616112332'); +('20210616112332'), +('20210708131814'); From d260eacc1a1fb6a8facb7bf66dda8d0163345eb0 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 9 Jul 2021 12:09:20 +0300 Subject: [PATCH 2/8] added tasks for migrate data and tests --- ...igrate_before_force_delete_statuses_job.rb | 9 +++++++ .../migrate_statuses_to_domain_history_job.rb | 9 +++++++ app/models/domain.rb | 4 +++ lib/tasks/migrate_domain_statuses.rake | 10 +++++++ ...e_before_force_delete_statuses_job_test.rb | 27 +++++++++++++++++++ ...ate_statuses_to_domain_history_job_test.rb | 22 +++++++++++++++ 6 files changed, 81 insertions(+) create mode 100644 app/jobs/migrate_before_force_delete_statuses_job.rb create mode 100644 app/jobs/migrate_statuses_to_domain_history_job.rb create mode 100644 lib/tasks/migrate_domain_statuses.rake create mode 100644 test/jobs/migrate_before_force_delete_statuses_job_test.rb create mode 100644 test/jobs/migrate_statuses_to_domain_history_job_test.rb diff --git a/app/jobs/migrate_before_force_delete_statuses_job.rb b/app/jobs/migrate_before_force_delete_statuses_job.rb new file mode 100644 index 000000000..ba34eae3b --- /dev/null +++ b/app/jobs/migrate_before_force_delete_statuses_job.rb @@ -0,0 +1,9 @@ +class MigrateBeforeForceDeleteStatusesJob < ApplicationJob + def perform + domains = Domain.where.not(statuses_before_force_delete: nil) + domains.each do |domain| + domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete + domain.save + end + end +end diff --git a/app/jobs/migrate_statuses_to_domain_history_job.rb b/app/jobs/migrate_statuses_to_domain_history_job.rb new file mode 100644 index 000000000..b5cc0a858 --- /dev/null +++ b/app/jobs/migrate_statuses_to_domain_history_job.rb @@ -0,0 +1,9 @@ +class MigrateStatusesToDomainHistoryJob < ApplicationJob + def perform + domains = Domain.all.select { |d| !d.locked_by_registrant? } + domains.each do |domain| + domain.admin_store_statuses_history = domain.statuses + domain.save + end + end +end diff --git a/app/models/domain.rb b/app/models/domain.rb index 5601167a2..519f33575 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -22,6 +22,10 @@ class Domain < ApplicationRecord alias_attribute :auth_info, :transfer_code # Old attribute name; for PaperTrail alias_attribute :registered_at, :created_at + store_accessor :json_statuses_history, + :force_delete_domain_statuses_history, + :admin_store_statuses_history + # TODO: whois requests ip whitelist for full info for own domains and partial info for other domains # TODO: most inputs should be trimmed before validatation, probably some global logic? diff --git a/lib/tasks/migrate_domain_statuses.rake b/lib/tasks/migrate_domain_statuses.rake new file mode 100644 index 000000000..8c68f9e70 --- /dev/null +++ b/lib/tasks/migrate_domain_statuses.rake @@ -0,0 +1,10 @@ +namespace :migrate_domain_statuses do + desc 'Starts collect invalid validation contacts' + task fd_domains: :environment do + MigrateBeforeForceDeleteStatusesJob.perform_later + end + + task admin_status_history: :environment do + MigrateStatusesToDomainHistoryJob.perform_later + end +end diff --git a/test/jobs/migrate_before_force_delete_statuses_job_test.rb b/test/jobs/migrate_before_force_delete_statuses_job_test.rb new file mode 100644 index 000000000..0288a686c --- /dev/null +++ b/test/jobs/migrate_before_force_delete_statuses_job_test.rb @@ -0,0 +1,27 @@ +require 'test_helper' + +class MigrateBeforeForceDeleteStatusesJobTest < ActiveJob::TestCase + setup do + travel_to Time.zone.parse('2010-07-05') + @domain = domains(:shop) + end + + def test_migrate_data_before_force_delete + @domain.update(statuses: [DomainStatus::SERVER_UPDATE_PROHIBITED]) + @domain.reload + assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED + + @domain.schedule_force_delete(type: :soft) + @domain.reload + + assert @domain.force_delete_scheduled? + + perform_enqueued_jobs do + MigrateBeforeForceDeleteStatusesJob.perform_later + end + + @domain.reload + + assert @domain.force_delete_domain_statuses_history.include? DomainStatus::SERVER_UPDATE_PROHIBITED + end +end diff --git a/test/jobs/migrate_statuses_to_domain_history_job_test.rb b/test/jobs/migrate_statuses_to_domain_history_job_test.rb new file mode 100644 index 000000000..dcacc327a --- /dev/null +++ b/test/jobs/migrate_statuses_to_domain_history_job_test.rb @@ -0,0 +1,22 @@ +require 'test_helper' + +class MigrateBeforeForceDeleteStatusesJobTest < ActiveJob::TestCase + setup do + travel_to Time.zone.parse('2010-07-05') + @domain = domains(:shop) + end + + def test_migrate_statuses_to_domain_history_job + @domain.update(statuses: [DomainStatus::SERVER_UPDATE_PROHIBITED]) + @domain.reload + assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED + + perform_enqueued_jobs do + MigrateStatusesToDomainHistoryJob.perform_later + end + + @domain.reload + + assert @domain.admin_store_statuses_history.include? DomainStatus::SERVER_UPDATE_PROHIBITED + end +end From 8063d538a637188abcdefd7abd80ca11be5f2789 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 9 Jul 2021 16:28:48 +0300 Subject: [PATCH 3/8] refactoring --- app/jobs/migrate_before_force_delete_statuses_job.rb | 8 +++++--- app/jobs/migrate_statuses_to_domain_history_job.rb | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/jobs/migrate_before_force_delete_statuses_job.rb b/app/jobs/migrate_before_force_delete_statuses_job.rb index ba34eae3b..d7f6c0606 100644 --- a/app/jobs/migrate_before_force_delete_statuses_job.rb +++ b/app/jobs/migrate_before_force_delete_statuses_job.rb @@ -1,9 +1,11 @@ class MigrateBeforeForceDeleteStatusesJob < ApplicationJob def perform domains = Domain.where.not(statuses_before_force_delete: nil) - domains.each do |domain| - domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete - domain.save + domains.find_in_batches do |domain_batches| + domain_batches.each do |domain| + domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete + domain.save + end end end end diff --git a/app/jobs/migrate_statuses_to_domain_history_job.rb b/app/jobs/migrate_statuses_to_domain_history_job.rb index b5cc0a858..870a9cf55 100644 --- a/app/jobs/migrate_statuses_to_domain_history_job.rb +++ b/app/jobs/migrate_statuses_to_domain_history_job.rb @@ -1,6 +1,6 @@ class MigrateStatusesToDomainHistoryJob < ApplicationJob def perform - domains = Domain.all.select { |d| !d.locked_by_registrant? } + domains = Domain.where(locked_by_registrant_at: nil) domains.each do |domain| domain.admin_store_statuses_history = domain.statuses domain.save From 0950361e0a03b7c62ac367bc8f27d984406f0986 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Tue, 13 Jul 2021 12:04:54 +0300 Subject: [PATCH 4/8] added stdout to log file --- ...igrate_before_force_delete_statuses_job.rb | 30 ++++++++++++++-- .../migrate_statuses_to_domain_history_job.rb | 34 +++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/app/jobs/migrate_before_force_delete_statuses_job.rb b/app/jobs/migrate_before_force_delete_statuses_job.rb index d7f6c0606..7161ecdd2 100644 --- a/app/jobs/migrate_before_force_delete_statuses_job.rb +++ b/app/jobs/migrate_before_force_delete_statuses_job.rb @@ -1,11 +1,37 @@ class MigrateBeforeForceDeleteStatusesJob < ApplicationJob def perform + logger.info 'Ran MigrateBeforeForceDeleteStatusesJob!' + domains = Domain.where.not(statuses_before_force_delete: nil) + logger.info "Total domains are #{domains.count}" + + interate_domain_in_batches(domains) + end + + private + + def interate_domain_in_batches(domains) + count = 0 + domains.find_in_batches do |domain_batches| + count += domain_batches.count + logger.info "Proccesing #{count} domains of #{domains.count}" domain_batches.each do |domain| - domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete - domain.save + migrate_data_to_statuses_history(domain) end end end + + def migrate_data_to_statuses_history(domain) + domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete + domain.save + rescue StandardError => e + logger.warn "#{domain.name} crashed!" + logger.warn e.to_s + raise e + end + + def logger + @logger ||= Logger.new(Rails.root.join('log', 'migrate_before_force_delete_statuses.log')) + end end diff --git a/app/jobs/migrate_statuses_to_domain_history_job.rb b/app/jobs/migrate_statuses_to_domain_history_job.rb index 870a9cf55..205ea1816 100644 --- a/app/jobs/migrate_statuses_to_domain_history_job.rb +++ b/app/jobs/migrate_statuses_to_domain_history_job.rb @@ -1,9 +1,37 @@ class MigrateStatusesToDomainHistoryJob < ApplicationJob def perform + logger.info 'Ran MigrateStatusesToDomainHistoryJob!' + domains = Domain.where(locked_by_registrant_at: nil) - domains.each do |domain| - domain.admin_store_statuses_history = domain.statuses - domain.save + logger.info "Total domains are #{domains.count}" + + interate_domain_in_batches(domains) + end + + private + + def interate_domain_in_batches(domains) + count = 0 + + domains.find_in_batches do |domain_batches| + count += domain_batches.count + logger.info "Proccesing #{count} domains of #{domains.count}" + domain_batches.each do |domain| + migrate_data_to_admin_store_field(domain) + end end end + + def migrate_data_to_admin_store_field(domain) + domain.admin_store_statuses_history = domain.statuses + domain.save + rescue StandardError => e + logger.warn "#{domain.name} crashed!" + logger.warn e.to_s + raise e + end + + def logger + @logger ||= Logger.new(Rails.root.join('log', 'migrate_statuses_to_domain_history.log')) + end end From ac9b6c23bf87a42de9ff62c233974a786a41aea7 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Tue, 13 Jul 2021 14:33:40 +0300 Subject: [PATCH 5/8] added if_not_exists method to migration --- .../20210708131814_add_json_statuses_history_field_to_domain.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb b/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb index 0f177683b..658cdb313 100644 --- a/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb +++ b/db/migrate/20210708131814_add_json_statuses_history_field_to_domain.rb @@ -1,6 +1,6 @@ class AddJsonStatusesHistoryFieldToDomain < ActiveRecord::Migration[6.1] def change - add_column :domains, :json_statuses_history, :jsonb + add_column :domains, :json_statuses_history, :jsonb, if_not_exists: true add_index :domains, :json_statuses_history, using: :gin end end From ec90722bf03e9f52943fa428be9e32d17d85fae5 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Tue, 13 Jul 2021 15:37:20 +0300 Subject: [PATCH 6/8] add update instead save --- app/jobs/migrate_before_force_delete_statuses_job.rb | 3 +-- app/jobs/migrate_statuses_to_domain_history_job.rb | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/jobs/migrate_before_force_delete_statuses_job.rb b/app/jobs/migrate_before_force_delete_statuses_job.rb index 7161ecdd2..f65538d50 100644 --- a/app/jobs/migrate_before_force_delete_statuses_job.rb +++ b/app/jobs/migrate_before_force_delete_statuses_job.rb @@ -23,8 +23,7 @@ class MigrateBeforeForceDeleteStatusesJob < ApplicationJob end def migrate_data_to_statuses_history(domain) - domain.force_delete_domain_statuses_history = domain.statuses_before_force_delete - domain.save + domain.update(force_delete_domain_statuses_history: domain.statuses_before_force_delete) rescue StandardError => e logger.warn "#{domain.name} crashed!" logger.warn e.to_s diff --git a/app/jobs/migrate_statuses_to_domain_history_job.rb b/app/jobs/migrate_statuses_to_domain_history_job.rb index 205ea1816..a1750c1e6 100644 --- a/app/jobs/migrate_statuses_to_domain_history_job.rb +++ b/app/jobs/migrate_statuses_to_domain_history_job.rb @@ -23,8 +23,7 @@ class MigrateStatusesToDomainHistoryJob < ApplicationJob end def migrate_data_to_admin_store_field(domain) - domain.admin_store_statuses_history = domain.statuses - domain.save + domain.update(admin_store_statuses_history: domain.statuses) rescue StandardError => e logger.warn "#{domain.name} crashed!" logger.warn e.to_s From 96bc237484b02608213339efa0a9849f59f62f0d Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Wed, 14 Jul 2021 11:16:56 +0300 Subject: [PATCH 7/8] implement mechanism of save statuses for force delete and lock --- .../remove_force_delete_statuses.rb | 10 ++-- .../restore_statuses_before_force_delete.rb | 3 +- .../domains/force_delete/prepare_domain.rb | 1 + app/models/concerns/domain/force_delete.rb | 6 +- .../concerns/domain/registry_lockable.rb | 3 +- app/models/domain.rb | 14 +++++ test/models/domain/force_delete_test.rb | 57 ++++++++++++++---- test/models/domain/registry_lockable_test.rb | 60 +++++++++++++++++-- test/models/domain_test.rb | 11 ++++ 9 files changed, 142 insertions(+), 23 deletions(-) diff --git a/app/interactions/domains/cancel_force_delete/remove_force_delete_statuses.rb b/app/interactions/domains/cancel_force_delete/remove_force_delete_statuses.rb index c77820ecf..adb310e51 100644 --- a/app/interactions/domains/cancel_force_delete/remove_force_delete_statuses.rb +++ b/app/interactions/domains/cancel_force_delete/remove_force_delete_statuses.rb @@ -2,10 +2,12 @@ module Domains module CancelForceDelete class RemoveForceDeleteStatuses < Base def execute - domain.statuses.delete(DomainStatus::FORCE_DELETE) - domain.statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) - domain.statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) - domain.statuses.delete(DomainStatus::CLIENT_HOLD) + domain_statuses = [DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::CLIENT_HOLD] + rejected_statuses = domain.statuses.reject { |a| domain_statuses.include? a } + domain.statuses = rejected_statuses domain.save(validate: false) end end diff --git a/app/interactions/domains/cancel_force_delete/restore_statuses_before_force_delete.rb b/app/interactions/domains/cancel_force_delete/restore_statuses_before_force_delete.rb index c55c06764..d521bfcba 100644 --- a/app/interactions/domains/cancel_force_delete/restore_statuses_before_force_delete.rb +++ b/app/interactions/domains/cancel_force_delete/restore_statuses_before_force_delete.rb @@ -2,8 +2,9 @@ module Domains module CancelForceDelete class RestoreStatusesBeforeForceDelete < Base def execute - domain.statuses = domain.statuses_before_force_delete + domain.statuses = domain.force_delete_domain_statuses_history || [] domain.statuses_before_force_delete = nil + domain.force_delete_domain_statuses_history = nil domain.save(validate: false) end end diff --git a/app/interactions/domains/force_delete/prepare_domain.rb b/app/interactions/domains/force_delete/prepare_domain.rb index 74eea21ed..e45f7969c 100644 --- a/app/interactions/domains/force_delete/prepare_domain.rb +++ b/app/interactions/domains/force_delete/prepare_domain.rb @@ -6,6 +6,7 @@ module Domains DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze def execute + domain.force_delete_domain_statuses_history = domain.statuses domain.statuses_before_force_delete = domain.statuses domain.statuses |= STATUSES_TO_SET domain.save(validate: false) diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index bc89022d0..b31b02eac 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -1,6 +1,10 @@ -module Domain::ForceDelete # rubocop:disable Metrics/ModuleLength +module Domain::ForceDelete extend ActiveSupport::Concern + FORCE_DELETE_STATUSES = [DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze + included do store_accessor :force_delete_data, :force_delete_type, diff --git a/app/models/concerns/domain/registry_lockable.rb b/app/models/concerns/domain/registry_lockable.rb index 2c0f5c0fe..4f9340aaf 100644 --- a/app/models/concerns/domain/registry_lockable.rb +++ b/app/models/concerns/domain/registry_lockable.rb @@ -36,9 +36,10 @@ module Domain::RegistryLockable transaction do LOCK_STATUSES.each do |domain_status| - statuses.delete(domain_status) + statuses.delete([domain_status]) end self.locked_by_registrant_at = nil + self.statuses = admin_store_statuses_history || [] alert_registrar_lock_changes!(lock: false) save! diff --git a/app/models/domain.rb b/app/models/domain.rb index 519f33575..b150b1f8b 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -553,8 +553,22 @@ class Domain < ApplicationRecord statuses.include?(DomainStatus::FORCE_DELETE) end + def update_unless_locked_by_registrant(update) + update(admin_store_statuses_history: update) unless locked_by_registrant? + end + + def update_not_by_locked_statuses(update) + return unless locked_by_registrant? + + result = update.reject { |status| RegistryLockable::LOCK_STATUSES.include? status } + update(admin_store_statuses_history: result) + end + # special handling for admin changing status def admin_status_update(update) + update_unless_locked_by_registrant(update) + + update_not_by_locked_statuses(update) # check for deleted status statuses.each do |s| unless update.include? s diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index 000694673..c9de86b5e 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -12,6 +12,41 @@ class ForceDeleteTest < ActionMailer::TestCase Truemail.configure.default_validation_type = @old_validation_type end + def test_restore_domain_statuses_after_soft_force_delete + @domain.update(statuses: [DomainStatus::SERVER_RENEW_PROHIBITED]) + @domain.schedule_force_delete(type: :soft) + + assert @domain.force_delete_scheduled? + + assert @domain.force_delete_domain_statuses_history.include? DomainStatus::SERVER_RENEW_PROHIBITED + + @domain.cancel_force_delete + assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED + end + + # def test_restore_domain_statuses_if_status_set_after_fc + # @domain.schedule_force_delete(type: :soft) + + # assert @domain.force_delete_scheduled? + + # @domain.update(statuses: [DomainStatus::SERVER_RENEW_PROHIBITED]) + # assert @domain.force_delete_domain_statuses_history.include? DomainStatus::SERVER_RENEW_PROHIBITED + + # @domain.cancel_force_delete + # assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED + # end + + def test_clear_force_delete_domain_statuses_history + @domain.update(statuses: [DomainStatus::SERVER_RENEW_PROHIBITED]) + @domain.schedule_force_delete(type: :soft) + + assert @domain.force_delete_scheduled? + assert @domain.force_delete_domain_statuses_history.include? DomainStatus::SERVER_RENEW_PROHIBITED + @domain.cancel_force_delete + + assert_nil @domain.force_delete_domain_statuses_history + end + def test_schedules_force_delete_fast_track assert_not @domain.force_delete_scheduled? travel_to Time.zone.parse('2010-07-05') @@ -56,7 +91,7 @@ class ForceDeleteTest < ActionMailer::TestCase statuses_to_be_added = [ DomainStatus::FORCE_DELETE, DomainStatus::SERVER_RENEW_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED ] @domain.schedule_force_delete(type: :soft) @@ -68,7 +103,7 @@ class ForceDeleteTest < ActionMailer::TestCase statuses_to_be_added = [ DomainStatus::FORCE_DELETE, DomainStatus::SERVER_RENEW_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED ] @domain.schedule_force_delete(type: :fast_track) @@ -79,7 +114,7 @@ class ForceDeleteTest < ActionMailer::TestCase def test_scheduling_force_delete_allows_domain_deletion statuses_to_be_removed = [ DomainStatus::CLIENT_DELETE_PROHIBITED, - DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::SERVER_DELETE_PROHIBITED ] @domain.statuses = statuses_to_be_removed + %w[other-status] @@ -94,7 +129,7 @@ class ForceDeleteTest < ActionMailer::TestCase DomainStatus::PENDING_UPDATE, DomainStatus::PENDING_TRANSFER, DomainStatus::PENDING_RENEW, - DomainStatus::PENDING_CREATE, + DomainStatus::PENDING_CREATE ] @domain.statuses = statuses_to_be_removed + %w[other-status] @@ -122,7 +157,7 @@ class ForceDeleteTest < ActionMailer::TestCase assert_not result.valid? assert_not @domain.force_delete_scheduled? - message = ["Force delete procedure cannot be scheduled while a domain is discarded"] + message = ['Force delete procedure cannot be scheduled while a domain is discarded'] assert_equal message, result.errors.messages[:domain] end @@ -149,9 +184,9 @@ class ForceDeleteTest < ActionMailer::TestCase def test_force_delete_does_not_double_statuses statuses = [ - DomainStatus::FORCE_DELETE, - DomainStatus::SERVER_RENEW_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED ] @domain.statuses = @domain.statuses + statuses @domain.save! @@ -177,8 +212,8 @@ class ForceDeleteTest < ActionMailer::TestCase def test_cancelling_force_delete_keeps_previous_statuses statuses = [ - DomainStatus::SERVER_RENEW_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED ] @domain.statuses = statuses @@ -479,7 +514,7 @@ class ForceDeleteTest < ActionMailer::TestCase @bounced_mail.bounce_subtype = 'General' @bounced_mail.action = 'failed' @bounced_mail.status = '5.1.1' - @bounced_mail.diagnostic = 'smtp; 550 5.1.1 user unknown' + @bounced_mail.diagnostic = 'smtp; 550 5.1.1 user unknown' @bounced_mail.save! end end diff --git a/test/models/domain/registry_lockable_test.rb b/test/models/domain/registry_lockable_test.rb index 6e4a1826c..c8ea69fd1 100644 --- a/test/models/domain/registry_lockable_test.rb +++ b/test/models/domain/registry_lockable_test.rb @@ -11,12 +11,62 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase refute(@domain.locked_by_registrant?) @domain.update(statuses: [DomainStatus::SERVER_TRANSFER_PROHIBITED]) - @domain.apply_registry_lock #Raise validation error + @domain.apply_registry_lock # Raise validation error check_statuses_lockable_domain assert(@domain.locked_by_registrant?) end + def test_remove_lockalable_statuses_after_admin_intervention + @domain.apply_registry_lock + assert @domain.locked_by_registrant? + assert_equal @domain.statuses.sort, Domain::RegistryLockable::LOCK_STATUSES.sort + + deleted_status = @domain.statuses - [DomainStatus::SERVER_DELETE_PROHIBITED] + @domain.update(statuses: deleted_status) + assert_not @domain.locked_by_registrant? + + @domain.apply_registry_lock + assert @domain.locked_by_registrant? + @domain.remove_registry_lock + + assert_not @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED + end + + def test_restore_domain_statuses_after_unlock + @domain.statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED] + @domain.admin_store_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED] + @domain.save + assert @domain.admin_store_statuses_history.include? DomainStatus::SERVER_UPDATE_PROHIBITED + + @domain.apply_registry_lock + assert @domain.locked_by_registrant? + assert_equal @domain.statuses.sort, Domain::RegistryLockable::LOCK_STATUSES.sort + + @domain.remove_registry_lock + assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED + end + + def test_add_additinal_status_for_locked_domain + @domain.apply_registry_lock + assert @domain.locked_by_registrant? + assert_equal @domain.statuses.sort, Domain::RegistryLockable::LOCK_STATUSES.sort + + @domain.statuses += [DomainStatus::SERVER_RENEW_PROHIBITED] + @domain.admin_store_statuses_history = [DomainStatus::SERVER_RENEW_PROHIBITED] + @domain.save + + @domain.remove_registry_lock + assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED + assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED + end + def test_lockable_domain_if_remove_some_prohibited_status refute(@domain.locked_by_registrant?) @domain.apply_registry_lock @@ -29,7 +79,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED assert_not @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED - + assert_not(@domain.locked_by_registrant?) end @@ -74,7 +124,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase @domain.remove_registry_lock - assert_equal(["ok"], @domain.statuses) + assert_equal(['ok'], @domain.statuses) refute(@domain.locked_by_registrant?) refute(@domain.locked_by_registrant_at) end @@ -100,8 +150,8 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase def check_statuses_lockable_domain lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED, - DomainStatus::SERVER_DELETE_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED] + DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED] @domain.statuses.include? lock_statuses end diff --git a/test/models/domain_test.rb b/test/models/domain_test.rb index 15ab8b0c2..57c370089 100644 --- a/test/models/domain_test.rb +++ b/test/models/domain_test.rb @@ -27,6 +27,17 @@ class DomainTest < ActiveSupport::TestCase assert domains(:invalid).invalid? end + def test_valid_domain_statuses_history + @domain.force_delete_domain_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED] + @domain.admin_store_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED] + assert @domain.valid? + + assert @domain.json_statuses_history['force_delete_domain_statuses_history'].include? 'serverUpdateProhibited' + assert @domain.json_statuses_history['force_delete_domain_statuses_history'].include? 'serverTransferProhibited' + assert_equal @domain.json_statuses_history['admin_store_statuses_history'], ['serverUpdateProhibited'] + end + # https://www.internet.ee/domeenid/ee-domeenireeglid#domeeninimede-registreerimine def test_validates_name_format assert_equal dns_zones(:one).origin, 'test' From 458609921f44b5264659b24ef441b5e7bf805a07 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Wed, 14 Jul 2021 12:49:47 +0300 Subject: [PATCH 8/8] remove comments --- test/models/domain/force_delete_test.rb | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/test/models/domain/force_delete_test.rb b/test/models/domain/force_delete_test.rb index c9de86b5e..73a6245de 100644 --- a/test/models/domain/force_delete_test.rb +++ b/test/models/domain/force_delete_test.rb @@ -24,18 +24,6 @@ class ForceDeleteTest < ActionMailer::TestCase assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED end - # def test_restore_domain_statuses_if_status_set_after_fc - # @domain.schedule_force_delete(type: :soft) - - # assert @domain.force_delete_scheduled? - - # @domain.update(statuses: [DomainStatus::SERVER_RENEW_PROHIBITED]) - # assert @domain.force_delete_domain_statuses_history.include? DomainStatus::SERVER_RENEW_PROHIBITED - - # @domain.cancel_force_delete - # assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED - # end - def test_clear_force_delete_domain_statuses_history @domain.update(statuses: [DomainStatus::SERVER_RENEW_PROHIBITED]) @domain.schedule_force_delete(type: :soft)