diff --git a/app/models/domain.rb b/app/models/domain.rb index 8335d5f42..08e95bae2 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -146,6 +146,12 @@ class Domain < ActiveRecord::Base { admin_contacts: :registrar } ) end + + def expire_domains + Domain.where('valid_to <= ?', Time.zone.now).each do |x| + x.domain_statuses.create(value: DomainStatus::EXPIRED) if x.expirable? + end + end end def name=(value) @@ -174,6 +180,11 @@ class Domain < ActiveRecord::Base )).empty? end + def expirable? + return false if valid_to > Time.zone.now + domain_statuses.where(value: DomainStatus::EXPIRED).empty? + end + def pending_update? (domain_statuses.pluck(:value) & %W( #{DomainStatus::PENDING_UPDATE} diff --git a/config/schedule.rb b/config/schedule.rb index b1ad5a403..3f366a946 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -24,6 +24,10 @@ every :day, at: '12:10pm' do runner 'Invoice.cancel_overdue_invoices' end +every :day, at: '12:15pm' do + runner 'Domain.expire_domains' +end + every 3.hours do runner 'Certificate.update_crl' end diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index c9177b406..882946c21 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -85,6 +85,17 @@ describe Domain do @domain.registrant_update_confirmable?('123').should == false end + it 'should expire domains' do + Domain.expire_domains + @domain.domain_statuses.where(value: DomainStatus::EXPIRED).count.should == 0 + + @domain.valid_to = Time.zone.now - 10.days + @domain.save + + Domain.expire_domains + @domain.domain_statuses.where(value: DomainStatus::EXPIRED).count.should == 1 + end + context 'about registrant update confirm' do before :all do @domain.registrant_verification_token = 123