diff --git a/app/models/domain.rb b/app/models/domain.rb index ab4d4cda9..4fb7e8b50 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -28,7 +28,7 @@ class Domain < ActiveRecord::Base has_many :domain_statuses has_many :statuses, -> { - where(setting_group: SettingGroup.domain_statuses) + where(setting_group: SettingGroup.domain_statuses).uniq }, through: :domain_statuses, source: :setting delegate :code, to: :owner_contact, prefix: true @@ -57,6 +57,7 @@ class Domain < ActiveRecord::Base attach_owner_contact(ph[:registrant]) if ph[:registrant] attach_contacts(self.class.parse_contacts_from_frame(parsed_frame)) attach_nameservers(self.class.parse_nameservers_from_frame(parsed_frame)) + attach_statuses(self.class.parse_statuses_from_frame(parsed_frame)) errors.empty? end @@ -107,6 +108,12 @@ class Domain < ActiveRecord::Base end end + def attach_statuses(status_list) + status_list.each do |x| + statuses << SettingGroup.domain_statuses.settings.find_by(value: x[:value]) + end + end + ### RENEW ### def renew(cur_exp_date, period, unit='y') @@ -237,6 +244,19 @@ class Domain < ActiveRecord::Base p[:unit] end + def parse_statuses_from_frame(parsed_frame) + res = [] + + parsed_frame.css('status').each do |x| + res << { + value: x['s'], + description: x.text + } + end + + res + end + def check_availability(domains) domains = [domains] if domains.is_a?(String) diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 3199d13cb..e5a398b41 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -7,6 +7,7 @@ describe 'EPP Domain', epp: true do before(:each) do Fabricate(:epp_user) Fabricate(:domain_validation_setting_group) + Fabricate(:domain_statuses_setting_group) end it 'returns error if contact does not exists' do diff --git a/spec/fabricators/setting_group_fabricator.rb b/spec/fabricators/setting_group_fabricator.rb index 0a05b7125..e4ea0ac1a 100644 --- a/spec/fabricators/setting_group_fabricator.rb +++ b/spec/fabricators/setting_group_fabricator.rb @@ -13,3 +13,10 @@ Fabricator(:domain_validation_setting_group, from: :setting_group) do Fabricate(:setting, code: 'ns_max_count', value: 13) ]} end + +Fabricator(:domain_statuses_setting_group, from: :setting_group) do + code 'domain_statuses' + settings { [ + Fabricate(:setting, code: 'client_hold', value: 'clientHold') + ]} +end