diff --git a/app/jobs/domain_expiration_email_job.rb b/app/jobs/domain_expiration_email_job.rb index b0ecc2948..9d7a5f931 100644 --- a/app/jobs/domain_expiration_email_job.rb +++ b/app/jobs/domain_expiration_email_job.rb @@ -1,10 +1,10 @@ class DomainExpirationEmailJob < Que::Job - def run(domain_id:) + def run(domain_id) domain = Domain.find(domain_id) return if domain.registered? - DomainMailer.expiration(domain: domain).deliver + DomainExpireMailer.expired(domain: domain, registrar: domain.registrar).deliver_now destroy end end diff --git a/app/mailers/domain_expire_mailer.rb b/app/mailers/domain_expire_mailer.rb new file mode 100644 index 000000000..0b869a5d2 --- /dev/null +++ b/app/mailers/domain_expire_mailer.rb @@ -0,0 +1,9 @@ +class DomainExpireMailer < ApplicationMailer + def expired(domain:, registrar:) + @domain = DomainPresenter.new(domain: domain, view: view_context) + @registrar = RegistrarPresenter.new(registrar: registrar, view: view_context) + + subject = default_i18n_subject(domain_name: domain.name) + mail(to: domain.primary_contact_emails, subject: subject) + end +end diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb index 915fffa57..de995173a 100644 --- a/app/mailers/domain_mailer.rb +++ b/app/mailers/domain_mailer.rb @@ -83,14 +83,6 @@ class DomainMailer < ApplicationMailer mail(to: domain.primary_contact_emails) end - def expiration(domain:) - @domain = DomainPresenter.new(domain: domain, view: view_context) - @registrar = RegistrarPresenter.new(registrar: domain.registrar, view: view_context) - - subject = default_i18n_subject(domain_name: domain.name) - mail(to: domain.primary_contact_emails, subject: subject) - end - private # app/models/DomainMailModel provides the data for mail that can be composed_from # which ensures that values of objects are captured when they are valid, not later when this method is executed diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb index dc4db50c0..2e23a08d5 100644 --- a/app/models/domain_cron.rb +++ b/app/models/domain_cron.rb @@ -49,7 +49,7 @@ class DomainCron saved = domain.save(validate: false) if saved - DomainExpirationEmailJob.enqueue(domain_id: domain.id, run_at: send_time) + DomainExpirationEmailJob.enqueue(domain.id, run_at: send_time) marked += 1 end end diff --git a/app/views/mailers/domain_mailer/expiration.html.erb b/app/views/mailers/domain_expire_mailer/expired.html.erb similarity index 100% rename from app/views/mailers/domain_mailer/expiration.html.erb rename to app/views/mailers/domain_expire_mailer/expired.html.erb diff --git a/app/views/mailers/domain_mailer/expiration.text.erb b/app/views/mailers/domain_expire_mailer/expired.text.erb similarity index 100% rename from app/views/mailers/domain_mailer/expiration.text.erb rename to app/views/mailers/domain_expire_mailer/expired.text.erb diff --git a/config/locales/mailers/domain.en.yml b/config/locales/mailers/domain.en.yml index 43cfff784..fadb5a7f6 100644 --- a/config/locales/mailers/domain.en.yml +++ b/config/locales/mailers/domain.en.yml @@ -1,4 +1,4 @@ en: - delete_domain_mailer: - pending: - subject: Kinnitustaotlus domeeni %{domain_name} kustutamiseks .ee registrist / Application for approval for deletion of %{domain_name} + domain_mailer: + force_delete: + subject: Kustutusmenetluse teade diff --git a/config/locales/mailers/domain_expire.en.yml b/config/locales/mailers/domain_expire.en.yml new file mode 100644 index 000000000..3fb6e97da --- /dev/null +++ b/config/locales/mailers/domain_expire.en.yml @@ -0,0 +1,4 @@ +en: + domain_expire_mailer: + expired: + subject: The %{domain_name} domain has expired diff --git a/spec/mailers/domain_expire_mailer_spec.rb b/spec/mailers/domain_expire_mailer_spec.rb new file mode 100644 index 000000000..e536493d8 --- /dev/null +++ b/spec/mailers/domain_expire_mailer_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe DomainExpireMailer do + describe '#expired' do + let(:domain) { instance_spy(Domain, name: 'test.com') } + let(:registrar) { 'registrar' } + let(:domain_presenter) { instance_spy(DomainPresenter) } + let(:registrar_presenter) { instance_spy(RegistrarPresenter) } + subject(:message) { described_class.expired(domain: domain, registrar: registrar) } + + before :example do + expect(DomainPresenter).to receive(:new).and_return(domain_presenter) + expect(RegistrarPresenter).to receive(:new).and_return(registrar_presenter) + end + + it 'has sender' do + expect(message.from).to eq(['noreply@internet.ee']) + end + + it 'has recipient' do + expect(domain).to receive(:primary_contact_emails).and_return(['recipient@test.com']) + expect(message.to).to match_array(['recipient@test.com']) + end + + it 'has subject' do + expect(message.subject).to eq('The test.com domain has expired') + end + + it 'sends message' do + expect { message.deliver! }.to change { ActionMailer::Base.deliveries.count }.by(1) + end + end +end diff --git a/spec/mailers/domain_mailer_spec.rb b/spec/mailers/domain_mailer_spec.rb index 2ba338fc7..e10826645 100644 --- a/spec/mailers/domain_mailer_spec.rb +++ b/spec/mailers/domain_mailer_spec.rb @@ -31,33 +31,4 @@ RSpec.describe DomainMailer do expect { message.deliver! }.to change { ActionMailer::Base.deliveries.count }.by(1) end end - - describe '#expiration' do - let(:domain) { instance_spy(Domain, name: 'test.com') } - let(:domain_presenter) { instance_spy(DomainPresenter) } - let(:registrar_presenter) { instance_spy(RegistrarPresenter) } - subject(:message) { described_class.expiration(domain: domain) } - - before :example do - expect(DomainPresenter).to receive(:new).and_return(domain_presenter) - expect(RegistrarPresenter).to receive(:new).and_return(registrar_presenter) - end - - it 'has sender' do - expect(message.from).to eq(['noreply@internet.ee']) - end - - it 'has recipient' do - expect(domain).to receive(:primary_contact_emails).and_return(['recipient@test.com']) - expect(message.to).to match_array(['recipient@test.com']) - end - - it 'has valid subject' do - expect(message.subject).to eq('The test.com domain has expired') - end - - it 'sends message' do - expect { message.deliver! }.to change { ActionMailer::Base.deliveries.count }.by(1) - end - end end diff --git a/spec/views/mailers/domain_expire_mailer/expired.html.erb_spec.rb b/spec/views/mailers/domain_expire_mailer/expired.html.erb_spec.rb new file mode 100644 index 000000000..9e7fb077b --- /dev/null +++ b/spec/views/mailers/domain_expire_mailer/expired.html.erb_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' +require_relative 'expired_shared' + +RSpec.describe 'mailers/domain_expire_mailer/expired.html.erb' do + before :example do + stub_template 'mailers/shared/registrar/_registrar.et.html' => 'test registrar estonian' + stub_template 'mailers/shared/registrar/_registrar.en.html' => 'test registrar english' + stub_template 'mailers/shared/registrar/_registrar.ru.html' => 'test registrar russian' + end + + include_examples 'domain expire mailer expired' +end diff --git a/spec/views/mailers/domain_expire_mailer/expired.text.erb_spec.rb b/spec/views/mailers/domain_expire_mailer/expired.text.erb_spec.rb new file mode 100644 index 000000000..c842acf15 --- /dev/null +++ b/spec/views/mailers/domain_expire_mailer/expired.text.erb_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' +require_relative 'expired_shared' + +RSpec.describe 'mailers/domain_expire_mailer/expired.text.erb' do + before :example do + stub_template 'mailers/shared/registrar/_registrar.et.text' => 'test registrar estonian' + stub_template 'mailers/shared/registrar/_registrar.en.text' => 'test registrar english' + stub_template 'mailers/shared/registrar/_registrar.ru.text' => 'test registrar russian' + end + + include_examples 'domain expire mailer expired' +end diff --git a/spec/views/mailers/domain_expire_mailer/expired_shared.rb b/spec/views/mailers/domain_expire_mailer/expired_shared.rb new file mode 100644 index 000000000..0db36548f --- /dev/null +++ b/spec/views/mailers/domain_expire_mailer/expired_shared.rb @@ -0,0 +1,53 @@ +require 'rails_helper' + +RSpec.shared_examples 'domain expire mailer expired' do + let(:domain) { instance_spy(DomainPresenter) } + let(:registrar) { instance_spy(RegistrarPresenter) } + let(:registrant) { instance_spy(RegistrantPresenter) } + let(:lang_count) { 3 } + + before :example do + assign(:domain, domain) + assign(:registrar, registrar) + assign(:registrant, registrant) + end + + it 'has registrar info in estonian' do + render + expect(rendered).to have_text('test registrar estonian') + end + + it 'has registrar info in english' do + render + expect(rendered).to have_text('test registrar english') + end + + it 'has registrar info in russian' do + render + expect(rendered).to have_text('test registrar russian') + end + + it 'has domain name' do + mention_count = 4 * lang_count + expect(domain).to receive(:name).exactly(mention_count).times.and_return('test domain name') + render + expect(rendered).to have_text('test domain name', count: mention_count) + end + + domain_attributes = %i( + on_hold_date + delete_date + registrant_name + admin_contact_names + tech_contact_names + nameserver_names + ) + + domain_attributes.each do |attr_name| + it "has domain #{attr_name}" do + expect(domain).to receive(attr_name).exactly(lang_count).times.and_return("test domain #{attr_name}") + render + expect(rendered).to have_text("test domain #{attr_name}", count: lang_count) + end + end +end