Merge pull request #3314 from betagouv/fix-contact-to-messagerie

contact: fix sending a message to the messagerie
This commit is contained in:
Pierre de La Morinerie 2019-01-22 16:24:03 +01:00 committed by GitHub
commit 265fa43f6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 29 deletions

View file

@ -60,11 +60,11 @@ class SupportController < ApplicationController
end end
def create_commentaire def create_commentaire
params = { attributes = {
file: params[:file], file: params[:file],
body: "[#{params[:subject]}]<br><br>#{params[:text]}" body: "[#{params[:subject]}]<br><br>#{params[:text]}"
} }
commentaire = CommentaireService.build_with_email(email, dossier, params) commentaire = CommentaireService.build_with_email(email, dossier, attributes)
commentaire.save! commentaire.save!
end end

View file

@ -7,6 +7,7 @@ describe SupportController, type: :controller do
before do before do
sign_in user sign_in user
end end
let(:user) { create(:user) } let(:user) { create(:user) }
it 'should not have email field' do it 'should not have email field' do
@ -51,55 +52,67 @@ describe SupportController, type: :controller do
end end
describe "send form" do describe "send form" do
it 'should create conversation' do subject do
expect(subject).not_to receive(:create_commentaire) post :create, params: { subject: 'bonjour', text: 'un message' }
allow(subject).to receive(:create_conversation).and_return(true) end
post :create, params: { it 'creates a conversation on HelpScout' do
subject: 'bonjour', expect_any_instance_of(Helpscout::FormAdapter).to receive(:send_form).and_return(true)
text: 'un message'
} expect { subject }.to change(Commentaire, :count).by(0)
expect(flash[:notice]).to match('Votre message a été envoyé.') expect(flash[:notice]).to match('Votre message a été envoyé.')
expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true) expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true)
end end
context "with dossier" do context 'when a drafted dossier is mentionned' do
let(:user) { dossier.user }
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let(:user) { dossier.user }
it 'should create conversation' do subject do
expect(subject).not_to receive(:create_commentaire)
allow(subject).to receive(:create_conversation).and_return(true)
post :create, params: { post :create, params: {
dossier_id: dossier.id, dossier_id: dossier.id,
type: Helpscout::FormAdapter::TYPE_INSTRUCTION, type: Helpscout::FormAdapter::TYPE_INSTRUCTION,
subject: 'bonjour', subject: 'bonjour',
text: 'un message' text: 'un message'
} }
end
it 'creates a conversation on HelpScout' do
expect_any_instance_of(Helpscout::FormAdapter).to receive(:send_form).and_return(true)
expect { subject }.to change(Commentaire, :count).by(0)
expect(flash[:notice]).to match('Votre message a été envoyé.') expect(flash[:notice]).to match('Votre message a été envoyé.')
expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true) expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true)
end end
end
context "en_construction" do context 'when a submitted dossier is mentionned' do
let(:dossier) { create(:dossier, :en_construction) } let(:dossier) { create(:dossier, :en_construction) }
let(:user) { dossier.user }
it 'should create commentaire' do subject do
allow(subject).to receive(:create_commentaire).and_return(true) post :create, params: {
expect(subject).not_to receive(:create_conversation) dossier_id: dossier.id,
type: Helpscout::FormAdapter::TYPE_INSTRUCTION,
subject: 'bonjour',
text: 'un message'
}
end
post :create, params: { it 'posts the message to the dossier messagerie' do
dossier_id: dossier.id, expect_any_instance_of(Helpscout::FormAdapter).not_to receive(:send_form)
type: Helpscout::FormAdapter::TYPE_INSTRUCTION,
subject: 'bonjour',
text: 'un message'
}
expect(flash[:notice]).to match('Votre message a été envoyé sur la messagerie de votre dossier.') expect { subject }.to change(Commentaire, :count).by(1)
expect(response).to redirect_to messagerie_dossier_path(dossier)
end expect(Commentaire.last.email).to eq(user.email)
expect(Commentaire.last.dossier).to eq(dossier)
expect(Commentaire.last.body).to include('[bonjour]')
expect(Commentaire.last.body).to include('un message')
expect(flash[:notice]).to match('Votre message a été envoyé sur la messagerie de votre dossier.')
expect(response).to redirect_to messagerie_dossier_path(dossier)
end end
end end
end end