diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb index ae419bf19..7f28961f6 100644 --- a/app/controllers/epp/contacts_controller.rb +++ b/app/controllers/epp/contacts_controller.rb @@ -1,6 +1,7 @@ class Epp::ContactsController < EppController before_action :find_contact, only: [:info, :update, :delete] before_action :find_password, only: [:info, :update, :delete] + helper_method :address_processing? def info authorize! :info, @contact, @password @@ -24,7 +25,7 @@ class Epp::ContactsController < EppController @contact.generate_code if @contact.save - if !Contact.address_processing? && address_given? + if !address_processing? && address_given? @response_code = 1100 @response_description = t('epp.contacts.completed_without_address') else @@ -44,7 +45,7 @@ class Epp::ContactsController < EppController frame = params[:parsed_frame] if @contact.update_attributes(frame, current_user) - if !Contact.address_processing? && address_given? + if !address_processing? && address_given? @response_code = 1100 @response_description = t('epp.contacts.completed_without_address') else @@ -125,7 +126,7 @@ class Epp::ContactsController < EppController 'postalInfo > addr > cc', ] - required_attributes.concat(address_attributes) if Contact.address_processing? + required_attributes.concat(address_attributes) if address_processing? requires(*required_attributes) ident = params[:parsed_frame].css('ident') @@ -202,4 +203,8 @@ class Epp::ContactsController < EppController def address_given? params[:parsed_frame].css('postalInfo addr').size != 0 end + + def address_processing? + Contact.address_processing? + end end diff --git a/app/views/epp/contacts/info.xml.builder b/app/views/epp/contacts/info.xml.builder index fe851a6d9..068622203 100644 --- a/app/views/epp/contacts/info.xml.builder +++ b/app/views/epp/contacts/info.xml.builder @@ -5,7 +5,7 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:infData', 'xmlns:contact' => 'https://epp.tld.ee/schema/contact-eis-1.0.xsd') do + xml.tag!('contact:infData', 'xmlns:contact' => 'https://epp.tld.ee/schema/contact-ee-1.1.xsd') do xml.tag!('contact:id', @contact.code) xml.tag!('contact:roid', @contact.roid) @@ -17,22 +17,30 @@ xml.epp_head do xml.tag!('contact:name', @contact.name) if can? :view_full_info, @contact, @password xml.tag!('contact:org', @contact.org_name) if @contact.org_name.present? - xml.tag!('contact:addr') do - xml.tag!('contact:street', @contact.street) - xml.tag!('contact:city', @contact.city) - xml.tag!('contact:sp', @contact.state) - xml.tag!('contact:pc', @contact.zip) - xml.tag!('contact:cc', @contact.country_code) + + if address_processing? + xml.tag!('contact:addr') do + xml.tag!('contact:street', @contact.street) + xml.tag!('contact:city', @contact.city) + xml.tag!('contact:sp', @contact.state) + xml.tag!('contact:pc', @contact.zip) + xml.tag!('contact:cc', @contact.country_code) + end end + else xml.tag!('contact:org', 'No access') - xml.tag!('contact:addr') do - xml.tag!('contact:street', 'No access') - xml.tag!('contact:city', 'No access') - xml.tag!('contact:sp', 'No access') - xml.tag!('contact:pc', 'No access') - xml.tag!('contact:cc', 'No access') + + if address_processing? + xml.tag!('contact:addr') do + xml.tag!('contact:street', 'No access') + xml.tag!('contact:city', 'No access') + xml.tag!('contact:sp', 'No access') + xml.tag!('contact:pc', 'No access') + xml.tag!('contact:cc', 'No access') + end end + end end diff --git a/spec/requests/epp/contact/info_spec.rb b/spec/requests/epp/contact/info_spec.rb new file mode 100644 index 000000000..63fd75b32 --- /dev/null +++ b/spec/requests/epp/contact/info_spec.rb @@ -0,0 +1,57 @@ +require 'rails_helper' + +RSpec.describe 'EPP contact:update' do + let(:request_xml) { ' + + + + + test + + + + ' + } + subject(:response_xml) { Nokogiri::XML(response.body) } + subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } + subject(:address_count) { response_xml + .xpath('//contact:addr', contact: 'https://epp.tld.ee/schema/contact-ee-1.1.xsd') + .count } + + before do + sign_in_to_epp_area + FactoryGirl.create(:contact, code: 'TEST') + end + + context 'when address processing is enabled' do + before do + allow(Contact).to receive(:address_processing?).and_return(true) + end + + it 'returns epp code of 1000' do + post '/epp/command/info', frame: request_xml + expect(response_code).to eq('1000') + end + + it 'returns address' do + post '/epp/command/info', frame: request_xml + expect(address_count).to_not be_zero + end + end + + context 'when address processing is disabled' do + before do + allow(Contact).to receive(:address_processing?).and_return(false) + end + + it 'returns epp code of 1000' do + post '/epp/command/info', frame: request_xml + expect(response_code).to eq('1000') + end + + it 'does not return address' do + post '/epp/command/info', frame: request_xml + expect(address_count).to be_zero + end + end +end