From e20944151eb7fd6a3b4e226bbf67bf9e487d351d Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Thu, 21 Aug 2014 12:14:34 +0300 Subject: [PATCH] Domain statuses improvements --- app/models/domain.rb | 14 +++++++------ app/models/domain_status.rb | 21 +++++++++++++++++++ app/models/setting.rb | 2 ++ app/models/setting_group.rb | 2 ++ config/locales/en.yml | 4 ++++ .../20140819095802_create_domains_statuses.rb | 1 + ...20140819103517_populate_domain_statuses.rb | 6 ++++-- db/schema.rb | 1 + spec/epp/domain_spec.rb | 11 +++++++++- spec/models/setting_spec.rb | 2 +- 10 files changed, 54 insertions(+), 10 deletions(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 4fb7e8b50..ad53ca3a5 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -25,11 +25,9 @@ class Domain < ActiveRecord::Base has_and_belongs_to_many :nameservers - has_many :domain_statuses - - has_many :statuses, -> { - where(setting_group: SettingGroup.domain_statuses).uniq - }, through: :domain_statuses, source: :setting + has_many :domain_statuses, -> { + joins(:setting).where(settings: {setting_group_id: SettingGroup.domain_statuses.id}) + } delegate :code, to: :owner_contact, prefix: true delegate :name, to: :registrar, prefix: true @@ -110,7 +108,11 @@ class Domain < ActiveRecord::Base def attach_statuses(status_list) status_list.each do |x| - statuses << SettingGroup.domain_statuses.settings.find_by(value: x[:value]) + setting = SettingGroup.domain_statuses.settings.find_by(value: x[:value]) + self.domain_statuses.build( + setting: setting, + description: x[:description] + ) end end diff --git a/app/models/domain_status.rb b/app/models/domain_status.rb index d71e6be2d..e3a9c47e7 100644 --- a/app/models/domain_status.rb +++ b/app/models/domain_status.rb @@ -1,4 +1,25 @@ class DomainStatus < ActiveRecord::Base + # Domain statuses are stored as settings + include EppErrors + + EPP_ATTR_MAP = { + setting: 'status' + } + belongs_to :domain belongs_to :setting + + delegate :value, :code, to: :setting + + validates :setting, uniqueness: { scope: :domain_id } + + def setting_uniqueness + + end + + def epp_code_map + { + '2302' => [[:setting, :taken]] + } + end end diff --git a/app/models/setting.rb b/app/models/setting.rb index 3bdda2a0c..eb4dbe7f5 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -1,4 +1,6 @@ class Setting < ActiveRecord::Base belongs_to :setting_group + has_many :domain_statuses + has_many :domains, through: :domain_statuses validates :code, uniqueness: { scope: :setting_group_id } end diff --git a/app/models/setting_group.rb b/app/models/setting_group.rb index ace904acf..3fea54616 100644 --- a/app/models/setting_group.rb +++ b/app/models/setting_group.rb @@ -3,6 +3,8 @@ class SettingGroup < ActiveRecord::Base accepts_nested_attributes_for :settings + validates :code, uniqueness: true + def setting(key) settings.find_by(code: key.to_s) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 6ebdc2805..df0e07895 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -66,6 +66,10 @@ en: attributes: code: taken: 'Code already exists' + domain_status: + attributes: + setting: + taken: 'Status already exists on this domain' attributes: domain: name: 'Domain name' diff --git a/db/migrate/20140819095802_create_domains_statuses.rb b/db/migrate/20140819095802_create_domains_statuses.rb index 90e4f1a22..bd7323982 100644 --- a/db/migrate/20140819095802_create_domains_statuses.rb +++ b/db/migrate/20140819095802_create_domains_statuses.rb @@ -3,6 +3,7 @@ class CreateDomainsStatuses < ActiveRecord::Migration create_table :domain_statuses do |t| t.integer :domain_id t.integer :setting_id + t.string :description end end end diff --git a/db/migrate/20140819103517_populate_domain_statuses.rb b/db/migrate/20140819103517_populate_domain_statuses.rb index 0adfc67df..51695125f 100644 --- a/db/migrate/20140819103517_populate_domain_statuses.rb +++ b/db/migrate/20140819103517_populate_domain_statuses.rb @@ -1,6 +1,7 @@ class PopulateDomainStatuses < ActiveRecord::Migration def change - SettingGroup.create(code: 'domain_statuses', settings: [ + sg = SettingGroup.create(code: 'domain_statuses') + sg.settings = [ Setting.create(code: 'clientDeleteProhibited'.underscore, value: 'clientDeleteProhibited'), Setting.create(code: 'serverDeleteProhibited'.underscore, value: 'serverDeleteProhibited'), Setting.create(code: 'clientHold'.underscore, value: 'clientHold'), @@ -18,6 +19,7 @@ class PopulateDomainStatuses < ActiveRecord::Migration Setting.create(code: 'pendingRenew'.underscore, value: 'pendingRenew'), Setting.create(code: 'pendingTransfer'.underscore, value: 'pendingTransfer'), Setting.create(code: 'pendingUpdate'.underscore, value: 'pendingUpdate') - ]) + ] + sg.save end end diff --git a/db/schema.rb b/db/schema.rb index bef49d930..71d2b04e3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -64,6 +64,7 @@ ActiveRecord::Schema.define(version: 20140819103517) do create_table "domain_statuses", force: true do |t| t.integer "domain_id" t.integer "setting_id" + t.string "description" end create_table "domains", force: true do |t| diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index e5a398b41..1b5b01b17 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -262,6 +262,15 @@ describe 'EPP Domain', epp: true do new_contact = d.tech_contacts.find_by(code: 'mak21') expect(new_contact).to be_truthy + + expect(d.domain_statuses.count).to eq(1) + expect(d.domain_statuses.first.description).to eq('Payment overdue.') + expect(d.domain_statuses.first.value).to eq('clientHold') + expect(d.domain_statuses.first.code).to eq('client_hold') + + response = epp_request('domains/update.xml') + + expect(d.domain_statuses.count).to eq(1) end end @@ -283,7 +292,7 @@ describe 'EPP Domain', epp: true do expect(name.text).to eq('example.ee') expect(name[:avail]).to eq('0') - expect(reason.text).to eq('in use') #confirm this with current API + expect(reason.text).to eq('in use') end it 'checks multiple domains' do diff --git a/spec/models/setting_spec.rb b/spec/models/setting_spec.rb index 5aaa13b50..3a8e60330 100644 --- a/spec/models/setting_spec.rb +++ b/spec/models/setting_spec.rb @@ -13,7 +13,7 @@ describe Setting do err = sg.settings.last.errors[:code].first expect(err).to eq('Code already exists') - sg_2 = Fabricate(:setting_group) + sg_2 = Fabricate(:setting_group, code: 'domain_statuses') sg_2.settings.build(code: 'this_is_code') expect(sg_2.save).to be true