From bebd49e5f4b39089f0d34ddddeb04ff8b15f0ac1 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Thu, 3 Nov 2016 20:16:01 +0200 Subject: [PATCH] Add extended registrar's info to "pending_deleted" mailer #180 --- app/mailers/domain_mailer.rb | 28 +++--------- app/models/domain.rb | 3 +- .../domain_mailer/pending_deleted.html.erb | 20 ++++++++- .../domain_mailer/pending_deleted.text.erb | 18 ++++++-- config/locales/en.yml | 1 - config/locales/mailers/domain.en.yml | 2 + spec/mailers/domain_mailer_spec.rb | 45 ++++++++++++++++--- spec/models/domain_spec.rb | 18 ++++++++ .../domain_delete_confirms_routing_spec.rb | 9 ++++ .../pending_deleted.html.erb_spec.rb | 41 +++++++++++++++++ .../pending_deleted.text.erb_spec.rb | 41 +++++++++++++++++ 11 files changed, 190 insertions(+), 36 deletions(-) create mode 100644 spec/routing/registrant/domain_delete_confirms_routing_spec.rb create mode 100644 spec/views/mailers/domain_mailer/pending_deleted.html.erb_spec.rb create mode 100644 spec/views/mailers/domain_mailer/pending_deleted.text.erb_spec.rb diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb index 905927344..06a18b426 100644 --- a/app/mailers/domain_mailer.rb +++ b/app/mailers/domain_mailer.rb @@ -47,29 +47,13 @@ class DomainMailer < ApplicationMailer compose_from(params) end - def pending_deleted(domain_id, old_registrant_id, should_deliver) - @domain = Domain.find_by(id: domain_id) - @old_registrant = Registrant.find(old_registrant_id) - return unless @domain - return if delivery_off?(@domain, should_deliver) + def pending_deleted(domain:, registrant:) + @domain = DomainPresenter.new(domain: domain, view: view_context) + @registrar = RegistrarPresenter.new(registrar: domain.registrar, view: view_context) + @verification_url = registrant_domain_delete_confirm_url(domain, token: domain.registrant_verification_token) - if @domain.registrant_verification_token.blank? - logger.warn "EMAIL NOT DELIVERED: registrant_verification_token is missing for #{@domain.name}" - return - end - - if @domain.registrant_verification_asked_at.blank? - logger.warn "EMAIL NOT DELIVERED: registrant_verification_asked_at is missing for #{@domain.name}" - return - end - - confirm_path = "#{ENV['registrant_url']}/registrant/domain_delete_confirms" - @verification_url = "#{confirm_path}/#{@domain.id}?token=#{@domain.registrant_verification_token}" - - return if whitelist_blocked?(@old_registrant.email) - mail(to: format(@old_registrant.email), - subject: "#{I18n.t(:domain_pending_deleted_subject, - name: @domain.name)} [#{@domain.name}]") + subject = default_i18n_subject(domain_name: domain.name) + mail(to: registrant.email, subject: subject) end def pending_delete_rejected_notification(domain_id, should_deliver) diff --git a/app/models/domain.rb b/app/models/domain.rb index fad363bed..9960b12a0 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -439,7 +439,8 @@ class Domain < ActiveRecord::Base pending_delete_confirmation! save(validate: false) # should check if this did succeed - DomainMailer.pending_deleted(id, registrant_id_was, deliver_emails).deliver + previous_registrant = Registrant.find(registrant_id_was) + DomainMailer.pending_deleted(domain: self, registrant: previous_registrant).deliver end def cancel_pending_delete diff --git a/app/views/mailers/domain_mailer/pending_deleted.html.erb b/app/views/mailers/domain_mailer/pending_deleted.html.erb index 6d0a47f57..10960019c 100644 --- a/app/views/mailers/domain_mailer/pending_deleted.html.erb +++ b/app/views/mailers/domain_mailer/pending_deleted.html.erb @@ -1,6 +1,14 @@ Tere

-Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @domain.registrar_name %> poole. +Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole: + +

+ <%= @registrar.name %>
+ Email: <%= @registrar.email %>
+ Telefon: <%= @registrar.phone %>
+ Veebileht: <%= @registrar.url %> +

+

Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan.

@@ -14,7 +22,15 @@ Eesti Interneti Sihtasutus

Hi,

-Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please contact your registrar <%= @domain.registrar_name %>. +Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please contact your registrar: + +

+ <%= @registrar.name %>
+ Email: <%= @registrar.email %>
+ Phone: <%= @registrar.phone %>
+ Website: <%= @registrar.url %> +

+

To confirm the update please visit this website, once again review the data and press approve:
<%= link_to @verification_url, @verification_url %> diff --git a/app/views/mailers/domain_mailer/pending_deleted.text.erb b/app/views/mailers/domain_mailer/pending_deleted.text.erb index cc49cbbb0..1c8877740 100644 --- a/app/views/mailers/domain_mailer/pending_deleted.text.erb +++ b/app/views/mailers/domain_mailer/pending_deleted.text.erb @@ -1,11 +1,16 @@ Tere -Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @domain.registrar_name %> poole. +Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole: + +<%= @registrar.name %> +Email: <%= @registrar.email %> +Telefon: <%= @registrar.phone %> +Veebileht: <%= @registrar.url %> Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan. Taotlus on aktiivne <%= Setting.expire_pending_confirmation %> tundi ja lükatakse automaatselt tagasi kui te seda enne ise ei kinnita või tagasi lükka. -<%= link_to @verification_url, @verification_url %> +<%= @verification_url %> Lugupidamisega Eesti Interneti Sihtasutus @@ -14,10 +19,15 @@ Eesti Interneti Sihtasutus Hi, -Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please contact your registrar <%= @domain.registrar_name %>. +Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. In case of problems please contact your registrar: + +<%= @registrar.name %> +Email: <%= @registrar.email %> +Phone: <%= @registrar.phone %> +Website: <%= @registrar.url %> To confirm the update please visit this website, once again review the data and press approve: -<%= link_to @verification_url, @verification_url %> +<%= @verification_url %> The application will remain in pending status for <%= Setting.expire_pending_confirmation %> hrs and will be automatically rejected if it is not approved nor rejected before. diff --git a/config/locales/en.yml b/config/locales/en.yml index 5c301d0d2..cbc61b29c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -803,7 +803,6 @@ en: pending_update_expired_notification_for_new_registrant_subject: "Domeeni %{name} registreerija vahetuse taotlus on tühistatud / %{name} registrant change cancelled" registrant_updated_notification_for_new_registrant_subject: 'Domeeni %{name} registreerija vahetus teostatud / Registrant change of %{name} has been finished.' registrant_updated_notification_for_old_registrant_subject: 'Domeeni %{name} registreerija vahetus teostatud / Registrant change of %{name} has been finished.' - domain_pending_deleted_subject: "Kinnitustaotlus domeeni %{name} kustutamiseks .ee registrist / Application for approval for deletion of %{name}" pending_delete_rejected_notification_subject: "Domeeni %{name} kustutamise taotlus tagasi lükatud / %{name} deletion declined" pending_delete_expired_notification_subject: "Domeeni %{name} kustutamise taotlus on tühistatud / %{name} deletion cancelled" delete_confirmation_subject: "Domeeni %{name} kustutatud / %{name} deleted" diff --git a/config/locales/mailers/domain.en.yml b/config/locales/mailers/domain.en.yml index 07b3a8f89..c28ba6b00 100644 --- a/config/locales/mailers/domain.en.yml +++ b/config/locales/mailers/domain.en.yml @@ -4,3 +4,5 @@ en: subject: The %{domain_name} domain has expired force_delete: subject: Kustutusmenetluse teade + pending_deleted: + subject: Kinnitustaotlus domeeni %{domain_name} kustutamiseks .ee registrist / Application for approval for deletion of %{domain_name} diff --git a/spec/mailers/domain_mailer_spec.rb b/spec/mailers/domain_mailer_spec.rb index 2f7a38afe..1edc35f6a 100644 --- a/spec/mailers/domain_mailer_spec.rb +++ b/spec/mailers/domain_mailer_spec.rb @@ -1,6 +1,45 @@ require 'rails_helper' RSpec.describe DomainMailer do + describe '#pending_deleted' do + let(:domain) { instance_spy(Domain, name: 'test.com') } + let(:registrant) { instance_spy(Registrant, email: 'registrant@test.com') } + let(:domain_presenter) { instance_spy(DomainPresenter) } + let(:registrar_presenter) { instance_spy(RegistrarPresenter) } + subject(:message) { described_class.pending_deleted(domain: domain, registrant: registrant) } + + 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 registrant email as a recipient' do + expect(message.to).to match_array(['registrant@test.com']) + end + + it 'has subject' do + subject = 'Kinnitustaotlus domeeni test.com kustutamiseks .ee registrist' \ + ' / Application for approval for deletion of test.com' + + expect(message.subject).to eq(subject) + end + + it 'has confirmation url' do + allow(domain).to receive(:id).and_return(1) + expect(domain).to receive(:registrant_verification_token).and_return('test') + url = registrant_domain_delete_confirm_url(domain, token: 'test') + expect(message.body.parts.first.decoded).to include(url) + end + + it 'sends message' do + expect { message.deliver! }.to change { ActionMailer::Base.deliveries.count }.by(1) + end + end + describe '#force_delete' do let(:domain) { instance_spy(Domain, name: 'test.com') } let(:domain_presenter) { instance_spy(DomainPresenter) } @@ -15,18 +54,15 @@ RSpec.describe DomainMailer do end it 'has sender' do - message.deliver! 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']) - message.deliver! expect(message.to).to match_array(['recipient@test.com']) end it 'has valid subject' do - message.deliver! expect(message.subject).to eq('Kustutusmenetluse teade') end @@ -47,18 +83,15 @@ RSpec.describe DomainMailer do end it 'has sender' do - message.deliver! 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']) - message.deliver! expect(message.to).to match_array(['recipient@test.com']) end it 'has valid subject' do - message.deliver! expect(message.subject).to eq('The test.com domain has expired') end diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index 5b8752d8d..896280299 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -801,4 +801,22 @@ RSpec.describe Domain, db: false do )) end end + + describe '#pending_delete!' do + let(:domain) { described_class.new } + let(:previous_registrant) { instance_double(Registrant) } + let(:message) { instance_double(Mail::Message) } + + before :example do + expect(Registrant).to receive(:find).and_return(previous_registrant) + allow(domain).to receive(:registrant_verification_asked?).and_return(true) + allow(domain).to receive(:save) + end + + it 'sends notification email' do + expect(DomainMailer).to receive(:pending_deleted).with(domain: domain, registrant: previous_registrant).and_return(message) + expect(message).to receive(:deliver) + domain.pending_delete! + end + end end diff --git a/spec/routing/registrant/domain_delete_confirms_routing_spec.rb b/spec/routing/registrant/domain_delete_confirms_routing_spec.rb new file mode 100644 index 000000000..cf7691bb4 --- /dev/null +++ b/spec/routing/registrant/domain_delete_confirms_routing_spec.rb @@ -0,0 +1,9 @@ +require 'rails_helper' + +RSpec.describe Registrant::DomainDeleteConfirmsController do + describe 'routing' do + it 'routes to #show' do + expect(get: '/registrant/domain_delete_confirms/1').to route_to('registrant/domain_delete_confirms#show', id: '1') + end + end +end diff --git a/spec/views/mailers/domain_mailer/pending_deleted.html.erb_spec.rb b/spec/views/mailers/domain_mailer/pending_deleted.html.erb_spec.rb new file mode 100644 index 000000000..7d58f3146 --- /dev/null +++ b/spec/views/mailers/domain_mailer/pending_deleted.html.erb_spec.rb @@ -0,0 +1,41 @@ +require 'rails_helper' + +RSpec.describe 'mailers/domain_mailer/pending_deleted.html.erb' do + let(:domain) { instance_spy(DomainPresenter) } + let(:registrar) { instance_spy(RegistrarPresenter) } + let(:lang_count) { 2 } + + before :example do + assign(:domain, domain) + assign(:registrar, registrar) + assign(:verification_url, 'test url') + end + + it 'has domain name' do + mention_count = 1 * 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 + + it 'has verification url' do + mention_count = 1 * lang_count + render + expect(rendered).to have_text('test url', count: mention_count) + end + + registrar_attributes = %i( + name + email + phone + url + ) + + registrar_attributes.each do |attr_name| + it "has registrar #{attr_name}" do + expect(registrar).to receive(attr_name).exactly(lang_count).times.and_return("test registrar #{attr_name}") + render + expect(rendered).to have_text("test registrar #{attr_name}", count: lang_count) + end + end +end diff --git a/spec/views/mailers/domain_mailer/pending_deleted.text.erb_spec.rb b/spec/views/mailers/domain_mailer/pending_deleted.text.erb_spec.rb new file mode 100644 index 000000000..cc12bee64 --- /dev/null +++ b/spec/views/mailers/domain_mailer/pending_deleted.text.erb_spec.rb @@ -0,0 +1,41 @@ +require 'rails_helper' + +RSpec.describe 'mailers/domain_mailer/pending_deleted.text.erb' do + let(:domain) { instance_spy(DomainPresenter) } + let(:registrar) { instance_spy(RegistrarPresenter) } + let(:lang_count) { 2 } + + before :example do + assign(:domain, domain) + assign(:registrar, registrar) + end + + it 'has domain name' do + mention_count = 1 * 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 + + it 'has verification url' do + mention_count = 1 * lang_count + assign(:verification_url, 'test url') + render + expect(rendered).to have_text('test url', count: mention_count) + end + + registrar_attributes = %i( + name + email + phone + url + ) + + registrar_attributes.each do |attr_name| + it "has registrar #{attr_name}" do + expect(registrar).to receive(attr_name).exactly(lang_count).times.and_return("test registrar #{attr_name}") + render + expect(rendered).to have_text("test registrar #{attr_name}", count: lang_count) + end + end +end