mirror of
https://github.com/internetee/registry.git
synced 2025-06-07 13:15:40 +02:00
Merge pull request #2083 from internetee/2080-implement-new-field-for-store-statuses-in-domain-model
added migration and new json field for store domain statuses history
This commit is contained in:
commit
f074d691b5
16 changed files with 282 additions and 25 deletions
|
@ -2,10 +2,12 @@ module Domains
|
||||||
module CancelForceDelete
|
module CancelForceDelete
|
||||||
class RemoveForceDeleteStatuses < Base
|
class RemoveForceDeleteStatuses < Base
|
||||||
def execute
|
def execute
|
||||||
domain.statuses.delete(DomainStatus::FORCE_DELETE)
|
domain_statuses = [DomainStatus::FORCE_DELETE,
|
||||||
domain.statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED)
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
domain.statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED)
|
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
||||||
domain.statuses.delete(DomainStatus::CLIENT_HOLD)
|
DomainStatus::CLIENT_HOLD]
|
||||||
|
rejected_statuses = domain.statuses.reject { |a| domain_statuses.include? a }
|
||||||
|
domain.statuses = rejected_statuses
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,9 @@ module Domains
|
||||||
module CancelForceDelete
|
module CancelForceDelete
|
||||||
class RestoreStatusesBeforeForceDelete < Base
|
class RestoreStatusesBeforeForceDelete < Base
|
||||||
def execute
|
def execute
|
||||||
domain.statuses = domain.statuses_before_force_delete || []
|
domain.statuses = domain.force_delete_domain_statuses_history || []
|
||||||
domain.statuses_before_force_delete = nil
|
domain.statuses_before_force_delete = nil
|
||||||
|
domain.force_delete_domain_statuses_history = nil
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,6 +6,7 @@ module Domains
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze
|
DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze
|
||||||
|
|
||||||
def execute
|
def execute
|
||||||
|
domain.force_delete_domain_statuses_history = domain.statuses
|
||||||
domain.statuses_before_force_delete = domain.statuses
|
domain.statuses_before_force_delete = domain.statuses
|
||||||
domain.statuses |= STATUSES_TO_SET
|
domain.statuses |= STATUSES_TO_SET
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
|
|
36
app/jobs/migrate_before_force_delete_statuses_job.rb
Normal file
36
app/jobs/migrate_before_force_delete_statuses_job.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
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|
|
||||||
|
migrate_data_to_statuses_history(domain)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def migrate_data_to_statuses_history(domain)
|
||||||
|
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
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
|
||||||
|
def logger
|
||||||
|
@logger ||= Logger.new(Rails.root.join('log', 'migrate_before_force_delete_statuses.log'))
|
||||||
|
end
|
||||||
|
end
|
36
app/jobs/migrate_statuses_to_domain_history_job.rb
Normal file
36
app/jobs/migrate_statuses_to_domain_history_job.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
class MigrateStatusesToDomainHistoryJob < ApplicationJob
|
||||||
|
def perform
|
||||||
|
logger.info 'Ran MigrateStatusesToDomainHistoryJob!'
|
||||||
|
|
||||||
|
domains = Domain.where(locked_by_registrant_at: 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|
|
||||||
|
migrate_data_to_admin_store_field(domain)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def migrate_data_to_admin_store_field(domain)
|
||||||
|
domain.update(admin_store_statuses_history: domain.statuses)
|
||||||
|
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
|
|
@ -1,6 +1,10 @@
|
||||||
module Domain::ForceDelete # rubocop:disable Metrics/ModuleLength
|
module Domain::ForceDelete
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
FORCE_DELETE_STATUSES = [DomainStatus::FORCE_DELETE,
|
||||||
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
|
DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze
|
||||||
|
|
||||||
included do
|
included do
|
||||||
store_accessor :force_delete_data,
|
store_accessor :force_delete_data,
|
||||||
:force_delete_type,
|
:force_delete_type,
|
||||||
|
|
|
@ -36,9 +36,10 @@ module Domain::RegistryLockable
|
||||||
|
|
||||||
transaction do
|
transaction do
|
||||||
LOCK_STATUSES.each do |domain_status|
|
LOCK_STATUSES.each do |domain_status|
|
||||||
statuses.delete(domain_status)
|
statuses.delete([domain_status])
|
||||||
end
|
end
|
||||||
self.locked_by_registrant_at = nil
|
self.locked_by_registrant_at = nil
|
||||||
|
self.statuses = admin_store_statuses_history || []
|
||||||
alert_registrar_lock_changes!(lock: false)
|
alert_registrar_lock_changes!(lock: false)
|
||||||
|
|
||||||
save!
|
save!
|
||||||
|
|
|
@ -22,6 +22,10 @@ class Domain < ApplicationRecord
|
||||||
alias_attribute :auth_info, :transfer_code # Old attribute name; for PaperTrail
|
alias_attribute :auth_info, :transfer_code # Old attribute name; for PaperTrail
|
||||||
alias_attribute :registered_at, :created_at
|
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: 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?
|
# TODO: most inputs should be trimmed before validatation, probably some global logic?
|
||||||
|
|
||||||
|
@ -549,8 +553,22 @@ class Domain < ApplicationRecord
|
||||||
statuses.include?(DomainStatus::FORCE_DELETE)
|
statuses.include?(DomainStatus::FORCE_DELETE)
|
||||||
end
|
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
|
# special handling for admin changing status
|
||||||
def admin_status_update(update)
|
def admin_status_update(update)
|
||||||
|
update_unless_locked_by_registrant(update)
|
||||||
|
|
||||||
|
update_not_by_locked_statuses(update)
|
||||||
# check for deleted status
|
# check for deleted status
|
||||||
statuses.each do |s|
|
statuses.each do |s|
|
||||||
unless update.include? s
|
unless update.include? s
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
class AddJsonStatusesHistoryFieldToDomain < ActiveRecord::Migration[6.1]
|
||||||
|
def change
|
||||||
|
add_column :domains, :json_statuses_history, :jsonb, if_not_exists: true
|
||||||
|
add_index :domains, :json_statuses_history, using: :gin
|
||||||
|
end
|
||||||
|
end
|
|
@ -933,7 +933,8 @@ CREATE TABLE public.domains (
|
||||||
uuid uuid DEFAULT public.gen_random_uuid() NOT NULL,
|
uuid uuid DEFAULT public.gen_random_uuid() NOT NULL,
|
||||||
locked_by_registrant_at timestamp without time zone,
|
locked_by_registrant_at timestamp without time zone,
|
||||||
force_delete_start 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);
|
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: -
|
-- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -5152,6 +5160,7 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||||
('20200917104213'),
|
('20200917104213'),
|
||||||
('20200921084356'),
|
('20200921084356'),
|
||||||
('20210215101019'),
|
('20210215101019'),
|
||||||
('20210616112332');
|
('20210616112332'),
|
||||||
|
('20210708131814');
|
||||||
|
|
||||||
|
|
||||||
|
|
10
lib/tasks/migrate_domain_statuses.rake
Normal file
10
lib/tasks/migrate_domain_statuses.rake
Normal file
|
@ -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
|
27
test/jobs/migrate_before_force_delete_statuses_job_test.rb
Normal file
27
test/jobs/migrate_before_force_delete_statuses_job_test.rb
Normal file
|
@ -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
|
22
test/jobs/migrate_statuses_to_domain_history_job_test.rb
Normal file
22
test/jobs/migrate_statuses_to_domain_history_job_test.rb
Normal file
|
@ -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
|
|
@ -12,6 +12,29 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
Truemail.configure.default_validation_type = @old_validation_type
|
Truemail.configure.default_validation_type = @old_validation_type
|
||||||
end
|
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_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
|
def test_schedules_force_delete_fast_track
|
||||||
assert_not @domain.force_delete_scheduled?
|
assert_not @domain.force_delete_scheduled?
|
||||||
travel_to Time.zone.parse('2010-07-05')
|
travel_to Time.zone.parse('2010-07-05')
|
||||||
|
@ -56,7 +79,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
statuses_to_be_added = [
|
statuses_to_be_added = [
|
||||||
DomainStatus::FORCE_DELETE,
|
DomainStatus::FORCE_DELETE,
|
||||||
DomainStatus::SERVER_RENEW_PROHIBITED,
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
]
|
]
|
||||||
|
|
||||||
@domain.schedule_force_delete(type: :soft)
|
@domain.schedule_force_delete(type: :soft)
|
||||||
|
@ -68,7 +91,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
statuses_to_be_added = [
|
statuses_to_be_added = [
|
||||||
DomainStatus::FORCE_DELETE,
|
DomainStatus::FORCE_DELETE,
|
||||||
DomainStatus::SERVER_RENEW_PROHIBITED,
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
]
|
]
|
||||||
|
|
||||||
@domain.schedule_force_delete(type: :fast_track)
|
@domain.schedule_force_delete(type: :fast_track)
|
||||||
|
@ -79,7 +102,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
def test_scheduling_force_delete_allows_domain_deletion
|
def test_scheduling_force_delete_allows_domain_deletion
|
||||||
statuses_to_be_removed = [
|
statuses_to_be_removed = [
|
||||||
DomainStatus::CLIENT_DELETE_PROHIBITED,
|
DomainStatus::CLIENT_DELETE_PROHIBITED,
|
||||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
]
|
]
|
||||||
|
|
||||||
@domain.statuses = statuses_to_be_removed + %w[other-status]
|
@domain.statuses = statuses_to_be_removed + %w[other-status]
|
||||||
|
@ -94,7 +117,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
DomainStatus::PENDING_UPDATE,
|
DomainStatus::PENDING_UPDATE,
|
||||||
DomainStatus::PENDING_TRANSFER,
|
DomainStatus::PENDING_TRANSFER,
|
||||||
DomainStatus::PENDING_RENEW,
|
DomainStatus::PENDING_RENEW,
|
||||||
DomainStatus::PENDING_CREATE,
|
DomainStatus::PENDING_CREATE
|
||||||
]
|
]
|
||||||
|
|
||||||
@domain.statuses = statuses_to_be_removed + %w[other-status]
|
@domain.statuses = statuses_to_be_removed + %w[other-status]
|
||||||
|
@ -122,7 +145,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
|
|
||||||
assert_not result.valid?
|
assert_not result.valid?
|
||||||
assert_not @domain.force_delete_scheduled?
|
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]
|
assert_equal message, result.errors.messages[:domain]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -149,9 +172,9 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
|
|
||||||
def test_force_delete_does_not_double_statuses
|
def test_force_delete_does_not_double_statuses
|
||||||
statuses = [
|
statuses = [
|
||||||
DomainStatus::FORCE_DELETE,
|
DomainStatus::FORCE_DELETE,
|
||||||
DomainStatus::SERVER_RENEW_PROHIBITED,
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
]
|
]
|
||||||
@domain.statuses = @domain.statuses + statuses
|
@domain.statuses = @domain.statuses + statuses
|
||||||
@domain.save!
|
@domain.save!
|
||||||
|
@ -177,8 +200,8 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
|
|
||||||
def test_cancelling_force_delete_keeps_previous_statuses
|
def test_cancelling_force_delete_keeps_previous_statuses
|
||||||
statuses = [
|
statuses = [
|
||||||
DomainStatus::SERVER_RENEW_PROHIBITED,
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
]
|
]
|
||||||
|
|
||||||
@domain.statuses = statuses
|
@domain.statuses = statuses
|
||||||
|
@ -479,7 +502,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
||||||
@bounced_mail.bounce_subtype = 'General'
|
@bounced_mail.bounce_subtype = 'General'
|
||||||
@bounced_mail.action = 'failed'
|
@bounced_mail.action = 'failed'
|
||||||
@bounced_mail.status = '5.1.1'
|
@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!
|
@bounced_mail.save!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,12 +11,62 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
refute(@domain.locked_by_registrant?)
|
refute(@domain.locked_by_registrant?)
|
||||||
@domain.update(statuses: [DomainStatus::SERVER_TRANSFER_PROHIBITED])
|
@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
|
check_statuses_lockable_domain
|
||||||
assert(@domain.locked_by_registrant?)
|
assert(@domain.locked_by_registrant?)
|
||||||
end
|
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
|
def test_lockable_domain_if_remove_some_prohibited_status
|
||||||
refute(@domain.locked_by_registrant?)
|
refute(@domain.locked_by_registrant?)
|
||||||
@domain.apply_registry_lock
|
@domain.apply_registry_lock
|
||||||
|
@ -74,7 +124,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
@domain.remove_registry_lock
|
@domain.remove_registry_lock
|
||||||
|
|
||||||
assert_equal(["ok"], @domain.statuses)
|
assert_equal(['ok'], @domain.statuses)
|
||||||
refute(@domain.locked_by_registrant?)
|
refute(@domain.locked_by_registrant?)
|
||||||
refute(@domain.locked_by_registrant_at)
|
refute(@domain.locked_by_registrant_at)
|
||||||
end
|
end
|
||||||
|
@ -100,8 +150,8 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
def check_statuses_lockable_domain
|
def check_statuses_lockable_domain
|
||||||
lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED,
|
lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED,
|
||||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
DomainStatus::SERVER_DELETE_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED]
|
DomainStatus::SERVER_TRANSFER_PROHIBITED]
|
||||||
|
|
||||||
@domain.statuses.include? lock_statuses
|
@domain.statuses.include? lock_statuses
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,6 +27,17 @@ class DomainTest < ActiveSupport::TestCase
|
||||||
assert domains(:invalid).invalid?
|
assert domains(:invalid).invalid?
|
||||||
end
|
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
|
# https://www.internet.ee/domeenid/ee-domeenireeglid#domeeninimede-registreerimine
|
||||||
def test_validates_name_format
|
def test_validates_name_format
|
||||||
assert_equal dns_zones(:one).origin, 'test'
|
assert_equal dns_zones(:one).origin, 'test'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue