From 8f131c2fe40bc30ee4f1c2fadf741d62272749a2 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 30 Jun 2014 12:08:33 +0300 Subject: [PATCH] Domain checking for multiple domains --- app/helpers/epp/domains_helper.rb | 15 ++++---- app/models/domain.rb | 11 ++++++ app/views/epp/domains/check.xml.builder | 6 ++-- spec/epp/domain_spec.rb | 34 ++++++++++++++++++- spec/epp/requests/domains/check_multiple.xml | 7 ++++ .../domains/check_multiple_with_invalid.xml | 8 +++++ 6 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 spec/epp/requests/domains/check_multiple.xml create mode 100644 spec/epp/requests/domains/check_multiple_with_invalid.xml diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index 09d426b4a..00f1bbf19 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -1,21 +1,17 @@ module Epp::DomainsHelper def create_domain - domain = Domain.create!(domain_params) + domain = Domain.create!(domain_create_params) render '/epp/domains/create' end def check_domain - cp = command_params_for('check') - - @domain = cp[:name] - @avail = Domain.find_by(name: @domain) ? '0' : '1' - + @domains = Domain.check_availability(domain_check_params[:names]) render '/epp/domains/check' end ### HELPER METHODS ### - def domain_params + def domain_create_params cp = command_params_for('create') { name: cp[:name], @@ -26,4 +22,9 @@ module Epp::DomainsHelper auth_info: cp[:authInfo] } end + + def domain_check_params + node_set = parsed_frame.css('epp command check check name') + node_set.inject({names: []}){ |hash, obj| hash[:names] << obj.text; hash } + end end diff --git a/app/models/domain.rb b/app/models/domain.rb index 17eca90f6..d5133b8f1 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -4,4 +4,15 @@ class Domain < ActiveRecord::Base belongs_to :owner_contact, class_name: 'Contact' belongs_to :technical_contact, class_name: 'Contact' belongs_to :admin_contact, class_name: 'Contact' + + class << self + def check_availability(domains) + res = [] + domains.each do |x| + res << {name: x, avail: Domain.find_by(name: x) ? 0 : 1} + end + + res + end + end end diff --git a/app/views/epp/domains/check.xml.builder b/app/views/epp/domains/check.xml.builder index dad1f9646..5b1b8b31b 100644 --- a/app/views/epp/domains/check.xml.builder +++ b/app/views/epp/domains/check.xml.builder @@ -6,8 +6,10 @@ xml.epp_head do xml.resData do xml.tag!('domain:chkData', 'xmlns:domain' => 'http://www.nic.cz/xml/epp/domain-1.4', 'xsi:schemaLocation' => 'http://www.nic.cz/xml/epp/domain-1.4 domain-1.4.xsd') do - xml.tag!('domain:cd') do - xml.tag!('domain:name', @domain, 'avail' => @avail) + @domains.each do |x| + xml.tag!('domain:cd') do + xml.tag!('domain:name', x[:name], 'avail' => x[:avail]) + end end end end diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 2504e79c8..d3a6af87c 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -16,7 +16,7 @@ describe 'EPP Domain', epp: true do end # incomplete - it 'checks domain' do + it 'checks a domain' do response = epp_request('domains/check.xml') expect(response[:result_code]).to eq('1000') expect(response[:msg]).to eq('Command completed successfully') @@ -33,5 +33,37 @@ describe 'EPP Domain', epp: true do expect(domain[:avail]).to eq('0') end + it 'checks multiple domains' do + response = epp_request('domains/check_multiple.xml') + expect(response[:result_code]).to eq('1000') + expect(response[:msg]).to eq('Command completed successfully') + + domain = response[:parsed].css('resData chkData cd name').first + expect(domain.text).to eq('test.ee') + expect(domain[:avail]).to eq('1') + + domain = response[:parsed].css('resData chkData cd name').last + expect(domain.text).to eq('bla.ee') + expect(domain[:avail]).to eq('1') + end + + it 'checks invalid format domain' do + response = epp_request('domains/check_multiple_with_invalid.xml') + expect(response[:result_code]).to eq('1000') + expect(response[:msg]).to eq('Command completed successfully') + + domain = response[:parsed].css('resData chkData cd name').first + expect(domain.text).to eq('test.ee') + expect(domain[:avail]).to eq('1') + + domain = response[:parsed].css('resData chkData cd').last + name = domain.css('name').first + reason = domain.css('reason').first + + expect(name.text).to eq('asdasd') + expect(name[:avail]).to eq('0') + expect(reason.text).to eq('invalid format') + end + end end diff --git a/spec/epp/requests/domains/check_multiple.xml b/spec/epp/requests/domains/check_multiple.xml new file mode 100644 index 000000000..9d48a55e0 --- /dev/null +++ b/spec/epp/requests/domains/check_multiple.xml @@ -0,0 +1,7 @@ +test.ee +bla.ee + + +naug002#14-06-30at10:45:27 + + diff --git a/spec/epp/requests/domains/check_multiple_with_invalid.xml b/spec/epp/requests/domains/check_multiple_with_invalid.xml new file mode 100644 index 000000000..569aded3e --- /dev/null +++ b/spec/epp/requests/domains/check_multiple_with_invalid.xml @@ -0,0 +1,8 @@ +test.ee +bla.ee +asdasd + + +ixsz002#14-06-30at11:43:32 + +