From 3b22406428cd3e2ead0f1798162e6bba7848b5ce Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 14 May 2021 12:17:43 +0300 Subject: [PATCH 1/3] added feature permission for release if domain has status server-release-prohibited --- app/models/concerns/domain/releasable.rb | 2 ++ app/models/domain_status.rb | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/domain/releasable.rb b/app/models/concerns/domain/releasable.rb index 81410329b..27feece5c 100644 --- a/app/models/concerns/domain/releasable.rb +++ b/app/models/concerns/domain/releasable.rb @@ -4,6 +4,8 @@ module Domain::Releasable class_methods do def release_domains releasable_domains.each do |domain| + return if domain.statuses.include? 'serverReleaseProhibited' + domain.release yield domain if block_given? end diff --git a/app/models/domain_status.rb b/app/models/domain_status.rb index 30161c076..6fcd759ab 100644 --- a/app/models/domain_status.rb +++ b/app/models/domain_status.rb @@ -4,6 +4,8 @@ class DomainStatus < ApplicationRecord include EppErrors belongs_to :domain + SERVER_RELEASE_PROHIBITED = 'serverReleaseProhibited' + # Requests to delete the object MUST be rejected. CLIENT_DELETE_PROHIBITED = 'clientDeleteProhibited' SERVER_DELETE_PROHIBITED = 'serverDeleteProhibited' @@ -81,7 +83,7 @@ class DomainStatus < ApplicationRecord INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_DELETE_CONFIRMATION, PENDING_RENEW, PENDING_TRANSFER, PENDING_UPDATE, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE, - DELETE_CANDIDATE, EXPIRED, DISPUTED + DELETE_CANDIDATE, EXPIRED, DISPUTED, SERVER_RELEASE_PROHIBITED ].freeze CLIENT_STATUSES = [ @@ -92,7 +94,7 @@ class DomainStatus < ApplicationRecord SERVER_STATUSES = [ SERVER_DELETE_PROHIBITED, SERVER_HOLD, SERVER_RENEW_PROHIBITED, SERVER_TRANSFER_PROHIBITED, SERVER_UPDATE_PROHIBITED, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, - SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED + SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, SERVER_RELEASE_PROHIBITED ].freeze UPDATE_PROHIBIT_STATES = [ @@ -157,7 +159,8 @@ class DomainStatus < ApplicationRecord ['AdminChangeProhibited', SERVER_ADMIN_CHANGE_PROHIBITED], ['TechChangeProhibited', SERVER_TECH_CHANGE_PROHIBITED], ['UpdateProhibited', SERVER_UPDATE_PROHIBITED], - ['DeleteProhibited', SERVER_DELETE_PROHIBITED] + ['DeleteProhibited', SERVER_DELETE_PROHIBITED], + ['ServerReleaseProhibited', SERVER_RELEASE_PROHIBITED], ] end From 9f1cf8f620416cb8ddaf9c523456ea3beadc1270 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 14 May 2021 12:41:49 +0300 Subject: [PATCH 2/3] limited delete prohibited opportunities --- app/models/concerns/domain/releasable.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/domain/releasable.rb b/app/models/concerns/domain/releasable.rb index 27feece5c..b859b8102 100644 --- a/app/models/concerns/domain/releasable.rb +++ b/app/models/concerns/domain/releasable.rb @@ -4,7 +4,6 @@ module Domain::Releasable class_methods do def release_domains releasable_domains.each do |domain| - return if domain.statuses.include? 'serverReleaseProhibited' domain.release yield domain if block_given? @@ -19,14 +18,14 @@ module Domain::Releasable ' AND ? != ALL(coalesce(statuses, array[]::varchar[]))', Time.zone.today, Time.zone.today, - DomainStatus::SERVER_DELETE_PROHIBITED) + DomainStatus::SERVER_RELEASE_PROHIBITED) else where('(delete_date <= ? OR force_delete_date <= ?)' \ ' AND ? != ALL(coalesce(statuses, array[]::varchar[])) AND' \ ' ? != ALL(COALESCE(statuses, array[]::varchar[]))', Time.zone.today, Time.zone.today, - DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::SERVER_RELEASE_PROHIBITED, DomainStatus::DELETE_CANDIDATE) end end From c22232ce07f980a33ddf59cfca95b1b4e9943e7c Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 14 May 2021 15:00:12 +0300 Subject: [PATCH 3/3] added tests --- app/models/concerns/domain/releasable.rb | 1 - app/models/domain_status.rb | 2 +- test/models/domain/releasable/auctionable_test.rb | 13 ++++++++++++- test/models/domain/releasable/discardable_test.rb | 12 +++++++++++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/models/concerns/domain/releasable.rb b/app/models/concerns/domain/releasable.rb index b859b8102..606a146bc 100644 --- a/app/models/concerns/domain/releasable.rb +++ b/app/models/concerns/domain/releasable.rb @@ -4,7 +4,6 @@ module Domain::Releasable class_methods do def release_domains releasable_domains.each do |domain| - domain.release yield domain if block_given? end diff --git a/app/models/domain_status.rb b/app/models/domain_status.rb index 6fcd759ab..6210da2fa 100644 --- a/app/models/domain_status.rb +++ b/app/models/domain_status.rb @@ -160,7 +160,7 @@ class DomainStatus < ApplicationRecord ['TechChangeProhibited', SERVER_TECH_CHANGE_PROHIBITED], ['UpdateProhibited', SERVER_UPDATE_PROHIBITED], ['DeleteProhibited', SERVER_DELETE_PROHIBITED], - ['ServerReleaseProhibited', SERVER_RELEASE_PROHIBITED], + ['ReleaseProhibited', SERVER_RELEASE_PROHIBITED], ] end diff --git a/test/models/domain/releasable/auctionable_test.rb b/test/models/domain/releasable/auctionable_test.rb index 97d66be4f..675ad3c8e 100644 --- a/test/models/domain/releasable/auctionable_test.rb +++ b/test/models/domain/releasable/auctionable_test.rb @@ -99,10 +99,21 @@ class DomainReleasableAuctionableTest < ActiveJob::TestCase assert_not @domain.domain_name.at_auction? end - def test_ignores_domains_with_server_delete_prohibited_status + def test_does_not_ignore_domains_with_server_delete_prohibited_status @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) travel_to Time.zone.parse('2010-07-05') + assert_changes 'Domain.count' do + Domain.release_domains + end + + assert @domain.domain_name.at_auction? + end + + def test_ignores_domains_with_server_release_prohibited_status + @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_RELEASE_PROHIBITED]) + travel_to Time.zone.parse('2010-07-05') + assert_no_difference 'Domain.count' do Domain.release_domains end diff --git a/test/models/domain/releasable/discardable_test.rb b/test/models/domain/releasable/discardable_test.rb index a5ff9309e..e8bc5364a 100644 --- a/test/models/domain/releasable/discardable_test.rb +++ b/test/models/domain/releasable/discardable_test.rb @@ -51,13 +51,23 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase end end - def test_ignores_domains_with_server_delete_prohibited_status + def test_does_not_ignore_domains_with_server_delete_prohibited_status @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) travel_to Time.zone.parse('2010-07-05') Domain.release_domains @domain.reload + assert @domain.discarded? + end + + def test_ignores_domains_with_server_release_prohibited_status + @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_RELEASE_PROHIBITED]) + travel_to Time.zone.parse('2010-07-05') + + Domain.release_domains + @domain.reload + assert_not @domain.discarded? end