diff --git a/app/models/concerns/domain/registry_lockable.rb b/app/models/concerns/domain/registry_lockable.rb index 2e80b7dda..2c0f5c0fe 100644 --- a/app/models/concerns/domain/registry_lockable.rb +++ b/app/models/concerns/domain/registry_lockable.rb @@ -1,14 +1,16 @@ module Domain::RegistryLockable extend ActiveSupport::Concern + LOCK_STATUSES = [DomainStatus::SERVER_UPDATE_PROHIBITED, + DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze + def apply_registry_lock return unless registry_lockable? return if locked_by_registrant? transaction do - statuses << DomainStatus::SERVER_UPDATE_PROHIBITED - statuses << DomainStatus::SERVER_DELETE_PROHIBITED - statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED + self.statuses |= LOCK_STATUSES self.locked_by_registrant_at = Time.zone.now alert_registrar_lock_changes!(lock: true) @@ -26,20 +28,16 @@ module Domain::RegistryLockable def locked_by_registrant? return false unless locked_by_registrant_at - lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED, - DomainStatus::SERVER_DELETE_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED] - - (statuses & lock_statuses).count == 3 + (statuses & LOCK_STATUSES).count == 3 end def remove_registry_lock return unless locked_by_registrant? transaction do - statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) + LOCK_STATUSES.each do |domain_status| + statuses.delete(domain_status) + end self.locked_by_registrant_at = nil alert_registrar_lock_changes!(lock: false) diff --git a/test/models/domain/registry_lockable_test.rb b/test/models/domain/registry_lockable_test.rb index cadef69d2..6e4a1826c 100644 --- a/test/models/domain/registry_lockable_test.rb +++ b/test/models/domain/registry_lockable_test.rb @@ -7,6 +7,32 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase @domain = domains(:airport) end + def test_user_can_set_lock_for_domain_if_it_has_any_prohibited_status + refute(@domain.locked_by_registrant?) + @domain.update(statuses: [DomainStatus::SERVER_TRANSFER_PROHIBITED]) + + @domain.apply_registry_lock #Raise validation error + + check_statuses_lockable_domain + assert(@domain.locked_by_registrant?) + end + + def test_lockable_domain_if_remove_some_prohibited_status + refute(@domain.locked_by_registrant?) + @domain.apply_registry_lock + check_statuses_lockable_domain + assert(@domain.locked_by_registrant?) + + statuses = @domain.statuses - [DomainStatus::SERVER_UPDATE_PROHIBITED] + @domain.update(statuses: statuses) + + 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 + def test_registry_lock_on_lockable_domain refute(@domain.locked_by_registrant?) @domain.apply_registry_lock @@ -69,4 +95,14 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase refute(@domain.remove_registry_lock) end + + private + + def check_statuses_lockable_domain + lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED, + DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED] + + @domain.statuses.include? lock_statuses + end end