From d15119c622f8083967559ff4f787cb70e4374373 Mon Sep 17 00:00:00 2001 From: olegphenomenon Date: Thu, 8 Sep 2022 16:05:25 +0300 Subject: [PATCH 1/3] outzone rake task for invalid email domains --- .../e_invoice_response_controller.rb | 2 + .../domains/force_delete/set_status.rb | 15 ++- app/jobs/outzone_invalid_email_domains_job.rb | 22 ++++ lib/tasks/outzone_invalid_email_domains.rake | 7 ++ .../force_delete_email/base_test.rb | 109 ++++++++++++++++-- .../outzone_invalid_email_domains_job_test.rb | 46 ++++++++ 6 files changed, 189 insertions(+), 12 deletions(-) create mode 100644 app/jobs/outzone_invalid_email_domains_job.rb create mode 100644 lib/tasks/outzone_invalid_email_domains.rake create mode 100644 test/jobs/outzone_invalid_email_domains_job_test.rb diff --git a/app/controllers/eis_billing/e_invoice_response_controller.rb b/app/controllers/eis_billing/e_invoice_response_controller.rb index 208c8864f..20a0d724a 100644 --- a/app/controllers/eis_billing/e_invoice_response_controller.rb +++ b/app/controllers/eis_billing/e_invoice_response_controller.rb @@ -10,6 +10,8 @@ class EisBilling::EInvoiceResponseController < EisBilling::BaseController def mark_e_invoice_sent_at(invoice_number) invoice = Invoice.find_by(number: invoice_number) + invoice = Invoice.find_by(number: invoice_number['invoice_number']) if invoice.nil? + invoice.update(e_invoice_sent_at: Time.zone.now) end end diff --git a/app/interactions/domains/force_delete/set_status.rb b/app/interactions/domains/force_delete/set_status.rb index b0a53ad82..80f37b23b 100644 --- a/app/interactions/domains/force_delete/set_status.rb +++ b/app/interactions/domains/force_delete/set_status.rb @@ -16,7 +16,7 @@ module Domains def force_delete_soft years = (domain.valid_to.to_date - Time.zone.today).to_i / 365 - soft_forcedelete_dates(years) if years.positive? + years.positive? ? soft_forcedelete_dates(years) : set_less_than_year_until_valid_to_date end private @@ -24,12 +24,19 @@ module Domains def soft_forcedelete_dates(years) domain.force_delete_start = domain.valid_to - years.years domain.force_delete_date = domain.force_delete_start + - Setting.expire_warning_period.days + - Setting.redemption_grace_period.days + expire_warning_period_days + + redemption_grace_period_days + end + + def set_less_than_year_until_valid_to_date + domain.force_delete_start = domain.valid_to + domain.force_delete_date = domain.force_delete_start + + expire_warning_period_days + + redemption_grace_period_days end def redemption_grace_period_days - Setting.redemption_grace_period.days + 1.day + Setting.redemption_grace_period.days end def expire_warning_period_days diff --git a/app/jobs/outzone_invalid_email_domains_job.rb b/app/jobs/outzone_invalid_email_domains_job.rb new file mode 100644 index 000000000..03f7e5f64 --- /dev/null +++ b/app/jobs/outzone_invalid_email_domains_job.rb @@ -0,0 +1,22 @@ +class OutzoneInvalidEmailDomainsJob < ApplicationJob + queue_as :default + + def perform + domains = Domain.where("force_delete_data->'template_name' = ?", 'invalid_email') + .where("force_delete_data->'force_delete_type' = ?", 'soft') + .where(outzone_at: nil) + .where('Date(force_delete_start) <= ?', Time.zone.now) + + domains.each do |domain| + outzone(domain) + end + end + + private + + def outzone(domain) + domain.outzone_at = domain.force_delete_start + Domain.expire_warning_period + domain.delete_date = domain.outzone_at + Domain.redemption_grace_period + domain.save + end +end diff --git a/lib/tasks/outzone_invalid_email_domains.rake b/lib/tasks/outzone_invalid_email_domains.rake new file mode 100644 index 000000000..bba329f83 --- /dev/null +++ b/lib/tasks/outzone_invalid_email_domains.rake @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +desc 'Rake task run outzone setter task for force deleted domains by invalid emails' + +task outzone_invalid_email_domains: :environment do + OutzoneInvalidEmailDomainsJob.perform_later +end diff --git a/test/interactions/force_delete_email/base_test.rb b/test/interactions/force_delete_email/base_test.rb index c3f688678..5ae37185b 100644 --- a/test/interactions/force_delete_email/base_test.rb +++ b/test/interactions/force_delete_email/base_test.rb @@ -1,18 +1,111 @@ require 'test_helper' class BaseTest < ActiveSupport::TestCase - def test_hold_domains_force_delete_email - domain = domains(:shop) - domain.update!(statuses: [DomainStatus::SERVER_HOLD]) - domain.update!(expire_time: Time.zone.now + 1.year) + setup do + @domain = domains(:shop) + @domain_airport = domains(:airport) + end - registrant = domain.registrant - registrant.update!(email: "#{registrant.email.split('@').first}@#{domain.name}") + def test_hold_domains_force_delete_email + @domain.update!(statuses: [DomainStatus::SERVER_HOLD]) + @domain.update!(expire_time: Time.zone.now + 1.year) + + registrant = @domain.registrant + registrant.update!(email: "#{registrant.email.split('@').first}@#{@domain.name}") Domains::ForceDeleteEmail::Base.run(email: registrant.email) - domain.reload + @domain.reload - assert_not domain.force_delete_scheduled? + assert_not @domain.force_delete_scheduled? + end + + def test_less_than_year_until_valid_to_date + refute @domain_airport.force_delete_scheduled? + @domain_airport.update!(valid_to: Time.zone.now + 11.months) + @domain_airport.reload + prepare_contact + + contact = @domain_airport.admin_contacts.first + + Domains::ForceDeleteEmail::Base.run(email: contact.email) + @domain_airport.reload + + assert @domain_airport.force_delete_scheduled? + assert @domain_airport.valid_to < Time.zone.now + 1.year + assert_equal @domain_airport.force_delete_start, @domain_airport.valid_to + assert_equal @domain_airport.force_delete_date, (@domain_airport.force_delete_start + + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days).to_date + end + + def test_more_that_year_until_valid_to_date + refute @domain_airport.force_delete_scheduled? + @domain_airport.update!(valid_to: Time.zone.now + 3.years + 1.month + 1.day) + @domain_airport.reload + prepare_contact + + contact = @domain_airport.admin_contacts.first + + Domains::ForceDeleteEmail::Base.run(email: contact.email) + @domain_airport.reload + + assert @domain_airport.force_delete_scheduled? + assert @domain_airport.valid_to > Time.zone.now + 1.year + assert_equal @domain_airport.force_delete_start.to_date, (Time.zone.now + 1.month + 1.day).to_date + assert_equal @domain_airport.force_delete_date, (@domain_airport.force_delete_start + + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days).to_date + end + + def test_more_that_year_until_valid_to_date_but_month_is_previous + refute @domain_airport.force_delete_scheduled? + @domain_airport.update!(valid_to: Time.zone.now + 3.years - 1.month - 4.days) + @domain_airport.reload + prepare_contact + + contact = @domain_airport.admin_contacts.first + + Domains::ForceDeleteEmail::Base.run(email: contact.email) + @domain_airport.reload + + assert @domain_airport.force_delete_scheduled? + assert @domain_airport.valid_to > Time.zone.now + 1.year + assert_equal @domain_airport.force_delete_start.to_date, (Time.zone.now + 1.year - 1.month - 4.days).to_date + assert_equal @domain_airport.force_delete_date, (@domain_airport.force_delete_start + + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days).to_date + end + + def test_should_send_poll_message_about_45_days_to_registrar + refute @domain_airport.force_delete_scheduled? + @domain_airport.update!(valid_to: Time.zone.now + 3.years - 1.month - 4.days) + @domain_airport.reload + prepare_contact + + contact = @domain_airport.admin_contacts.first + + assert_difference -> { @domain_airport.registrar.notifications.count } do + Domains::ForceDeleteEmail::Base.run(email: contact.email) + end + + @domain_airport.reload + end + + private + + def prepare_contact + assert_not @domain_airport.force_delete_scheduled? + email = '~@internet.ee' + + contact = @domain_airport.admin_contacts.first + contact.update_attribute(:email, email) + (ValidationEvent::VALID_EVENTS_COUNT_THRESHOLD).times do + contact.verify_email + end + contact.reload + + refute contact.validation_events.last.success? + assert contact.need_to_start_force_delete? end end diff --git a/test/jobs/outzone_invalid_email_domains_job_test.rb b/test/jobs/outzone_invalid_email_domains_job_test.rb new file mode 100644 index 000000000..c50638829 --- /dev/null +++ b/test/jobs/outzone_invalid_email_domains_job_test.rb @@ -0,0 +1,46 @@ +require 'test_helper' + +class OutzoneInvalidEmailDomainsJobTest < ActiveJob::TestCase + include ActionMailer::TestHelper + + setup do + ActionMailer::Base.deliveries.clear + @domain = domains(:airport) + end + + def test_set_outzone_datetime_for_fd_domains_by_invalid_emails + assert_nil @domain.outzone_at + + @domain.schedule_force_delete(type: :soft) + @domain.force_delete_data = {"template_name"=>"invalid_email", "force_delete_type"=>"soft"} + @domain.save + + OutzoneInvalidEmailDomainsJob.perform_now + @domain.reload + + assert @domain.force_delete_scheduled? + assert @domain.valid_to < Time.zone.now + 1.year + assert_equal @domain.force_delete_start, @domain.valid_to + assert_equal @domain.force_delete_date, (@domain.force_delete_start + + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days).to_date + assert_equal @domain.outzone_at, @domain.force_delete_start + Setting.expire_warning_period.day + end + + private + + def prepare_contact + assert_not @domain.force_delete_scheduled? + email = '~@internet.ee' + + contact = @domain.admin_contacts.first + contact.update_attribute(:email, email) + (ValidationEvent::VALID_EVENTS_COUNT_THRESHOLD).times do + contact.verify_email + end + contact.reload + + refute contact.validation_events.last.success? + assert contact.need_to_start_force_delete? + end +end From 3d81164b239fde424cee9de93184ca239786458b Mon Sep 17 00:00:00 2001 From: olegphenomenon Date: Fri, 9 Sep 2022 13:46:24 +0300 Subject: [PATCH 2/3] remove soft force delete from sample --- .../domains/force_delete/set_status.rb | 15 ++++----------- app/jobs/outzone_invalid_email_domains_job.rb | 1 - .../force_delete_email/base_test.rb | 19 ------------------- .../outzone_invalid_email_domains_job_test.rb | 4 ---- 4 files changed, 4 insertions(+), 35 deletions(-) diff --git a/app/interactions/domains/force_delete/set_status.rb b/app/interactions/domains/force_delete/set_status.rb index 80f37b23b..b0a53ad82 100644 --- a/app/interactions/domains/force_delete/set_status.rb +++ b/app/interactions/domains/force_delete/set_status.rb @@ -16,7 +16,7 @@ module Domains def force_delete_soft years = (domain.valid_to.to_date - Time.zone.today).to_i / 365 - years.positive? ? soft_forcedelete_dates(years) : set_less_than_year_until_valid_to_date + soft_forcedelete_dates(years) if years.positive? end private @@ -24,19 +24,12 @@ module Domains def soft_forcedelete_dates(years) domain.force_delete_start = domain.valid_to - years.years domain.force_delete_date = domain.force_delete_start + - expire_warning_period_days + - redemption_grace_period_days - end - - def set_less_than_year_until_valid_to_date - domain.force_delete_start = domain.valid_to - domain.force_delete_date = domain.force_delete_start + - expire_warning_period_days + - redemption_grace_period_days + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days end def redemption_grace_period_days - Setting.redemption_grace_period.days + Setting.redemption_grace_period.days + 1.day end def expire_warning_period_days diff --git a/app/jobs/outzone_invalid_email_domains_job.rb b/app/jobs/outzone_invalid_email_domains_job.rb index 03f7e5f64..95da4944b 100644 --- a/app/jobs/outzone_invalid_email_domains_job.rb +++ b/app/jobs/outzone_invalid_email_domains_job.rb @@ -3,7 +3,6 @@ class OutzoneInvalidEmailDomainsJob < ApplicationJob def perform domains = Domain.where("force_delete_data->'template_name' = ?", 'invalid_email') - .where("force_delete_data->'force_delete_type' = ?", 'soft') .where(outzone_at: nil) .where('Date(force_delete_start) <= ?', Time.zone.now) diff --git a/test/interactions/force_delete_email/base_test.rb b/test/interactions/force_delete_email/base_test.rb index 5ae37185b..ffca7b3c5 100644 --- a/test/interactions/force_delete_email/base_test.rb +++ b/test/interactions/force_delete_email/base_test.rb @@ -20,25 +20,6 @@ class BaseTest < ActiveSupport::TestCase assert_not @domain.force_delete_scheduled? end - def test_less_than_year_until_valid_to_date - refute @domain_airport.force_delete_scheduled? - @domain_airport.update!(valid_to: Time.zone.now + 11.months) - @domain_airport.reload - prepare_contact - - contact = @domain_airport.admin_contacts.first - - Domains::ForceDeleteEmail::Base.run(email: contact.email) - @domain_airport.reload - - assert @domain_airport.force_delete_scheduled? - assert @domain_airport.valid_to < Time.zone.now + 1.year - assert_equal @domain_airport.force_delete_start, @domain_airport.valid_to - assert_equal @domain_airport.force_delete_date, (@domain_airport.force_delete_start + - Setting.expire_warning_period.days + - Setting.redemption_grace_period.days).to_date - end - def test_more_that_year_until_valid_to_date refute @domain_airport.force_delete_scheduled? @domain_airport.update!(valid_to: Time.zone.now + 3.years + 1.month + 1.day) diff --git a/test/jobs/outzone_invalid_email_domains_job_test.rb b/test/jobs/outzone_invalid_email_domains_job_test.rb index c50638829..dd7ce41c2 100644 --- a/test/jobs/outzone_invalid_email_domains_job_test.rb +++ b/test/jobs/outzone_invalid_email_domains_job_test.rb @@ -20,10 +20,6 @@ class OutzoneInvalidEmailDomainsJobTest < ActiveJob::TestCase assert @domain.force_delete_scheduled? assert @domain.valid_to < Time.zone.now + 1.year - assert_equal @domain.force_delete_start, @domain.valid_to - assert_equal @domain.force_delete_date, (@domain.force_delete_start + - Setting.expire_warning_period.days + - Setting.redemption_grace_period.days).to_date assert_equal @domain.outzone_at, @domain.force_delete_start + Setting.expire_warning_period.day end From 1af5d63995ea751db1b915fda81e507cb515d961 Mon Sep 17 00:00:00 2001 From: olegphenomenon Date: Fri, 9 Sep 2022 13:54:16 +0300 Subject: [PATCH 3/3] fixed tests --- .../outzone_invalid_email_domains_job_test.rb | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/test/jobs/outzone_invalid_email_domains_job_test.rb b/test/jobs/outzone_invalid_email_domains_job_test.rb index dd7ce41c2..688494183 100644 --- a/test/jobs/outzone_invalid_email_domains_job_test.rb +++ b/test/jobs/outzone_invalid_email_domains_job_test.rb @@ -9,6 +9,9 @@ class OutzoneInvalidEmailDomainsJobTest < ActiveJob::TestCase end def test_set_outzone_datetime_for_fd_domains_by_invalid_emails + @domain.update(valid_to: Time.zone.now + 3.years) + @domain.reload + assert_nil @domain.outzone_at @domain.schedule_force_delete(type: :soft) @@ -19,24 +22,7 @@ class OutzoneInvalidEmailDomainsJobTest < ActiveJob::TestCase @domain.reload assert @domain.force_delete_scheduled? - assert @domain.valid_to < Time.zone.now + 1.year + assert @domain.valid_to > Time.zone.now + 1.year assert_equal @domain.outzone_at, @domain.force_delete_start + Setting.expire_warning_period.day end - - private - - def prepare_contact - assert_not @domain.force_delete_scheduled? - email = '~@internet.ee' - - contact = @domain.admin_contacts.first - contact.update_attribute(:email, email) - (ValidationEvent::VALID_EVENTS_COUNT_THRESHOLD).times do - contact.verify_email - end - contact.reload - - refute contact.validation_events.last.success? - assert contact.need_to_start_force_delete? - end end