mirror of
https://github.com/internetee/registry.git
synced 2025-07-26 04:28:27 +02:00
Support for disclosure settings. Tests
This commit is contained in:
parent
64b0481cb2
commit
4e5aecb26d
7 changed files with 119 additions and 21 deletions
|
@ -37,6 +37,7 @@ class Contact < ActiveRecord::Base
|
||||||
after_destroy :domains_snapshot
|
after_destroy :domains_snapshot
|
||||||
before_create :generate_code
|
before_create :generate_code
|
||||||
before_create :generate_auth_info
|
before_create :generate_auth_info
|
||||||
|
after_create :ensure_disclosure
|
||||||
|
|
||||||
# scopes
|
# scopes
|
||||||
scope :current_registrars, ->(id) { where(registrar_id: id) }
|
scope :current_registrars, ->(id) { where(registrar_id: id) }
|
||||||
|
@ -63,6 +64,10 @@ class Contact < ActiveRecord::Base
|
||||||
errors.add(:ident, 'bad format') unless code.valid?
|
errors.add(:ident, 'bad format') unless code.valid?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ensure_disclosure
|
||||||
|
create_disclosure!(ContactDisclosure.default_values) unless disclosure
|
||||||
|
end
|
||||||
|
|
||||||
def domains_snapshot
|
def domains_snapshot
|
||||||
(domains + domains_owned).uniq.each do |domain|
|
(domains + domains_owned).uniq.each do |domain|
|
||||||
next unless domain.is_a?(Domain)
|
next unless domain.is_a?(Domain)
|
||||||
|
|
|
@ -4,6 +4,18 @@ class ContactDisclosure < ActiveRecord::Base
|
||||||
# value is true or false depending on disclosure flag
|
# value is true or false depending on disclosure flag
|
||||||
# rules are the contents of disclose element
|
# rules are the contents of disclose element
|
||||||
class << self
|
class << self
|
||||||
|
def default_values
|
||||||
|
@dc = {
|
||||||
|
name: Setting.disclosure_name,
|
||||||
|
org_name: Setting.disclosure_org_name,
|
||||||
|
phone: Setting.disclosure_phone,
|
||||||
|
fax: Setting.disclosure_fax,
|
||||||
|
email: Setting.disclosure_email,
|
||||||
|
address: Setting.disclosure_address
|
||||||
|
}
|
||||||
|
@dc
|
||||||
|
end
|
||||||
|
|
||||||
def extract_attributes(parsed_frame)
|
def extract_attributes(parsed_frame)
|
||||||
disclosure_hash = {}
|
disclosure_hash = {}
|
||||||
rules = parsed_frame.css('disclose').first
|
rules = parsed_frame.css('disclose').first
|
||||||
|
@ -11,35 +23,27 @@ class ContactDisclosure < ActiveRecord::Base
|
||||||
value = rules.attributes['flag'].value
|
value = rules.attributes['flag'].value
|
||||||
disclosure_hash = parse_disclose_xml(rules)
|
disclosure_hash = parse_disclose_xml(rules)
|
||||||
|
|
||||||
disclosure_hash.each do |k, _v|
|
disclosure_hash.each do |k, _v| # provides a correct flag to disclosure elements
|
||||||
disclosure_hash[k] = value
|
disclosure_hash[k] = value
|
||||||
end
|
end
|
||||||
disclosure_hash
|
default_values.merge(disclosure_hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Returns list of disclosure elements present.
|
||||||
def parse_disclose_xml(rules)
|
def parse_disclose_xml(rules)
|
||||||
{ int_name: parse_element_attributes_for('name', rules.children, 'int'),
|
{ name: parse_element_attributes_for('name', rules.children),
|
||||||
int_org_name: parse_element_attributes_for('org_name', rules.children, 'int'),
|
org_name: parse_element_attributes_for('org_name', rules.children),
|
||||||
int_addr: parse_element_attributes_for('addr', rules.children, 'int'),
|
address: parse_element_attributes_for('addr', rules.children),
|
||||||
loc_name: parse_element_attributes_for('name', rules.children, 'loc'),
|
|
||||||
loc_org_name: parse_element_attributes_for('org_name', rules.children, 'loc'),
|
|
||||||
loc_addr: parse_element_attributes_for('addr', rules.children, 'loc'),
|
|
||||||
phone: rules.css('voice').present?,
|
phone: rules.css('voice').present?,
|
||||||
email: rules.css('email').present?,
|
email: rules.css('email').present?,
|
||||||
fax: rules.css('fax').present?
|
fax: rules.css('fax').present?
|
||||||
}.delete_if { |_k, v| v.nil? || v == false }
|
}.delete_if { |_k, v| v.nil? || v == false }
|
||||||
end
|
end
|
||||||
|
|
||||||
# el is the element we are looking for
|
def parse_element_attributes_for(el, rules)
|
||||||
# rules are the contents of disclose element
|
return true if rules.css(el).present?
|
||||||
# value is loc/int depending on what type of el we are looking for
|
|
||||||
def parse_element_attributes_for(el, rules, value)
|
|
||||||
rules.css(el).each do |rule|
|
|
||||||
next unless rule.try(:attributes) || rule.attributes['type']
|
|
||||||
return rule.attributes['type'].value.present? if rule.attributes['type'].value == value
|
|
||||||
end
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
6
config/initializers/initial_settings.rb
Normal file
6
config/initializers/initial_settings.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
Setting.disclosure_name = true if Setting.disclosure_name.nil?
|
||||||
|
Setting.disclosure_org_name = true if Setting.disclosure_org_name.nil?
|
||||||
|
Setting.disclosure_email = true if Setting.disclosure_email.nil?
|
||||||
|
Setting.disclosure_phone = false if Setting.disclosure_phone.nil?
|
||||||
|
Setting.disclosure_fax = false if Setting.disclosure_fax.nil?
|
||||||
|
Setting.disclosure_address = false if Setting.disclosure_address.nil?
|
|
@ -22,6 +22,7 @@ describe 'EPP Contact', epp: true do
|
||||||
Fabricate(:epp_user, username: 'zone', registrar: zone)
|
Fabricate(:epp_user, username: 'zone', registrar: zone)
|
||||||
Fabricate(:epp_user, username: 'elkdata', registrar: elkdata)
|
Fabricate(:epp_user, username: 'elkdata', registrar: elkdata)
|
||||||
create_settings
|
create_settings
|
||||||
|
create_disclosure_settings
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'create command' do
|
context 'create command' do
|
||||||
|
@ -96,6 +97,50 @@ describe 'EPP Contact', epp: true do
|
||||||
# 5 seconds for what-ever weird lag reasons might happen
|
# 5 seconds for what-ever weird lag reasons might happen
|
||||||
expect(cr_date.text.to_time).to be_within(5).of(Time.now)
|
expect(cr_date.text.to_time).to be_within(5).of(Time.now)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'creates disclosure data' do
|
||||||
|
xml = {
|
||||||
|
disclose: { value: {
|
||||||
|
voice: { value: '' },
|
||||||
|
addr: { value: '' },
|
||||||
|
name: { value: '' },
|
||||||
|
org_name: { value: '' },
|
||||||
|
email: { value: '' },
|
||||||
|
fax: { value: '' }
|
||||||
|
}, attrs: { flag: '1' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response = epp_request(create_contact_xml(xml), :xml)
|
||||||
|
expect(response[:result_code]).to eq('1000')
|
||||||
|
|
||||||
|
expect(Contact.last.disclosure.name).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.org_name).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.phone).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.fax).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.email).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.address).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates disclosure data merging with defaults' do
|
||||||
|
xml = {
|
||||||
|
disclose: { value: {
|
||||||
|
voice: { value: '' },
|
||||||
|
addr: { value: '' }
|
||||||
|
}, attrs: { flag: '1' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response = epp_request(create_contact_xml(xml), :xml)
|
||||||
|
expect(response[:result_code]).to eq('1000')
|
||||||
|
|
||||||
|
expect(Contact.last.disclosure.name).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.org_name).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.phone).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.fax).to eq(false)
|
||||||
|
expect(Contact.last.disclosure.email).to eq(true)
|
||||||
|
expect(Contact.last.disclosure.address).to eq(true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'update command' do
|
context 'update command' do
|
||||||
|
|
|
@ -18,10 +18,19 @@ describe '.extract_attributes' do
|
||||||
|
|
||||||
# TODO: remodel create contact xml to support disclosure
|
# TODO: remodel create contact xml to support disclosure
|
||||||
it 'should return disclosure has if disclosure' do
|
it 'should return disclosure has if disclosure' do
|
||||||
f = File.open('spec/epp/requests/contacts/create_with_two_addresses.xml')
|
xml = EppXml::Contact.create(
|
||||||
parsed_frame = Nokogiri::XML(f).remove_namespaces!
|
{
|
||||||
f.close
|
disclose: { value: {
|
||||||
|
voice: { value: '' },
|
||||||
|
addr: { value: '' },
|
||||||
|
name: { value: '' },
|
||||||
|
org_name: { value: '' },
|
||||||
|
email: { value: '' },
|
||||||
|
fax: { value: '' }
|
||||||
|
}, attrs: { flag: '0' }
|
||||||
|
} })
|
||||||
|
parsed_frame = Nokogiri::XML(xml).remove_namespaces!
|
||||||
result = ContactDisclosure.extract_attributes(parsed_frame)
|
result = ContactDisclosure.extract_attributes(parsed_frame)
|
||||||
expect(result).to eq({ phone: '0', email: '0' })
|
expect(result).to eq({ phone: '0', email: '0', fax: '0', address: '0', name: '0', org_name: '0' })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe Contact do
|
describe Contact do
|
||||||
|
before { create_disclosure_settings }
|
||||||
it { should have_one(:address) }
|
it { should have_one(:address) }
|
||||||
|
|
||||||
context 'with invalid attribute' do
|
context 'with invalid attribute' do
|
||||||
|
@ -32,11 +33,30 @@ describe Contact do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with valid attributes' do
|
context 'with valid attributes' do
|
||||||
before(:each) { @contact = Fabricate(:contact) }
|
before(:each) { @contact = Fabricate(:contact, disclosure: nil) }
|
||||||
|
|
||||||
it 'should return true' do
|
it 'should return true' do
|
||||||
expect(@contact.valid?).to be true
|
expect(@contact.valid?).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should have default disclosure' do
|
||||||
|
expect(@contact.disclosure.name).to be true
|
||||||
|
expect(@contact.disclosure.org_name).to be true
|
||||||
|
expect(@contact.disclosure.email).to be true
|
||||||
|
expect(@contact.disclosure.phone).to be false
|
||||||
|
expect(@contact.disclosure.fax).to be false
|
||||||
|
expect(@contact.disclosure.address).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should have custom disclosure' do
|
||||||
|
@contact = Fabricate(:contact, disclosure: Fabricate(:contact_disclosure))
|
||||||
|
expect(@contact.disclosure.name).to be true
|
||||||
|
expect(@contact.disclosure.org_name).to be true
|
||||||
|
expect(@contact.disclosure.email).to be true
|
||||||
|
expect(@contact.disclosure.phone).to be true
|
||||||
|
expect(@contact.disclosure.fax).to be true
|
||||||
|
expect(@contact.disclosure.address).to be true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with callbacks' do
|
context 'with callbacks' do
|
||||||
|
|
|
@ -12,6 +12,15 @@ module General
|
||||||
|
|
||||||
Setting.transfer_wait_time = 0
|
Setting.transfer_wait_time = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_disclosure_settings
|
||||||
|
Setting.disclosure_name = true
|
||||||
|
Setting.disclosure_org_name = true
|
||||||
|
Setting.disclosure_email = true
|
||||||
|
Setting.disclosure_phone = false
|
||||||
|
Setting.disclosure_fax = false
|
||||||
|
Setting.disclosure_address = false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
RSpec.configure do |c|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue