Merge pull request #14 from sgmap/customizable-emails

Customizable emails
This commit is contained in:
Xavier Julien 2017-02-13 15:20:04 +01:00 committed by GitHub
commit 3c6ae2d005
38 changed files with 722 additions and 143 deletions

View 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

View file

@ -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

View 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

View 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

View file

@ -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?

View file

@ -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

View 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

View file

@ -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

View file

@ -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