feat: answer message to administrateur as gestionnaire
This commit is contained in:
parent
b19413643c
commit
a6ca4b668e
25 changed files with 321 additions and 12 deletions
|
@ -4,4 +4,12 @@ class GroupeGestionnaire::Card::CommentairesComponent < ApplicationComponent
|
||||||
@administrateur = administrateur
|
@administrateur = administrateur
|
||||||
@path = path
|
@path = path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def number_commentaires
|
||||||
|
if @administrateur
|
||||||
|
@administrateur.commentaire_groupe_gestionnaires.size
|
||||||
|
else
|
||||||
|
@groupe_gestionnaire.commentaire_groupe_gestionnaires.select(:sender_id, :sender_type).distinct.size
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
%p.fr-badge.fr-badge--success Validé
|
%p.fr-badge.fr-badge--success Validé
|
||||||
%div
|
%div
|
||||||
.line-count.fr-my-1w
|
.line-count.fr-my-1w
|
||||||
%p.fr-tag= @administrateur.commentaire_groupe_gestionnaires.size
|
%p.fr-tag= number_commentaires
|
||||||
%h3.fr-h6
|
%h3.fr-h6
|
||||||
= t('.title', count: @administrateur.commentaire_groupe_gestionnaires.size)
|
= t('.title', count: number_commentaires)
|
||||||
%p.fr-btn.fr-btn--tertiary= t('views.shared.actions.see')
|
%p.fr-btn.fr-btn--tertiary= t('views.shared.actions.see')
|
||||||
|
|
|
@ -5,6 +5,7 @@ class GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent <
|
||||||
@commentaire = commentaire
|
@commentaire = commentaire
|
||||||
@connected_user = connected_user
|
@connected_user = connected_user
|
||||||
@is_gestionnaire = is_gestionnaire
|
@is_gestionnaire = is_gestionnaire
|
||||||
|
@groupe_gestionnaire = commentaire.groupe_gestionnaire
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -13,7 +14,7 @@ class GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent <
|
||||||
if @commentaire.sent_by?(@connected_user)
|
if @commentaire.sent_by?(@connected_user)
|
||||||
t('.you')
|
t('.you')
|
||||||
else
|
else
|
||||||
(@commentaire.gestionnaire || @commentaire.sender).email
|
@commentaire.gestionnaire_id ? @commentaire.gestionnaire_email : @commentaire.sender_email
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -10,3 +10,9 @@
|
||||||
%p= t('.deleted_body')
|
%p= t('.deleted_body')
|
||||||
- else
|
- else
|
||||||
= render SimpleFormatComponent.new(@commentaire.body, allow_a: false)
|
= render SimpleFormatComponent.new(@commentaire.body, allow_a: false)
|
||||||
|
|
||||||
|
.message-extras.flex.justify-start
|
||||||
|
- if @commentaire.soft_deletable?(@connected_user)
|
||||||
|
= button_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire), method: :delete, class: 'button danger', form: { data: { turbo: true, turbo_confirm: t('.confirm') } } do
|
||||||
|
%span.icon.delete
|
||||||
|
= t('.delete_button')
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
class GroupeGestionnaire::GroupeGestionnaireListCommentaires::CommentaireComponent < ApplicationComponent
|
||||||
|
include ApplicationHelper
|
||||||
|
|
||||||
|
def initialize(groupe_gestionnaire:, commentaire:)
|
||||||
|
@groupe_gestionnaire = groupe_gestionnaire
|
||||||
|
@commentaire = commentaire
|
||||||
|
end
|
||||||
|
|
||||||
|
def email
|
||||||
|
if @commentaire.sender == current_gestionnaire
|
||||||
|
"#{current_gestionnaire.email} (C’est vous !)"
|
||||||
|
else
|
||||||
|
@commentaire.sender_email
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def created_at
|
||||||
|
try_format_datetime(@commentaire.created_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
def see_button
|
||||||
|
link_to 'Voir',
|
||||||
|
gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire),
|
||||||
|
class: 'button'
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
%tr{ id: dom_id(@commentaire) }
|
||||||
|
%td= email
|
||||||
|
%td= created_at
|
||||||
|
%td= see_button
|
|
@ -12,7 +12,7 @@ module Administrateurs
|
||||||
end
|
end
|
||||||
|
|
||||||
def commentaires
|
def commentaires
|
||||||
@commentaire = Commentaire.new
|
@commentaire = CommentaireGroupeGestionnaire.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_commentaire
|
def create_commentaire
|
||||||
|
@ -42,7 +42,7 @@ module Administrateurs
|
||||||
end
|
end
|
||||||
|
|
||||||
def commentaire_params
|
def commentaire_params
|
||||||
params.require(:commentaire).permit(:body)
|
params.require(:commentaire_groupe_gestionnaire).permit(:body)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
module Gestionnaires
|
||||||
|
class GroupeGestionnaireCommentairesController < GestionnaireController
|
||||||
|
before_action :retrieve_groupe_gestionnaire
|
||||||
|
before_action :retrieve_last_commentaire, only: [:show, :create, :destroy]
|
||||||
|
|
||||||
|
def index
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
@commentaire = CommentaireGroupeGestionnaire.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender: @last_commentaire.sender, gestionnaire: current_gestionnaire))
|
||||||
|
|
||||||
|
if @commentaire.errors.empty?
|
||||||
|
flash.notice = "Message envoyé"
|
||||||
|
redirect_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire)
|
||||||
|
else
|
||||||
|
flash.alert = @commentaire.errors.full_messages
|
||||||
|
render :show
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
if @last_commentaire.soft_deletable?(current_gestionnaire)
|
||||||
|
@last_commentaire.soft_delete!
|
||||||
|
|
||||||
|
flash.notice = t('.notice')
|
||||||
|
else
|
||||||
|
flash.alert = t('.alert_acl')
|
||||||
|
end
|
||||||
|
# redirect_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @last_commentaire)
|
||||||
|
rescue Discard::RecordNotDiscarded
|
||||||
|
flash.alert = t('.alert_already_discarded')
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def retrieve_last_commentaire
|
||||||
|
@last_commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def commentaire_params
|
||||||
|
params.require(:commentaire_groupe_gestionnaire).permit(:body)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,6 +6,8 @@ class CommentaireGroupeGestionnaire < ApplicationRecord
|
||||||
|
|
||||||
validates :body, presence: { message: "ne peut être vide" }
|
validates :body, presence: { message: "ne peut être vide" }
|
||||||
|
|
||||||
|
before_create :set_emails
|
||||||
|
|
||||||
def soft_deletable?(connected_user)
|
def soft_deletable?(connected_user)
|
||||||
sent_by?(connected_user) && sent_by_gestionnaire? && !discarded?
|
sent_by?(connected_user) && sent_by_gestionnaire? && !discarded?
|
||||||
end
|
end
|
||||||
|
@ -25,4 +27,11 @@ class CommentaireGroupeGestionnaire < ApplicationRecord
|
||||||
someone == sender
|
someone == sender
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_emails
|
||||||
|
self.sender_email = sender.email
|
||||||
|
self.gestionnaire_email = gestionnaire&.email
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
- if @last_commentaire.discarded?
|
||||||
|
= turbo_stream.update @last_commentaire do
|
||||||
|
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: @last_commentaire, connected_user: current_gestionnaire))
|
|
@ -0,0 +1,16 @@
|
||||||
|
= render partial: 'gestionnaires/breadcrumbs',
|
||||||
|
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
|
||||||
|
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
|
||||||
|
["Messagerie"]], preview: false }
|
||||||
|
|
||||||
|
.container
|
||||||
|
%h1 Messagerie de « #{@groupe_gestionnaire.name} »
|
||||||
|
|
||||||
|
%table.table
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th= 'Adresse email'
|
||||||
|
%th= 'Dernier message'
|
||||||
|
%th
|
||||||
|
%tbody#commentaires
|
||||||
|
= render(GroupeGestionnaire::GroupeGestionnaireListCommentaires::CommentaireComponent.with_collection(@groupe_gestionnaire.commentaire_groupe_gestionnaires.select("sender_id, sender_type, sender_email, MAX(id) as id, MAX(created_at) as created_at").group(:sender_id, :sender_type, :sender_email).order("MAX(id) DESC"), groupe_gestionnaire: @groupe_gestionnaire))
|
|
@ -0,0 +1,15 @@
|
||||||
|
= render partial: 'gestionnaires/breadcrumbs',
|
||||||
|
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
|
||||||
|
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
|
||||||
|
["Messagerie", gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire)],
|
||||||
|
[@last_commentaire.sender_email]], preview: false }
|
||||||
|
|
||||||
|
.container
|
||||||
|
%h1 Messages de « #{ @last_commentaire.sender_email } »
|
||||||
|
.messagerie.container
|
||||||
|
%ul.messages-list{ data: { controller: 'scroll-to' } }
|
||||||
|
- @groupe_gestionnaire.commentaire_groupe_gestionnaires.where(sender_id: @last_commentaire.sender_id, sender_type: @last_commentaire.sender_type).each do |commentaire|
|
||||||
|
%li.message{ class: commentaire_is_from_me_class(commentaire, current_gestionnaire), id: dom_id(commentaire) }
|
||||||
|
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: commentaire, connected_user: current_gestionnaire))
|
||||||
|
- if @last_commentaire.sender
|
||||||
|
= render partial: "shared/groupe_gestionnaires/commentaires/form", locals: { commentaire: @commentaire, form_url: gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire) }
|
|
@ -22,3 +22,5 @@
|
||||||
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire))
|
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire))
|
||||||
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_administrateurs_path(@groupe_gestionnaire))
|
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_administrateurs_path(@groupe_gestionnaire))
|
||||||
= render GroupeGestionnaire::Card::ChildrenComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_children_path(@groupe_gestionnaire))
|
= render GroupeGestionnaire::Card::ChildrenComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_children_path(@groupe_gestionnaire))
|
||||||
|
= render GroupeGestionnaire::Card::CommentairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, administrateur: nil, path: gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire))
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
= render NestedForms::FormOwnerComponent.new
|
= render NestedForms::FormOwnerComponent.new
|
||||||
= form_for(commentaire, url: form_url) do |f|
|
= form_for(commentaire, url: form_url) do |f|
|
||||||
- dossier = commentaire.dossier
|
- if @last_commentaire
|
||||||
- placeholder = t('views.shared.dossiers.messages.form.write_message_to_administration_placeholder')
|
= f.hidden_field :last_commentaire, value: @last_commentaire.id, name: :id
|
||||||
- if instructeur_signed_in? || administrateur_signed_in? || expert_signed_in?
|
|
||||||
- placeholder = t('views.shared.dossiers.messages.form.write_message_placeholder')
|
|
||||||
%p.mandatory-explanation= t('asterisk_html', scope: [:utils])
|
%p.mandatory-explanation= t('asterisk_html', scope: [:utils])
|
||||||
|
|
||||||
= render Dsfr::InputComponent.new(form: f, attribute: :body, input_type: :text_area, opts: { rows: 5, placeholder: placeholder, title: placeholder, class: 'fr-input message-textarea'})
|
= render Dsfr::InputComponent.new(form: f, attribute: :body, input_type: :text_area, opts: { rows: 5, placeholder: t('views.gestionnaires.groupe_gestionnaires.messages.form.write_message_placeholder'), title: t('views.gestionnaires.groupe_gestionnaires.messages.form.write_message_placeholder'), class: 'fr-input message-textarea'})
|
||||||
|
|
||||||
.fr-mt-3w
|
.fr-mt-3w
|
||||||
= f.submit t('views.shared.dossiers.messages.form.send_message'), class: 'fr-btn', data: { disable: true }
|
= f.submit t('views.gestionnaires.groupe_gestionnaires.messages.form.send_message'), class: 'fr-btn', data: { disable: true }
|
||||||
|
|
|
@ -346,6 +346,13 @@ en:
|
||||||
form: "Form"
|
form: "Form"
|
||||||
edit_siret: "Edit SIRET"
|
edit_siret: "Edit SIRET"
|
||||||
edit_identity: "Edit identity data"
|
edit_identity: "Edit identity data"
|
||||||
|
gestionnaires:
|
||||||
|
groupe_gestionnaires:
|
||||||
|
delete: Delete
|
||||||
|
messages:
|
||||||
|
form:
|
||||||
|
send_message: "Send message"
|
||||||
|
write_message_placeholder: "Write your message here"
|
||||||
instructeurs:
|
instructeurs:
|
||||||
dossiers:
|
dossiers:
|
||||||
tab_steps:
|
tab_steps:
|
||||||
|
|
|
@ -351,6 +351,10 @@ fr:
|
||||||
gestionnaires:
|
gestionnaires:
|
||||||
groupe_gestionnaires:
|
groupe_gestionnaires:
|
||||||
delete: Supprimer
|
delete: Supprimer
|
||||||
|
messages:
|
||||||
|
form:
|
||||||
|
send_message: "Envoyer le message"
|
||||||
|
write_message_placeholder: "Écrivez votre message ici"
|
||||||
instructeurs:
|
instructeurs:
|
||||||
dossiers:
|
dossiers:
|
||||||
tab_steps:
|
tab_steps:
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
fr:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
commentaire_groupe_gestionnaire:
|
||||||
|
body: 'Votre message'
|
|
@ -0,0 +1,7 @@
|
||||||
|
en:
|
||||||
|
gestionnaires:
|
||||||
|
groupe_gestionnaire_commentaires:
|
||||||
|
destroy:
|
||||||
|
notice: Your message had been deleted
|
||||||
|
alert_acl: "Can not destroy message: it does not belong to you"
|
||||||
|
alert_already_discarded: "Can not destroy message: it was already destroyed"
|
|
@ -0,0 +1,7 @@
|
||||||
|
fr:
|
||||||
|
gestionnaires:
|
||||||
|
groupe_gestionnaire_commentaires:
|
||||||
|
destroy:
|
||||||
|
notice: Votre message a été supprimé
|
||||||
|
alert_acl: Impossible de supprimer le message, celui-ci ne vous appartient pas
|
||||||
|
alert_already_discarded: Ce message a déjà été supprimé
|
|
@ -515,6 +515,7 @@ Rails.application.routes.draw do
|
||||||
delete :remove, on: :member
|
delete :remove, on: :member
|
||||||
end
|
end
|
||||||
resources :children, controller: 'groupe_gestionnaire_children', only: [:index, :create, :destroy]
|
resources :children, controller: 'groupe_gestionnaire_children', only: [:index, :create, :destroy]
|
||||||
|
resources :commentaires, controller: 'groupe_gestionnaire_commentaires', only: [:index, :show, :create, :destroy]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddEmailsToCommentaireGroupeGestionnaires < ActiveRecord::Migration[6.1]
|
||||||
|
def change
|
||||||
|
# in case sender or gestionnaire would have been deleted
|
||||||
|
add_column :commentaire_groupe_gestionnaires, :sender_email, :string
|
||||||
|
add_column :commentaire_groupe_gestionnaires, :gestionnaire_email, :string
|
||||||
|
end
|
||||||
|
end
|
|
@ -265,8 +265,10 @@ ActiveRecord::Schema[7.0].define(version: 2024_01_10_113623) do
|
||||||
t.string "body"
|
t.string "body"
|
||||||
t.datetime "created_at", precision: 6, null: false
|
t.datetime "created_at", precision: 6, null: false
|
||||||
t.datetime "discarded_at", precision: 6
|
t.datetime "discarded_at", precision: 6
|
||||||
|
t.string "gestionnaire_email"
|
||||||
t.bigint "gestionnaire_id"
|
t.bigint "gestionnaire_id"
|
||||||
t.bigint "groupe_gestionnaire_id"
|
t.bigint "groupe_gestionnaire_id"
|
||||||
|
t.string "sender_email"
|
||||||
t.bigint "sender_id", null: false
|
t.bigint "sender_id", null: false
|
||||||
t.string "sender_type", null: false
|
t.string "sender_type", null: false
|
||||||
t.datetime "updated_at", precision: 6, null: false
|
t.datetime "updated_at", precision: 6, null: false
|
||||||
|
|
|
@ -90,7 +90,7 @@ describe Administrateurs::GroupeGestionnaireController, type: :controller do
|
||||||
|
|
||||||
subject {
|
subject {
|
||||||
post :create_commentaire, params: {
|
post :create_commentaire, params: {
|
||||||
commentaire: {
|
commentaire_groupe_gestionnaire: {
|
||||||
body: body
|
body: body
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
describe Gestionnaires::GroupeGestionnaireCommentairesController, type: :controller do
|
||||||
|
let(:gestionnaire) { create(:gestionnaire).tap { _1.user.update(last_sign_in_at: Time.zone.now) } }
|
||||||
|
let(:administrateur) { create(:administrateur) }
|
||||||
|
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [administrateur]) }
|
||||||
|
let!(:commentaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur) }
|
||||||
|
|
||||||
|
describe "yyyy#index" do
|
||||||
|
render_views
|
||||||
|
subject { get :index, params: { groupe_gestionnaire_id: groupe_gestionnaire.id } }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(response).to have_http_status(:ok)
|
||||||
|
expect(assigns(:groupe_gestionnaire).commentaire_groupe_gestionnaires.select("sender_id, sender_type, sender_email, MAX(id) as id, MAX(created_at) as created_at").group(:sender_id, :sender_type, :sender_email).order("MAX(id) DESC")).to include(commentaire)
|
||||||
|
expect(response.body).to include(commentaire.sender_email)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "yyyy#show" do
|
||||||
|
render_views
|
||||||
|
subject { get :show, params: { groupe_gestionnaire_id: groupe_gestionnaire.id, id: commentaire.id } }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(response).to have_http_status(:ok)
|
||||||
|
expect(assigns(:groupe_gestionnaire).commentaire_groupe_gestionnaires.where(sender: administrateur)).to include(commentaire)
|
||||||
|
expect(response.body).to include(commentaire.body)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "yyyy#create" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
post :create,
|
||||||
|
params: {
|
||||||
|
id: commentaire.id,
|
||||||
|
groupe_gestionnaire_id: groupe_gestionnaire.id,
|
||||||
|
commentaire_groupe_gestionnaire: { body: "avant\napres" }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'of a new commentaire' do
|
||||||
|
it do
|
||||||
|
expect(groupe_gestionnaire.reload.commentaire_groupe_gestionnaires.map(&:body)).to include("avant\napres")
|
||||||
|
expect(flash.notice).to eq("Message envoyé")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "yyyy#destroy" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_commentaire(commentaire)
|
||||||
|
delete :destroy,
|
||||||
|
params: {
|
||||||
|
groupe_gestionnaire_id: groupe_gestionnaire.id,
|
||||||
|
id: commentaire_to_delete.id
|
||||||
|
},
|
||||||
|
format: :turbo_stream
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the commentaire was created by the gestionnaire' do
|
||||||
|
let(:commentaire_to_delete) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur) }
|
||||||
|
|
||||||
|
before { remove_commentaire(commentaire_to_delete) }
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(groupe_gestionnaire.reload.commentaire_groupe_gestionnaires.count).to eq(2)
|
||||||
|
expect(commentaire_to_delete.reload.discarded?).to eq(true)
|
||||||
|
expect(flash.notice).to eq("Votre message a été supprimé")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the commentaire was not created by the gestionnaire' do
|
||||||
|
let(:commentaire_to_delete) { commentaire }
|
||||||
|
|
||||||
|
before { remove_commentaire(commentaire_to_delete) }
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(groupe_gestionnaire.reload.commentaire_groupe_gestionnaires.count).to eq(1)
|
||||||
|
expect(commentaire_to_delete.reload.discarded?).to eq(false)
|
||||||
|
expect(flash.alert).to eq("Impossible de supprimer le message, celui-ci ne vous appartient pas")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,6 +5,29 @@ describe CommentaireGroupeGestionnaire, type: :model do
|
||||||
it { is_expected.to belong_to(:sender) }
|
it { is_expected.to belong_to(:sender) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#create" do
|
||||||
|
let(:commentaire_groupe_gestionnaire) { create :commentaire_groupe_gestionnaire, sender: sender, gestionnaire: gestionnaire }
|
||||||
|
|
||||||
|
context 'when created by an administrateur' do
|
||||||
|
let(:sender) { create(:administrateur) }
|
||||||
|
let(:gestionnaire) { nil }
|
||||||
|
it 'set correctly sender_email and gestionnaire_email' do
|
||||||
|
expect(commentaire_groupe_gestionnaire.sender_email).to eq(sender.email)
|
||||||
|
expect(commentaire_groupe_gestionnaire.gestionnaire_email).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when answer by a gestionnaire' do
|
||||||
|
let(:sender) { create(:administrateur) }
|
||||||
|
let(:gestionnaire) { create(:gestionnaire) }
|
||||||
|
|
||||||
|
it 'set correctly sender_email and gestionnaire_email' do
|
||||||
|
expect(commentaire_groupe_gestionnaire.sender_email).to eq(sender.email)
|
||||||
|
expect(commentaire_groupe_gestionnaire.gestionnaire_email).to eq(gestionnaire.email)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#soft_deletable?" do
|
describe "#soft_deletable?" do
|
||||||
subject { commentaire_groupe_gestionnaire.soft_deletable?(user) }
|
subject { commentaire_groupe_gestionnaire.soft_deletable?(user) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue