Merge branch 'send_user_notification_when_invite_send_a_message' into develop

This commit is contained in:
Mathieu Magnin 2017-02-01 16:44:31 +01:00
commit e99746639b
9 changed files with 102 additions and 48 deletions

View file

@ -42,20 +42,20 @@ class CommentairesController < ApplicationController
flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe."
end
notify_user_with_mail(@commentaire)
if is_gestionnaire?
unless current_gestionnaire.follow? @commentaire.dossier
current_gestionnaire.toggle_follow_dossier @commentaire.dossier
end
NotificationMailer.new_answer(@commentaire.dossier).deliver_now! if saved
redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id'])
else
if current_user.email != @commentaire.dossier.user.email
invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first
redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id)
else
redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: params['dossier_id'])
redirect_to users_dossier_recapitulatif_path(params['dossier_id'])
end
end
end
@ -63,4 +63,10 @@ class CommentairesController < ApplicationController
def is_gestionnaire?
false
end
private
def notify_user_with_mail(commentaire)
NotificationMailer.new_answer(commentaire.dossier).deliver_now! unless current_user.try(:email) == commentaire.dossier.user.email
end
end

View file

@ -1,14 +0,0 @@
%div.commentaire
.row
%div.col-lg-12.col-md-12.col-sm-12.col-xs-12.comment-header
= commentaire.header
.row
%div.col-lg-12.col-md-12.col-sm-12.col-xs-12.content
= commentaire.body.html_safe
- if file = commentaire.piece_justificative
.row
%div.col-lg-12.col-md-12.col-sm-12.col-xs-12.file
= link_to file.content_url, class: 'link', target: '_blank' do
%span.fa.fa-file
%div
= file.original_filename

View file

@ -7,41 +7,25 @@
MESSAGERIE
.col-xs-2.count
- message_count = dossier_facade.commentaires.count
= (message_count == 1) ? "1 message" : "#{message_count} messages"
= pluralize(@facade.commentaires.count, "message")
.alert.alert-info
Cette messagerie permet d'échanger entre le demandeur et le service instructeur.
.body
- if dossier_facade.commentaires.any?
.commentaires
= render partial: 'dossiers/commentaire', collection: dossier_facade.commentaires.object.sort
= render partial: 'dossiers/commentaires/commentaire', collection: dossier_facade.commentaires.object.sort
.split-hr
#new-commentaire
= form_tag(url_for({ controller: 'commentaires', action: :create, dossier_id: dossier_facade.dossier.id, champ_id: dossier_facade.champ_id }), class: 'form-inline', method: 'POST', multipart: true) do
= render partial: 'dossiers/commentaires/form', locals: { dossier_facade: @facade }
%textarea.form-control{id: 'texte_commentaire', class: 'wysihtml5', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', placeholder:"Commentaire"}
.row
.col-md-6
%h4.text-primary{style: 'margin-top: 0px'} Ajouter un fichier
= file_field_tag "piece_justificative[content]", accept: PieceJustificative.accept_format, style: 'float: left; margin-left: 20px'
.col-md-6
%input#save-message.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' }
.last-commentaire.clearfix
- if last_comment = dossier_facade.commentaires.first
%div
DERNIER MESSAGE
= render partial: 'dossiers/commentaire', object: last_comment
-# = "DERNIER MESSAGE (#{last_comment.header})"
-# .content
-# = last_comment.body.html_safe
-# - if file = last_comment.piece_justificative
-# .file
-# = link_to file.content_url, class: 'link', target: '_blank' do
-# %span.fa.fa-file
-# = file.original_filename
= render partial: 'dossiers/commentaires/commentaire', object: last_comment
#open-message.new-action
ENVOYER UN MESSAGE

View file

@ -0,0 +1,11 @@
%div.commentaire
.comment-header
= commentaire.header
.content
= commentaire.body.html_safe
- if file = commentaire.piece_justificative
.file
= link_to file.content_url, class: 'link', target: '_blank' do
%span.fa.fa-file
%div
= file.original_filename

View file

@ -0,0 +1,11 @@
= form_tag(url_for({ controller: 'commentaires', action: :create, dossier_id: dossier_facade.dossier.id, champ_id: dossier_facade.champ_id }), class: 'form-inline', method: 'POST', multipart: true) do
%textarea.form-control{id: 'texte_commentaire', class: 'wysihtml5', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', placeholder:"Commentaire"}
.row
.col-md-6
%h4.text-primary{style: 'margin-top: 0px'} Ajouter un fichier
= file_field_tag "piece_justificative[content]", accept: PieceJustificative.accept_format, style: 'float: left; margin-left: 20px'
.col-md-6
%input#save-message.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' }

View file

@ -21,3 +21,7 @@ end
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful'
# end
ActiveSupport::Inflector.inflections(:fr) do |inflect|
inflect.plural(/$/, 's')
inflect.plural(/(hib|ch|bij|caill|p|gen|jouj)ou$/i, '\1oux')
end

View file

@ -5,19 +5,67 @@ describe Users::Dossiers::CommentairesController, type: :controller do
let(:texte_commentaire) { 'Commentaire de test' }
describe '#POST create' do
subject {
post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire}
dossier.reload
}
context 'when invite is connected' do
let!(:invite) { create(:invite, :with_user, dossier: dossier) }
before do
sign_in invite.user
dossier.replied!
post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire}
dossier.reload
end
it { is_expected.to redirect_to users_dossiers_invite_path(invite.id) }
it { expect(dossier.state).to eq 'replied' }
it do
subject
is_expected.to redirect_to users_dossiers_invite_path(invite.id)
expect(dossier.state).to eq 'replied'
end
it 'should notify user' do
expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
end
context 'when user is connected' do
before do
sign_in dossier.user
end
it 'do not send a mail to notify user' do
expect(NotificationMailer).to_not receive(:new_answer)
subject
end
end
end
describe '#notify_user_with_mail' do
let(:commentaire){create(:commentaire)}
context 'when usager is writing a commentaire on dossier' do
before { sign_in commentaire.dossier.user }
it {
expect(NotificationMailer).to_not receive(:new_answer)
subject.send(:notify_user_with_mail, commentaire)
}
end
context 'when anybody else but usager is writing a commentaire' do
before { sign_in create(:user, email: 'administrateur@test.fr') }
it {
expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject.send(:notify_user_with_mail, commentaire)
}
end
end
end

View file

@ -46,5 +46,9 @@ FactoryGirl.define do
dossier.cerfa << create(:cerfa)
end
end
trait :replied do
state 'replied'
end
end
end