diff --git a/app/models/domain.rb b/app/models/domain.rb index 94abcafa8..597822985 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -26,9 +26,7 @@ class Domain < ActiveRecord::Base has_many :domain_nameservers, dependent: :delete_all has_many :nameservers, through: :domain_nameservers - has_many :domain_statuses, -> { - joins(:setting).where(settings: { setting_group_id: SettingGroup.domain_statuses.id }) - }, dependent: :delete_all + has_many :domain_statuses, dependent: :delete_all has_many :domain_transfers, dependent: :delete_all @@ -134,10 +132,13 @@ class Domain < ActiveRecord::Base next end - setting = SettingGroup.domain_statuses.settings.find_by(value: x[:value]) + unless DomainStatus::STATUSES.include?(x[:value]) + add_epp_error('2302', 'status', x[:value], [:domain_statuses, :not_found]) + next + end domain_statuses.build( - setting: setting, + value: x[:value], description: x[:description] ) end @@ -176,7 +177,7 @@ class Domain < ActiveRecord::Base def detach_statuses(status_list) to_delete = [] status_list.each do |x| - status = domain_statuses.joins(:setting).where(settings: { value: x[:value] }) + status = domain_statuses.find_by(value: x[:value]) if status.blank? add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found]) else diff --git a/app/models/domain_status.rb b/app/models/domain_status.rb index 80c898161..8c6da44ce 100644 --- a/app/models/domain_status.rb +++ b/app/models/domain_status.rb @@ -7,11 +7,31 @@ class DomainStatus < ActiveRecord::Base } belongs_to :domain - belongs_to :setting + # belongs_to :setting - delegate :value, :code, to: :setting + # delegate :value, :code, to: :setting - validates :setting, uniqueness: { scope: :domain_id } + # validates :setting, uniqueness: { scope: :domain_id } + + CLIENT_DELETE_PROHIBITED = 'clientDeleteProhibited' + SERVER_DELETE_PROHIBITED = 'serverDeleteProhibited' + CLIENT_HOLD = 'clientHold' + SERVER_HOLD = 'serverHold' + CLIENT_RENEW_PROHIBITED = 'clientRenewProhibited' + SERVER_RENEW_PROHIBITED = 'serverRenewProhibited' + CLIENT_TRANSFER_PROHIBITED = 'clientTransferProhibited' + SERVER_TRANSFER_PROHIBITED = 'serverTransferProhibited' + CLIENT_UPDATE_PROHIBITED = 'clientUpdateProhibited' + SERVER_UPDATE_PROHIBITED = 'serverUpdateProhibited' + INACTIVE = 'inactive' + OK = 'ok' + PENDING_CREATE = 'pendingCreate' + PENDING_DELETE = 'pendingDelete' + PENDING_RENEW = 'pendingRenew' + PENDING_TRANSFER = 'pendingTransfer' + PENDING_UPDATE = 'pendingUpdate' + + STATUSES = [CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD, CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED, INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_RENEW, PENDING_TRANSFER, PENDING_UPDATE] def epp_code_map { diff --git a/db/migrate/20140902121843_refactor_domain_statuses.rb b/db/migrate/20140902121843_refactor_domain_statuses.rb new file mode 100644 index 000000000..756411c9b --- /dev/null +++ b/db/migrate/20140902121843_refactor_domain_statuses.rb @@ -0,0 +1,10 @@ +class RefactorDomainStatuses < ActiveRecord::Migration + def change + add_column :domain_statuses, :value, :string + remove_column :domain_statuses, :setting_id + + sg = SettingGroup.find_by(code: 'domain_statuses') + sg.settings.delete_all + sg.delete + end +end diff --git a/db/schema.rb b/db/schema.rb index e1198b421..397fffb3c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140828133057) do +ActiveRecord::Schema.define(version: 20140902121843) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -84,8 +84,8 @@ ActiveRecord::Schema.define(version: 20140828133057) do create_table "domain_statuses", force: true do |t| t.integer "domain_id" - t.integer "setting_id" t.string "description" + t.string "value" end create_table "domain_transfers", force: true do |t| diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index d0e08033d..c4ef6b270 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -308,7 +308,7 @@ describe 'EPP Domain', epp: true do it 'returns domain info' do d = Domain.first - d.domain_statuses.create(setting: Setting.find_by(code: 'client_hold'), description: 'Payment overdue.') + d.domain_statuses.create(value: DomainStatus::CLIENT_HOLD, description: 'Payment overdue.') d.nameservers.create(hostname: 'ns1.example.com', ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A') response = epp_request(domain_info_xml, :xml) @@ -374,7 +374,6 @@ describe 'EPP Domain', epp: true do expect(d.domain_statuses.count).to eq(2) 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') expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited') @@ -383,6 +382,10 @@ describe 'EPP Domain', epp: true do expect(response[:results][0][:msg]).to eq('Nameserver already exists on this domain') expect(response[:results][0][:value]).to eq('ns1.example.com') expect(response[:results][1][:msg]).to eq('Nameserver already exists on this domain') + expect(response[:results][2][:msg]).to eq('Status already exists on this domain') + expect(response[:results][2][:value]).to eq('clientHold') + expect(response[:results][3][:msg]).to eq('Status already exists on this domain') + expect(response[:results][3][:value]).to eq('clientUpdateProhibited') expect(d.domain_statuses.count).to eq(2) end