Merge pull request #14 from sgmap/customizable-emails
Customizable emails
This commit is contained in:
commit
3c6ae2d005
38 changed files with 722 additions and 143 deletions
51
spec/controllers/admin/mail_templates_controller_spec.rb
Normal file
51
spec/controllers/admin/mail_templates_controller_spec.rb
Normal file
|
@ -0,0 +1,51 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::MailTemplatesController, type: :controller do
|
||||
let(:mail_template) { create :mail_template, :dossier_received }
|
||||
let(:procedure) { create :procedure, mail_templates: [mail_template]}
|
||||
|
||||
before do
|
||||
sign_in procedure.administrateur
|
||||
end
|
||||
|
||||
describe 'GET index' do
|
||||
render_views
|
||||
|
||||
subject { get :index, params: {procedure_id: procedure.id} }
|
||||
|
||||
it { expect(subject.status).to eq 200 }
|
||||
it { expect(subject.body).to include("E-mails personnalisables") }
|
||||
it { expect(subject.body).to include(*procedure.mail_templates.map{ |mt| mt.decorate.name }) }
|
||||
end
|
||||
|
||||
describe 'PATCH update' do
|
||||
let(:object) { 'plop modif' }
|
||||
let(:body) { 'plip modif' }
|
||||
|
||||
context 'when is mail_template id' do
|
||||
subject { patch :update,
|
||||
params: {procedure_id: mail_template.procedure.id,
|
||||
id: mail_template.id,
|
||||
mail_template: {
|
||||
object: object,
|
||||
body: body
|
||||
}} }
|
||||
|
||||
it { expect(subject).to redirect_to admin_procedure_mail_templates_path(mail_template.procedure) }
|
||||
|
||||
it {
|
||||
expect {
|
||||
subject
|
||||
mail_template.reload
|
||||
}.to change(mail_template, :object).from("[TPS] Accusé de réception pour votre dossier n°--numero_dossier--").to(object)
|
||||
}
|
||||
|
||||
it {
|
||||
expect {
|
||||
subject
|
||||
mail_template.reload
|
||||
}.to change(mail_template, :body).from("Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--").to(body)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,42 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::MailsController, type: :controller do
|
||||
let(:procedure) { create :procedure }
|
||||
|
||||
before do
|
||||
sign_in procedure.administrateur
|
||||
end
|
||||
|
||||
describe 'GET index' do
|
||||
subject { get :index, params: {procedure_id: procedure.id} }
|
||||
|
||||
it { expect(subject.status).to eq 200 }
|
||||
end
|
||||
|
||||
describe 'PATCH update' do
|
||||
let(:object) { 'plop modif' }
|
||||
let(:body) { 'plip modif' }
|
||||
|
||||
context 'when is mail_received id' do
|
||||
subject { patch :update,
|
||||
params: {procedure_id: procedure.id,
|
||||
id: procedure.mail_received.id,
|
||||
mail_received: {
|
||||
object: object,
|
||||
body: body
|
||||
}} }
|
||||
|
||||
it { expect(subject).to redirect_to admin_procedure_mails_path }
|
||||
|
||||
describe 'values in database for mail received' do
|
||||
before do
|
||||
subject
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
it { expect(procedure.mail_received.object).to eq object }
|
||||
it { expect(procedure.mail_received.body).to eq body }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
21
spec/decorators/mail_template_decorator_spec.rb
Normal file
21
spec/decorators/mail_template_decorator_spec.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe MailTemplateDecorator do
|
||||
let(:mail_template) {create :mail_template}
|
||||
let(:decorator) { mail_template.decorate }
|
||||
|
||||
context '#name' do
|
||||
subject { decorator.name }
|
||||
|
||||
context 'when mail_template is a MailValidated' do
|
||||
it { is_expected.to eq "E-mail de validation" }
|
||||
end
|
||||
|
||||
context 'when mail_template is a MailReceived' do
|
||||
let(:mail_template) {create :mail_template, :dossier_received}
|
||||
it { is_expected.to eq "E-mail d'accusé de réception" }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
21
spec/factories/mail_templates.rb
Normal file
21
spec/factories/mail_templates.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
FactoryGirl.define do
|
||||
factory :mail_template do
|
||||
object "Object, voila voila"
|
||||
body "Blabla ceci est mon body"
|
||||
type 'MailValidated'
|
||||
|
||||
trait :dossier_submitted do
|
||||
type 'MailSubmitted'
|
||||
end
|
||||
|
||||
trait :dossier_refused do
|
||||
type 'MailRefused'
|
||||
end
|
||||
|
||||
trait :dossier_received do
|
||||
object "[TPS] Accusé de réception pour votre dossier n°--numero_dossier--"
|
||||
body "Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--"
|
||||
type 'MailReceived'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -8,6 +8,7 @@ FactoryGirl.define do
|
|||
direction "direction SGMAP"
|
||||
published false
|
||||
administrateur { create(:administrateur) }
|
||||
mail_templates { [create(:mail_template, :dossier_received)]}
|
||||
|
||||
after(:build) do |procedure, _evaluator|
|
||||
if procedure.module_api_carto.nil?
|
||||
|
|
|
@ -18,9 +18,11 @@ RSpec.describe NotificationMailer, type: :mailer do
|
|||
|
||||
subject(:subject) { described_class.dossier_validated(dossier) }
|
||||
|
||||
before { dossier.reload }
|
||||
|
||||
it { expect(subject.body).to match("Votre dossier N°#{dossier.id} est prêt à être déposé pour instruction.") }
|
||||
it { expect(subject.body).to include("Afin de finaliser son dépôt, merci de vous rendre sur #{users_dossier_recapitulatif_url(dossier_id: dossier.id)}") }
|
||||
it { expect(subject.subject).to eq("Votre dossier TPS N°#{dossier.id} a été validé") }
|
||||
it { expect(subject.body).to include("Afin de finaliser son dépôt, merci de vous rendre sur", users_dossier_recapitulatif_url(dossier_id: dossier.id)) }
|
||||
it { expect(subject.subject).to eq("[TPS] Votre dossier TPS N°#{dossier.id} a été validé") }
|
||||
end
|
||||
|
||||
describe ".dossier_submitted" do
|
||||
|
@ -29,6 +31,8 @@ RSpec.describe NotificationMailer, type: :mailer do
|
|||
|
||||
subject(:subject) { described_class.dossier_submitted(dossier) }
|
||||
|
||||
before { dossier.reload }
|
||||
|
||||
it { expect(subject.body).to match("Nous vous confirmons que votre dossier N°#{dossier.id} a été déposé") }
|
||||
it { expect(subject.body).to match("auprès de #{dossier.procedure.organisation} avec succès") }
|
||||
it { expect(subject.body).to match("ce jour à #{dossier.updated_at}.") }
|
||||
|
@ -41,6 +45,8 @@ RSpec.describe NotificationMailer, type: :mailer do
|
|||
|
||||
subject(:subject) { described_class.dossier_received(dossier) }
|
||||
|
||||
before { dossier.reload }
|
||||
|
||||
it { expect(subject.subject).to eq("[TPS] Accusé de réception pour votre dossier n°#{dossier.id}") }
|
||||
it { expect(subject.body).to match("Votre administration vous confirme la bonne réception de votre dossier n°#{dossier.id}") }
|
||||
end
|
||||
|
|
11
spec/mailers/previews/notification_mailer_preview.rb
Normal file
11
spec/mailers/previews/notification_mailer_preview.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
class NotificationMailerPreview < ActionMailer::Preview
|
||||
|
||||
def dossier_received
|
||||
NotificationMailer.dossier_received(Dossier.last)
|
||||
end
|
||||
|
||||
def dossier_validated
|
||||
NotificationMailer.dossier_validated(Dossier.last)
|
||||
end
|
||||
|
||||
end
|
|
@ -7,25 +7,34 @@ describe MailTemplate do
|
|||
it { is_expected.to belong_to(:procedure) }
|
||||
|
||||
describe '.tags' do
|
||||
subject { MailTemplate.tags }
|
||||
subject { MailTemplate::TAGS }
|
||||
|
||||
it { expect(subject.size).to eq 2 }
|
||||
it { expect(subject.size).to eq 3 }
|
||||
|
||||
describe 'numero_dossier' do
|
||||
subject { super()['numero_dossier'] }
|
||||
subject { super()[:numero_dossier] }
|
||||
|
||||
describe 'attr and description value' do
|
||||
|
||||
it { expect(subject['description']).to eq "Permet d'afficher le numéro de dossier de l'utilisateur." }
|
||||
it { expect(subject[:description]).to eq "Permet d'afficher le numéro de dossier de l'utilisateur." }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'numero_dossier' do
|
||||
subject { super()['libelle_procedure'] }
|
||||
describe 'libelle_procedure' do
|
||||
subject { super()[:libelle_procedure] }
|
||||
|
||||
describe 'attr and description value' do
|
||||
|
||||
it { expect(subject['description']).to eq "Permet d'afficher le libellé de la procédure." }
|
||||
it { expect(subject[:description]).to eq "Permet d'afficher le libellé de la procédure." }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'lien_dossier' do
|
||||
subject { super()[:lien_dossier] }
|
||||
|
||||
describe 'attr and description value' do
|
||||
|
||||
it { expect(subject[:description]).to eq "Permet d'afficher un lien vers le dossier de l'utilisateur." }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -40,7 +49,7 @@ describe MailTemplate do
|
|||
procedure.mail_received.update_column(:object, '[TPS] Dossier n°--numero_dossier--')
|
||||
end
|
||||
|
||||
subject { MailTemplate.replace_tags procedure.mail_received.object, dossier }
|
||||
subject { procedure.mail_received.object_for_dossier dossier }
|
||||
|
||||
it { expect(subject).to eq "[TPS] Dossier n°#{dossier.id}" }
|
||||
end
|
||||
|
@ -50,17 +59,30 @@ describe MailTemplate do
|
|||
procedure.mail_received.update_column(:object, '[TPS] Dossier pour la procédure --libelle_procedure--')
|
||||
end
|
||||
|
||||
subject { MailTemplate.replace_tags procedure.mail_received.object, dossier }
|
||||
subject { procedure.mail_received.object_for_dossier dossier }
|
||||
|
||||
it { expect(subject).to eq "[TPS] Dossier pour la procédure #{procedure.libelle}" }
|
||||
end
|
||||
|
||||
describe 'for tag --lien_dossier--' do
|
||||
include Rails.application.routes.url_helpers
|
||||
include ActionView::Helpers::UrlHelper
|
||||
|
||||
before do
|
||||
procedure.mail_received.update_column(:body, 'Consultez votre dossier ici --lien_dossier--')
|
||||
end
|
||||
|
||||
subject { procedure.mail_received.body_for_dossier dossier }
|
||||
|
||||
it { is_expected.to eq "Consultez votre dossier ici #{link_to users_dossier_recapitulatif_url(dossier), users_dossier_recapitulatif_url(dossier), target: '_blank'}" }
|
||||
end
|
||||
|
||||
describe 'multiple tags' do
|
||||
before do
|
||||
procedure.mail_received.update_column(:object, '[TPS] Dossier n°--numero_dossier-- pour la procédure --libelle_procedure-- et encore le numéro : --numero_dossier--')
|
||||
end
|
||||
|
||||
subject { MailTemplate.replace_tags procedure.mail_received.object, dossier }
|
||||
subject { procedure.mail_received.object_for_dossier dossier }
|
||||
|
||||
it { expect(subject).to eq "[TPS] Dossier n°#{dossier.id} pour la procédure #{procedure.libelle} et encore le numéro : #{dossier.id}" }
|
||||
end
|
||||
|
|
|
@ -6,7 +6,6 @@ describe Procedure do
|
|||
it { is_expected.to have_many(:types_de_champ) }
|
||||
it { is_expected.to have_many(:dossiers) }
|
||||
it { is_expected.to have_many(:mail_templates) }
|
||||
it { is_expected.to have_one(:mail_received) }
|
||||
it { is_expected.to have_one(:module_api_carto) }
|
||||
it { is_expected.to belong_to(:administrateur) }
|
||||
it { is_expected.to have_many(:preference_list_dossiers) }
|
||||
|
@ -36,7 +35,7 @@ describe Procedure do
|
|||
end
|
||||
|
||||
describe '#build_default_mails' do
|
||||
subject { build :procedure }
|
||||
subject { build :procedure, mail_templates: [] }
|
||||
|
||||
it 'call the fonction build_default_mails' do
|
||||
expect(subject).to receive(:build_default_mails)
|
||||
|
@ -47,10 +46,13 @@ describe Procedure do
|
|||
|
||||
before do
|
||||
subject.save
|
||||
subject.reload
|
||||
end
|
||||
|
||||
it { expect(subject.mail_templates.size).to eq 1 }
|
||||
it { expect(subject.mail_templates.size).to eq 2 }
|
||||
|
||||
it { expect(subject.mail_received).not_to be_nil }
|
||||
it { expect(subject.mail_validated).not_to be_nil }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue