diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index 2b708d66c..1295f558e 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -311,6 +311,7 @@ module Epp def status_editing_disabled return true if Setting.client_status_editing_enabled + return true if check_client_hold return true if params[:parsed_frame].css('status').empty? epp_errors << { code: '2306', @@ -318,6 +319,11 @@ module Epp } end + def check_client_hold + statuses = params[:parsed_frame].css('status').map { |element| element['s'] } + statuses == [::DomainStatus::CLIENT_HOLD] + end + def balance_ok?(operation, period = nil, unit = nil) @domain_pricelist = @domain.pricelist(operation, period.try(:to_i), unit) if @domain_pricelist.try(:price) # checking if price list is not found diff --git a/test/integration/epp/domain/update/base_test.rb b/test/integration/epp/domain/update/base_test.rb index 41c451373..3cdae2d52 100644 --- a/test/integration/epp/domain/update/base_test.rb +++ b/test/integration/epp/domain/update/base_test.rb @@ -303,6 +303,56 @@ class EppDomainUpdateBaseTest < EppTestCase assert @domain.inactive? end + def test_update_domain_allows_add_of_client_hold + request_xml = <<-XML + + + + + + shop.test + + Test + + + + + + XML + + post epp_update_path, params: { frame: request_xml }, + headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } + @domain.reload + assert_epp_response :completed_successfully + assert_includes(@domain.statuses, DomainStatus::CLIENT_HOLD) + end + + def test_update_domain_allows_remove_of_client_hold + @domain.update!(statuses: [DomainStatus::CLIENT_HOLD]) + + request_xml = <<-XML + + + + + + shop.test + + Test + + + + + + XML + + post epp_update_path, params: { frame: request_xml }, + headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } + @domain.reload + assert_epp_response :completed_successfully + assert_not_includes(@domain.statuses, DomainStatus::CLIENT_HOLD) + end + private def assert_verification_and_notification_emails