diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb index 4f84f7284..96c2348f2 100644 --- a/app/controllers/epp_controller.rb +++ b/app/controllers/epp_controller.rb @@ -135,6 +135,16 @@ class EppController < ApplicationController @errors += obj.errors[:epp_errors] end + if params[:parsed_frame].at_css('update') + @errors.each_with_index do |errors, index| + if errors[:code] == '2304' && + errors[:value][:val] == DomainStatus::SERVER_DELETE_PROHIBITED && + errors[:value][:obj] == 'status' + @errors[index][:value][:val] = DomainStatus::PENDING_UPDATE + end + end + end + # for debugging if @errors.blank? @errors << { diff --git a/spec/requests/epp/domain/update/status_spec.rb b/spec/requests/epp/domain/update/status_spec.rb new file mode 100644 index 000000000..1ef8d7900 --- /dev/null +++ b/spec/requests/epp/domain/update/status_spec.rb @@ -0,0 +1,37 @@ +require 'rails_helper' + +RSpec.describe 'EPP domain:update' do + let(:request) { post '/epp/command/update', frame: request_xml } + let(:request_xml) { <<-XML + + + + + + test.com + + + + + XML + } + + before :example do + sign_in_to_epp_area + end + + context 'when domain has both SERVER_DELETE_PROHIBITED and PENDING_UPDATE statuses' do + let!(:domain) { create(:domain, + name: 'test.com', + statuses: [DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::PENDING_UPDATE]) + } + + it 'returns PENDING_UPDATE as domain status' do + request + status = Nokogiri::XML(response.body).at_xpath('//domain:status', + domain: 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').content + expect(status).to eq(DomainStatus::PENDING_UPDATE) + end + end +end