From 5ec86cdb6362a061886d0df5b2f57e59ddedbecb Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 18 Dec 2016 16:09:22 +0200 Subject: [PATCH] Require domain expire time to be before than now + 4 years on domain renewal #260 --- app/models/epp/domain.rb | 13 +++- config/locales/epp/domains.en.yml | 4 ++ spec/requests/epp/domain/renew_spec.rb | 92 ++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 config/locales/epp/domains.en.yml create mode 100644 spec/requests/epp/domain/renew_spec.rb diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index f78d94c31..155d70c18 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -601,7 +601,18 @@ class Epp::Domain < Domain return false if errors.any? p = self.class.convert_period_to_time(period, unit) - self.valid_to = valid_to + p + renewed_expire_time = valid_to + p + + # Change it when Pricelist model periods change + max_reg_time = 4.years.from_now + + if renewed_expire_time >= max_reg_time + add_epp_error('2105', nil, nil, I18n.t('epp.domains.object_is_not_eligible_for_renewal', + max_date: max_reg_time.to_date.to_s(:db))) + return false if errors.any? + end + + self.valid_to = renewed_expire_time self.outzone_at = nil self.delete_at = nil self.period = period diff --git a/config/locales/epp/domains.en.yml b/config/locales/epp/domains.en.yml new file mode 100644 index 000000000..788ca12d4 --- /dev/null +++ b/config/locales/epp/domains.en.yml @@ -0,0 +1,4 @@ +en: + epp: + domains: + object_is_not_eligible_for_renewal: Object is not eligible for renewal; Expiration date must be before %{max_date} diff --git a/spec/requests/epp/domain/renew_spec.rb b/spec/requests/epp/domain/renew_spec.rb new file mode 100644 index 000000000..69a482bf4 --- /dev/null +++ b/spec/requests/epp/domain/renew_spec.rb @@ -0,0 +1,92 @@ +require 'rails_helper' + +RSpec.describe 'EPP domain:renew' do + let(:user) { FactoryGirl.create(:api_user_epp, registrar: registrar) } + let(:registrar) { FactoryGirl.create(:registrar) } + subject(:response_xml) { Nokogiri::XML(response.body) } + subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } + subject(:response_description) { response_xml.css('result msg').text } + + before do + travel_to Time.zone.parse('05.07.2010') + sign_in_to_epp_area(user: user) + FactoryGirl.create(:account, registrar: registrar, balance: 1) + Setting.days_to_renew_domain_before_expire = 0 + + FactoryGirl.create(:pricelist, + category: 'com', + duration: '3years', + price: 1.to_money, + operation_category: 'renew', + valid_from: Time.zone.parse('05.07.2010'), + valid_to: Time.zone.parse('05.07.2010') + ) + end + + context 'when domain can be renewed' do + let!(:domain) { FactoryGirl.create(:domain, + registrar: registrar, + name: 'test.com', + expire_time: Time.zone.parse('05.07.2010')) + } + let(:request_xml) { <<-XML + + + + + + test.com + 2010-07-05 + 3 + + + + + XML + } + + it 'returns epp code of 1000' do + post '/epp/command/renew', frame: request_xml + expect(response_code).to eq('1000') + end + + it 'returns epp description' do + post '/epp/command/renew', frame: request_xml + expect(response_description).to eq('Command completed successfully') + end + end + + context 'when domain cannot be renewed' do + let!(:domain) { FactoryGirl.create(:domain, + registrar: registrar, + name: 'test.com', + expire_time: Time.zone.parse('05.07.2011')) + } + let(:request_xml) { <<-XML + + + + + + test.com + 2011-07-05 + 3 + + + + + XML + } + + it 'returns epp code of 2105' do + post '/epp/command/renew', frame: request_xml + expect(response_code).to eq('2105') + end + + it 'returns epp description' do + post '/epp/command/renew', frame: request_xml + expect(response_description).to eq('Object is not eligible for renewal; ' \ + 'Expiration date must be before 2014-07-05') + end + end +end